iptables默认有4个表
nat表(地址转换表)、filter表(数据过滤表)、raw表(状态跟踪表)、mangle表(包标记表)
iptables的5个链
INPUT链(入站规则)
OUTPUT链(出站规则)
FORWARD链(转发规则)
PREROUTING链(路由前规则)
POSTROUTING链(路由后规则)
iptables-save > /etc/sysconfig/iptables 或者用service iptables save #使当前规则永久有效
数据流向及匹配
入站:PREROUTING--->INPUT
出站:OUNPUT--->POSTROUTING
转发:PREROUTING--->FORWARD--->POSTROUTING
目标操作
ACCEPT:允许通过/放行
DROP:直接丢弃,不给出任何回应
REJECT:拒绝通过,必要时会给出提示
LOG:记录日志,然后传给下一条规则,匹配即停止,LOG是例外
常用的管理选项
-A 在链的末尾追加一条规则
-I 在链的开头(或指定序号)插入一条规则
-L 列出所有的规则条目
-n 以数字形式显示地址,端口等信息
--line-numbers 查看规则时,显示规则的序号
-D 删除链内指定序号(或内容)的一条规则
-F 清空所有规则
-P 为指定的链设置默认规则
-i 限定报文仅能够从指定的接口流入
-o 限定报文仅能够从指定的接口流出
实例:
iptables -t filter -I INPUT -p icmp -j REJECT #拒绝ICMP包入站
iptables -I INPUT 3 -p udp -j ACCEPT #插入规则至filter表中的INPUT链的第3行
iptables -nL INPUT #查看规则列表
iptables -D INPUT 3 #删除INPUT链中的第三条规则
iptables -F #清空filter规则
iptables -t nat -F #清空nat表规则
iptables -t filter -P(重置默认规则) INPUT DROP #设置默认规则为DROP(远程时慎用)
iptables -A INPUT -s 192.168.4.52 -j DROP
iptables -A FORWARD -s 192.168.4.51 -j DROP #拒绝转发源IP地址为192.168.4.51的包
iptables -I INPUT -s 192.168.4.52 -p tcp --dport 22 -j REJECT #限定对目的端口22的访问
iptables -A OUTPUT -d 192.168.4.51 -p tcp --dport 22 -j REJECT
#禁ping相关策略处理
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP #禁止其它主机ping自己
扩展匹配
MAC地址匹配:-m mac --mac-source MAC地址
多端口匹配: -m multiport --sport 源端口列表
-m multiport --dport 目标端口列表
-m iprange --src-range IP1-IP2
-m iprange --dst-range IP1-IP2
#示例
ip link show eth0 #查看MAC地址
iptables -A INPUT -m mac --mac-source 52:54:00:81:99:1c -j DROP #拒绝源MAC进入
iptables -A INPUT -p tcp -m multiport --dports 20:22,25,80 -j ACCEPT #20:22代表20,21,22
iptables -A INPUT -p tcp --dport 22 -m iprange --src-range 192.168.4.200-192.168.4.254 -j ACCEPT
NAT转换原理
SNAT源地址转换:修改数据包的源地址,仅用于nat表的POSTROUTING(路由后)链
route add default gw 192.168.4.52 #配置网关,需停止NetworkManager服务
route del default gw 192.168.4.52 #删除网关
iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -p tcp --dport 80 -j SNAT --to-source 192.168.4.52
#192.168.2.0网段访问外网的WEB服务器时Linux网关设备将源IP地址修改为192.168.4.52
#地址伪装策略
iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -o eth0 -j MASQUERADE