-s 地址:指定报文源IP地址的匹配的范围;可以是IP,也可以是网络地址;可使用!取反
--src, --source
-d 地址:指定报文目标IP地址匹配的范围
--dst, --destination
-p 协议:指定匹配报文的协议类型,一般有三种tcp,udp,icmp
-i ethX :数据报文流入的接口:PREROUTING,INPUT,FORWARD
-o ethX :数据报文流入的接口:OUTPUT,FORWARD,POSTROUTING
扩展匹配
隐式匹配: 当使用-p{tcp|udp|icmp}中的一种时,可以直接使用扩展专用选项
-p tcp
--sport PORT[-PORT]:指定源端口,可以是多个端口
--dport PORT[-PORT]:指定目标端口,可以是连续的多个端口
--tcp-flag:TCP的标志位列表(用逗号分隔)
必须为1 的标志位列表
eg:--tcp-flags syn,ack,rst,fin syn
-p udp
--sport PORT[-PORT]:指定源端口,可以是多个端口
--dport PORT[-PORT]:指定目标端口,可以是连续的多个端口
-p icmp
--icmp-type:
echo-request(请求回显),一般用8 来表示
echo-reply (响应的数据包)一般用0来表示
显示扩展 -m 必须要指定要扩展的扩展模块名称
multiport: 多端口匹配
可用于匹配非连续或连续端口;最多指定15个端口;用冒号分隔
eg:
iptables -I INPUT -d 172.16.100.7 -p tcp -m multiport --dports 22,80 -j ACCEPT
iptables -I OUTPUT -s 172.16.100.7 -p tcp -m multiport --sports 22,80 -j ACCEPT
iprange: 匹配指定范围内的地址
匹配一段连续的地址而非整个网络时有用;
专用选项:
[!] --src-ragne IP[-IP]
[!] --dst-range
iptables -A INPUT -d 172.16.100.7 -p tcp --dport 23 -m iprange --src-range 172.16.100.1-172.16.100.100 -j ACCEPT
iptables -A OUTPUT -s 172.16.100.7 -p tcp --sport 23 -m iprange --dst-range 172.16.100.1-172.16.100.100 -j ACCEPT
string: 字符串匹配,能够检测报文应用层中的字符串
字符匹配检查高效算法
kmp, bm
专用选项:
--algo {kmp|bm}
--string "STRING"
--hex-string "HEX_STRING": HEX_STRING为编码成16进制格式的字串;
eg:
iptables -I OUTPUT -m string --algo kmp --string "sex" -j DROP
time: 基于时间做访问控制
专用选项:
--datestart YYYY[-MM][-DD[Thh[:mm[:ss]]]]
--datestop
--timestart hh:mm[:ss]
--timestop hh:mm[:ss]
--weekdays day[,day]Mon, Tue,
eg:
iptables -I INPUT -d 172.16.100.7 -p tcp --dport 80 -m time --timestart 08:20 --timestop 18:40 --weekdays Mon,Tue,Thu,Fri -j REJECT
connlimit: 连接数限制,对每IP所能够发起并发连接数做限制;
专用选项:
[!] --connlimit-above [n]
eg:
iptables -A INPUT -d 172.16.100.7 -p tcp --dport 22 -m connlimit --connlimit-above 2 -j DROP
limit: 速率限制
专用选项:
--limit n[/second|/minute|/hour|/day]
--limit-burst n
eg:
iptables -A INPUT -d 172.16.100.7 -p icmp --icmp-type 8 -m limit --limit 20/minute --limit-burst 5 -j ACCEPT
state: 状态检查
专用选项:
--state
连接追踪中的状态:
NEW: 新建立一个会话
ESTABLISHED:已建立的连接
RELATED: 有关联关系的连接
INVALID: 无法识别的连接
调整连接追踪功能所能容纳的连接的最大数目:
/proc/sys/net/nf_conntrack_max
当前追踪的所有连接
/proc/net/nf_conntrack
不同协议或连接类型追踪时的属性:
/proc/sys/net/netfilter目录:
放行被动模式下的FTP服务:
1、装载模块/lib/modules/KERNEL_VERSION/kernel/net/netfilter/
模块:nf_conntrack_ftp
2、放行请求报文:
(1)放行NEW状态对21端口请求的报文;
(2) 放行ESTABLISHED以及RELATED状态的报文
3、旅行响应报文:
(1) 放行ESTABLISHED以及RELATED状态的报文
四、写规则
先确定功能(表),确定报文流向,确定要实现的目标,确定匹配条件
流向
与本机进程通信:
流入:-->PREROUTING-->INPUT
流出:-->OUTPUT-->POSTROUTING
经由本机转发:
请求:-->PREROUTING-->FORWARD-->POSTROUTING
响应:-->PREROUTING-->FORWARD-->POSTROUTING
写规则时要注意:
服务端:先进后出
客户端:先出后进
客户端端口是随机的,因此大多数场景下无须限定
规则文件:/etc/sysconfig/iptables
保存启用中的规则于规则文件中:
1、iptables-save > /etc/sysconfig/iptables
2、service iptables save
生效规则文件中的规则:
1、iptables-restore < /etc/sysconfig/iptables
2、service iptables restart
执行的操作:清空现有规则,读取并生效规则文件中的规则
常用语法
删除规则:
iptables [-t table] -D chain rulenum
设置策略:
iptables [-t table] -P chain target
修改规则:
iptables [-t table] -R chain rulenum rule-specification
插入规则:
iptables [-t table] -I chain [rulenum] rule-specification
创建自定义链:
iptables [-t table] -N chain
删除自定义且0引用的空链
iptables [-t table] -X chain
重命名自定义链:
iptables [-t table] -E old_name new_name