iptables详解

iptables命令:

iptables [-t table] {-A|-C|-D} chain rule-specification

iptables [-t table] -I chain [rulenum] rule-specification

iptables [-t table] -R chain rulenum rule-specification

iptables [-t table] -D chain rulenum

iptables [-t table] -S [chain [rulenum]]

iptables [-t table] {-F|-L|-Z} [chain [rulenum]] [options…]

iptables [-t table] -N chain

iptables [-t table] -X [chain]

iptables [-t table] -P chain target

iptables [-t table] -E old-chain-name new-chain-name

rule-specification = [matches…] [target]

match = -m matchname [per-match-options]

target = -j targetname [per-target-options]

规则格式:iptables [-t table] COMMAND chain [-m matchname [per-match-options]] -j targetname [per-target-options]

-t table:
raw, mangle, nat, [filter]
chain:
PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING

COMMAND:
链管理:
-N:new, 自定义一条新的规则链;
-X:delete,删除自定义的规则链;
-P:Policy,设置默认策略;对filter表中的链而言,其默认策略有:
ACCEPT:接受
DROP:丢弃
REJECT:拒绝
-E:重命名自定义链;引用计数不为0的自定义链不能够被重命名,也不能被删除;
规则管理:
-A:append,追加;
-I:insert, 插入,要指明位置,省略时表示第一条;
-D:delete,删除;
(1) 指明规则序号;
(2) 指明规则本身;
-R:replace,替换指定链上的指定规则;

-F:flush,清空指定的规则链;
-Z:zero,置零;
iptables的每条规则都有两个计数器:
(1) 匹配到的报文的个数;
(2) 匹配到的所有报文的大小之和;
查看:
-L:list, 列出指定鏈上的所有规则;
-n:numberic,以数字格式显示地址和端口号;
-v:verbose,详细信息;
-vv, -vvv
-x:exactly,显示计数器结果的精确值;
–line-numbers:显示规则的序号;

匹配条件:
基本匹配条件:无需加载任何模块,由iptables/netfilter自行提供;
[!] -s, –source address[/mask][,…]:检查报文中的源IP地址是否符合此处指定的地址或范围;
[!] -d, –destination address[/mask][,…]:检查报文中的目标IP地址是否符合此处指定的地址或范围;
[!] -p, –protocol protocol
protocol: tcp, udp, udplite, icmp, icmpv6,esp, ah, sctp, mh or “all”
{tcp|udp|icmp}
[!] -i, –in-interface name:数据报文流入的接口;只能应用于数据报文流入的环节,只能应用于PREROUTING,INPUT和FORWARD链;
[!] -o, –out-interface name:数据报文流出的接口;只能应用于数据报文流出的环节,只能应用于FORWARD、OUTPUT和POSTROUTING链;

隐式扩展:不需要手动加载扩展模块;因为它们是对协议的扩展,所以,但凡使用-p指明了协议,就表示已经指明了要扩展的模块;
tcp:
[!] –source-port, –sport port[:port]:匹配报文的源端口;可以是端口范围;
[!] –destination-port,–dport port[:port]:匹配报文的目标端口;可以是端口范围;
[!] –tcp-flags mask comp
mask is the flags which we should examine, written as a comma-separated list,例如 SYN,ACK,FIN,RST
comp is a comma-separated list of flags which must be set,例如SYN
例如:“–tcp-flags SYN,ACK,FIN,RST SYN”表示,要检查的标志位为SYN,ACK,FIN,RST四个,其中SYN必须为1,余下的必须为0;
[!] –syn:用于匹配第一次握手,相当于”–tcp-flags SYN,ACK,FIN,RST SYN“;
udp
[!] –source-port, –sport port[:port]:匹配报文的源端口;可以是端口范围;
[!] –destination-port,–dport port[:port]:匹配报文的目标端口;可以是端口范围;

icmp
[!] –icmp-type {type[/code]|typename}
echo-request:8
echo-reply:0

扩展匹配条件: 需要加载扩展模块,方可生效;
1、multiport扩展
以离散方式定义多端口匹配;最多指定15个端口;

[!] –source-ports,–sports port[,port|,port:port]…:指定多个源端口;
[!] –destination-ports,–dports port[,port|,port:port]…:指定多个目标端口;
[!] –ports port[,port|,port:port]…:指明多个端口;

~]# iptables -A INPUT -s 172.16.0.0/16 -d 172.16.100.67 -p tcp -m multiport –dports 22,80 -j ACCEPT

2、iprange扩展
指明连续的(但一般不脑整个网络)ip地址范围;

[!] –src-range from[-to]:源IP地址;
[!] –dst-range from[-to]:目标IP地址;

~]# iptables -A INPUT -d 172.16.100.67 -p tcp –dport 80 -m iprange –src-range 172.16.100.5-172.16.100.10 -j DROP

3、string
–algo {bm|kmp}:字符串匹配检测算法;
bm:Boyer-Moore
kmp:Knuth-Pratt-Morris
[!] –string pattern:要检测的字符串模式;
[!] –hex-string pattern:要检测的字符串模式,16进制格式;

~]# iptables -A OUTPUT -s 172.16.100.67 -d 172.16.0.0/16 -p tcp –sport 80 -m string –algo bm –string “gay” -j REJECT
在入站请求上做检测意义不大

4、time 时间同步服务器 ntp 202.120.2.101
-m time
–datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
–datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]

–timestart hh:mm[:ss]
–timestop hh:mm[:ss]

[!] –monthdays day[,day…]
[!] –weekdays day[,day…]

[root@localhost ~]# iptables -A INPUT -p tcp -d 192.168.68.134 -m time –timestart 1:00:00 –timestop 2:00:00 -j ACCEPT
[root@localhost ~]# iptables -A OUTPUT -p tcp -s 192.168.68.134 -m time –timestart 1:00:00 –timestop 2:00:00 -j ACCEPT
限制时间段9:00-10:00访问
看网上说要加–kerneltz 否则默认是UTC时间 亲测发现加不加都是UTC时间 按照你的时间-8就行了

5、connlimit扩展
根据每客户端IP做并发连接数数量匹配;
–connlimit-upto n:连接的数量小于等于n时匹配;
–connlimit-above n:连接的数量大于n时匹配;
[root@localhost ~]# iptables -A INPUT -d 192.168.68.134 -p tcp –dport 22 -m connlimit –connlimit-upto 2 -j ACCEPT
[root@localhost ~]# iptables -A OUTPUT -s 192.168.68.134 -p tcp –sport 22 -j ACCEPT

6、limit扩展
基于收发报文的速率做匹配;

令牌桶过滤器;

–limit rate[/second|/minute|/hour|/day]
–limit-burst number

[root@localhost ~]# iptables -A INPUT -d 192.168.68.134 -p icmp –icmp-type 8 -m limit –limit 3/min –limit-burst 5 -j ACCEPT
[root@localhost ~]# iptables -A OUTPUT -s 192.168.68.134 -p icmp –icmp-type 0
[root@localhost ~]# iptables -A OUTPUT -s 192.168.68.134 -p icmp –icmp-type 0 -j ACCEPT
防DOS攻击

7、state:是conntrack的子集
conntrack机制:追踪本机上的请求和响应之间的关系;状态有如下几种:
NEW:新发出请求;连接追踪模板中不存在此连接的相关信息条目,因此,将其识别为第一次发出的请求;
ESTABLISHED:NEW状态之后,连接追踪模板中为其建立的条目失效之前期间内所进行的通信状态;
RELATED:相关联的连接;如ftp协议中的数据连接与命令连接之间的关系;
INVALID:无效的连接;
UNTRACKED:未进行追踪的连接;

已经追踪到的链接可以在/proc/net/nf_conntrack中查看
最大追踪链接数 /proc/sys/net/nf_conntrack_max中查看
调整最大数~]# sysctl -w net.nf_conntrack_max=300000
或~]# echo 300001 > /proc/sys/net/nf_conntrack_max

超时的连接会被删除;当模板满载时,后续的新连接有可能会超时
1)加大nf_conntrack_max的值
2)降低nf_conntrack条目的超时时常
不同协议的连接追踪时长/proc/sys/net/netfilter/

iptables的链接跟踪表最大容量为/proc/sys/net/ipv4/ip_conntrack_max,链接碰到各种状态的超时后就会从表中删除;当模板满载时,后续的连接可能会超时

解決方法一般有两个:
(1) 加大nf_conntrack_max 值
vi /etc/sysctl.conf
net.ipv4.nf_conntrack_max = 393216
net.ipv4.netfilter.nf_conntrack_max = 393216

(2) 降低 nf_conntrack timeout时间
vi /etc/sysctl.conf
net.ipv4.netfilter.nf_conntrack_tcp_timeout_established = 300
net.ipv4.netfilter.nf_conntrack_tcp_timeout_time_wait = 120
net.ipv4.netfilter.nf_conntrack_tcp_timeout_close_wait = 60
net.ipv4.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120

实用规则
iptables -A INPUT -d 192.168.68.134 -p tcp -m mulitiport –dports 22,23,80 -m state –state NEW -j ACCEPT
iptables -A INPUT -d 192.168.68.134 -p tcp -m multiport –dports 22,23,80 -m state –state NEW -j ACCEPT
iptables -A INPUT -d 192.168.68.134 -p icmp –icmp-type 8 -m state –state NEW,ESTABLISHED -jACCEPT
iptables -A OUTPUT -m state –state ESTABLISHED -j ACCEPT

 

RELATED 如何放行被动的ftp服务
1)modprobe nf_conntrack_ftp #内核装载ftp模块
2)放行命令连接
iptables -A INPUT -d $sip -p tcp –dport 21 -m state –state NEW,ESTABLISHED -j ACCEPT

3)放行数据连接
iptables -A INPUT -s $sip -p tcp -m state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -d $sip -p tcp -m state ESTABLISHED -j ACCEPT

规则的用效期限:
使用iptables命令定义的规则,手动删除之前,其生效期限为kernel存活期限;

保存规则:
保存规则至指定的文件:
CentOS 6:
~]# service iptables save
将规则保存至/etc/sysconfig/iptables文件中;

~]# iptables-save > /PATH/TO/SOME_RULES_FILE

CentOS 7:
~]# iptables-save > /PATH/TO/SOME_RULES_FILE

重新载入预存规则文件中规则:
~]# iptables-restore < /PATH/FROM/SOME_RULES_FILE

CentOS 6:
~]# service iptables restart

自动生效规则文件中的规则:
(1) 用脚本保存各iptables命令;让此脚本开机后自动运行;
/etc/rc.d/rc.local文件中添加脚本路径;
/PATH/TO/SOME_SCRIPT_FILE

(2) 用规则文件保存各规则,开机时自动载入此规则文件中的规则;
/etc/rc.d/rc.local文件添加:
iptables-restore < /PATH/FROM/IPTABLES_RULES_FILE

centos6
service iptables save
chkconfig iptales on

处理动作
-j ACCEPT DROP REJECT
RETURN 返回调用的链
REDIRECT 端口重定向
LOG日志
MARK 防火墙标记
DNAT 目标地址转换
SNAT 源地址转换
MASQUERADE地址伪装 POSTROUTING

LOG
iptables -I FORWARD 2 -s 10.0.0.0/24 -p tcp –dport 80 -m state –state NEW -j LOG –log-prefix “new connect:”
在/var/log/messages下看到日志

REDIRECT 端口映射
[root@centos ~]# iptables -t nat -A PREROUTING -d 192.168.68.144 -p tcp –dport 80 -j REDIRECT –to-ports 8080
客户端访问的80端口 实际响应的是8080端口

 

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/88317

(0)
N27_flypigN27_flypig
上一篇 2017-11-12
下一篇 2017-11-12

相关推荐

  • 第一天参与马哥linux运维面授

    很高兴认识大家,介绍一下,我叫袁亚琼,来自美丽的云南。我是一个随和而又不随性95年女子,喜欢运动,擅长田径。学食品检测的,上学期间没怎么接触计算机,现在又来学专业计算机,内心还是有几丝恐慌,希望在今后的学习路上得到各位学友和老师的指导和帮助。等工作稳定,可以去云南放松一下,云南是个吃喝玩乐的好地方,同时也是个感受慢节奏生活的佳地。云南欢迎您哦! 选择学习li…

    Linux干货 2018-03-26
  • linux中常用文本处理工具

       在linux文件系统中经常会使用到文本处理工具,这里简单介绍几种文本处理工具: 抽取文本的工具 文件内容:less和cat 文件截取:head和tail 按列抽取:cut 按关键字抽取:grep , egrep 文件查看命令:cat, tac,rev,more,less   cat命令是用户经常使用的用来查看文本…

    Linux干货 2016-08-07
  • mysql知识系列–东西比较全

     A。结构化查询语言(structured query language) B。SQL语句分类  -在MySql数据库中,SQL语句主要可以划分以下几类:  ——DDL(data definition language):数据定义语言,定义对数据库对象(库、表、列、索引)的操作  -create,drop,alter,…

    Linux干货 2017-02-14
  • Linux获取命令帮助的途径

    在学习和使用Linux的过程中,免不了会遇到一些我们不熟悉或者不知道的命令。对于这些我们不熟悉的命令,就需要查找帮助文档来获取更多信息来协助我们完成相关的工作。 如何获取Linux命令的使用帮助? 1.  针对内部命令 help [命令名] 2.  针对外部命令 [命令名] –help,    获取简要帮助…

    Linux干货 2017-09-01
  • bash特性、bash编程

    bash基础特性: 命令行展开:~,{} 命令别名:alias,unalias 命令历史:history 命令和路径补全:$PATH glob通配符:*,?,[],[^], 快捷键:Ctrl+{a,e,l,c,u,k} 命令hash:   bash通配符及特殊符号: 通配符: ?:任意一个字符; *:匹配任意个任意字符; []:匹配括号内的任意一个…

    Linux干货 2018-03-21
  • vim编辑器

    导读:      本章将主要介绍Linux中的一种常用文本编辑器vim,具体内容如下:       □使用vi和vim的三种主要模式       移动光标,进入插入模式       改变、删除、复制文本     &n…

    Linux干货 2016-08-15