链管理:
-F: flush,清空规则链,省略链,表示清空指定表上的所有的链;
-N: new,创建新的自定义规则链;
-X: drop,删除用户自定义的空的规则链;
-Z: zero,清零,置零规则计数器;
-P: policy,为指定链设置默认策略,对filter表中的链而言,默认策略通常有ACCEPT,DROP,REJECT;
-E: rename,重命名自定义链;注意:引用计数器不为0的自定义链,无法改名,也无法删除;
规则管理:
-A: append,将新规则追加于指定链的尾部;
-I: insert,将新规则插入至指定链的指定位置;
-D: delete,删除指定链上的指定规则
有两种指定方式:
1. 指定匹配条件
2. 指定规则编号
-R: replace,替换指定链上的指定规则;
查看规则:
-L: list, 列出指定链上的所有规则;
-n: numberic, 以数字格式显示地址的端口号;
-v: verbose, 显示详细信息;
还能用-vv,-vvv
--line-numbers: 显示规则编号;
-x: exactly, 显示计数器计数结果的精确值;
匹配条件:
基本匹配:
[!] -s, --src, --source IP|Netaddr 检查报文中的源IP地址是否符合此处指定的地址范围;
[!] -d, --dst, --destination IP|Netaddr 检查报文中的目标IP是否符合此处指定的地址范围;
-p, --protocol {tcp|icmp|udp}: 检查报文中的协议,即ip首部中的protocols所标识的协议;
-i ,--in-interface IFACE: 数据报文的流入接口; 仅能用于PREROUTING,INPUT,FORWARD链上;
-o, --out-interface IFACE: 数据报文的流出接口;仅能用于FORWARD,OUTPUT及POSTROUTI
NG上;
扩展匹配: -m macth_name --spec_options
隐式扩展: 对-p 指明协议进行的扩展,可省略-m选项;
-p tcp
--dport PORT[-PORT]: 目标端口,可以是单个端口或连续多个端口
--sport PORT[-PORT]: 源端口,…………
--tcp-flages LIST1 LIST2: 检查LIST1所指明的所有标志位,且这其中,LIST2所表示出的所有标志位必须为1,余下的必须为0,没有LIST1中指明的,不作检查;
SYN,ACK, FIN,RST,PSH, URG
--tcp-flags SYN,ACK,FIN,RST SYN
--syn 同上
-p udp
-p icmp
--icmp-type
可用数字表示其类型
0: echo-reply 回显应答
8: echo-request 回显请求
显示扩展:必须使用-m 选项指定使用的扩展;(rpm -ql iptables | grep "\.so")
帮助文档:
centos 6: man iptables
centos 7: man iptables-extensions
multiport扩展:
多端口匹配
以离散方式定义多端口匹配,最多指定15个;
[!] --source-ports,--sports port[,port|,port:port]... 指明多个源端口
[!] --destination-ports,--dports port[,port|,port:port]... 指明多个目标端口
[!] --ports port[,port|,port:port]... 不区分源和目标
#iptables -I INPUT -d 192.168.141.10 -p tcp -m multiport --dports 22,80 -j ACCEPT
#iptables -I OUTPUT -s 192.168.141.10 -p tcp -m multiport --sports 22,80 -j ACCEPT
iprange扩展:
指明连续的(但一般是不能扩展为整个网络)IP地址范围时使用;
[!] --src-range from[-to]: 指明连续的源IP地址范围;
[!] --dst-range from[-to]: 指明连续的目标IP地址范围;
# iptables -I INPUT -d 192.168.141.10 -p tcp -m multiport --dports 22:23,80 -m iprange --src-range 192.168.141.190-192.168.141.200 -j ACCEPT
# iptables -I OUTPUT -s 192.168.141.10 -p tcp -m multiport --sports 22:23,80 -m iprange --dst-range 192.168.141.190-192.168.141.200 -j ACCEPT
string扩展:
检查报文中出现的字符串
--algo {bm|kmp}
[!] --string pattern
# iptables -I OUTPUT -m string --algo bm --string 'movie' -j REJECT
time扩展
根据报文到达的时间与指定的时间范围进行匹配;
--datestart
--datesop
--timestart
--timestop
--mothdays
--weekdays
例: 从0点到24点,不允许访问
iptables -I INPUT -d 192.168.141.10 -p tcp --dport 80 -m time --timestart 00:00 --timestop 23:59 -j REJECT
connlimit扩展
根据每客户端IP(也可以是地址块)做并发连接数数量匹配
--connlimit-above n : 连接的数量大于n
# allow 2 telnet connections per client host
iptables -A INPUT -p tcp --syn --dport 23 -m connlimit --connlimit-above 2 -j REJECT
--connlimit-upto n: 连接的数量小于等于n
# you can also match the other way around:
iptables -A INPUT -p tcp --syn --dport 23 -m connlimit --connlimit-upto 2 -j ACCEPT
limit 扩展
基于收发报文的速率做检查;
令牌桶过滤器:
--limit-burst number
--limit rate[/second|/minute|/hour|/day]
state扩展
根据连接追踪机制来检查连接的状态;
可追踪的连接状态:
NEW: 新发出的请求; 连接追踪模板中不存在此连接相关的信息条目,因此,将其识别为第一次发出的请求;
ESTABLISHED: NEW状态之后,连接追踪模板中为其建立的条目失效之前期间内所进行的通信的状态;
RELATED: 相关的连接; 如FTP协议的命令连接与数据连接之间的关系;
INVALIED: 无法识别的连接;
调整连接追踪功能所能够容纳的最大连接数量
/proc/sys/net/nf_conntrack_max
已经追踪到并记录下的连接
/proc/net/nf_conntrack
不同协议或连接类型追踪的时长:
/proc/sys/net/netfilter
--state
#iptables -I INPUT -d 192.168.141.10 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
#iptables -I OUTPUT -s 192.168.141.10 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
目标:
-j TARGET: jump至指定的TARGET
ACCEPT: 接受
DROP: 丢度
REJECT: 拒绝
RETURN: 返回调用链
REDIRECT: 端口重定向
LOG: 记录日志
MARK: 做防火墙标记
DNAT: 目标地址转换
SNAT: 源目标地址转换
MASQUERADE: 地址伪装
自定义链: 由自定义链上的规则进行匹配检查
本文转自limingyu0312 51CTO博客,原文链接:http://blog.51cto.com/limingyu/1958639,如需转载请自行联系原作者