iptables 从入门到应用
目录
四表
- filter 控制数据包是否允许进出及转发,可以控制的链路有input, forward, output
- nat 控制数据包中地址转换,可以控制的链路有prerouting, input, output, postrouting
- mangle 修改数据包中的原数据,可以控制的链路有prerouting, input, forward, output, postrouting
- raw 控制nat表中连接追踪机制的启用状况,可以控制的链路有prerouting, output
- security 是否定义强制访问控制规则(CentOS 7)
五链
指内核中控制网络的NetFilter定义的五个规则链
- PREROUTING 路由前
- INPUT 数据包流入口
- FORWARD 转发关卡
- OUTPUT 数据包出口
- POSTROUTING 路由后
堵通策略
指对数据包所做的操作
- ACCEPT
- DROP
- REJECT
语法规则
iptables [-t table] COMMAND [chain] CRETIRIA -j ACTION
-t table 是指操作的表,filter、nat、mangle或raw, 默认使用filter
COMMAND 子命令,定义对规则的管理,-A -D -L -F -P -I -R -n
chain 指明链路,INPUT OUTPUT FORWARD PREROUTING POSTROUTING
CRETIRIA 匹配的条件或标准,有下面指定方式等 -p tcp、-s、-d、--sport、--dport、--dports、-m tcp、-m state、-m multiport
ACTION 操作动作,ACCEPT DROP REJECT DNAT SNAT
示例
查看已有的规则
iptables -nl
不允许10.8.0.0/16网络对80/tcp端口进行访问
iptables -A INPUT -s 10.8.0.0/16 -d 172.16.55.7 -p tcp --dport 80 -j DROP
- -A 添加一条记录
- INPUT 指明链路
- -s -d -p --dport 设置过滤条件
- -j DROP 丢弃符合条件的报文
离散或连续的 方式定义多端口匹配条件,最多15个
iptables -I INPUT -d 172.16.0.7 -p tcp -m multiport --dports 22,80,139,445,3306 -j ACCEPT
以连续地址块的方式来指明多IP地址匹配条件
iptables -I INPUT -d 172.16.0.7 -p tcp -m multiport --dports 22,80,139,445,3306 -m iprange --src-range 172.16.0.61-172.16.0.70 -j REJECT
匹配数据包到达的时间
todo
匹配数据包中的字符
iptables -I OUTPUT -m string --algo bm --string "gay" -j REJECT
用于限制同一IP可建立的连接数目
iptables -I INPUT -d 172.16.0.7 -p tcp --syn --dport 22 -m connlimit --connlimit-above 2 -j REJECT
限制收发数据包的速率(上下行同时限制)
# 指定要隔多长时间才能签发一个新的通行证。由于MTU是1500byte(1.46484375KB),实际限速为:rate * MTU
--limit rate[/second|/minute|/hour|/day]
# 指定刚开始时有多少通行证可用
--limit-burst number
# 查看MTU
cat /sys/class/net/eth0/mtu
iptables -A INPUT -m limit -d 192.168.106.131 --limit 100/s --limit-burst 10 -j ACCEPT
iptables -A INPUT -d 192.168.106.131 -j DROP
iptables -A OUTPUT -m limit -d 192.168.106.131 --limit 100/s --limit-burst 10 -j ACCEPT
iptables -A OUTPUT -d 192.168.106.131 -j DROP
限制收发包的状态
todo