Iptables常用设置

常用配置:
 chkconfig iptables on      开机自启动
 service iptables start    启动iptables
 service iptables save     保存当前iptables配置至默认配置文件/etc/sysconfig/iptables
 iptables-save > /etc/sysconfig/iptables   手动重定向至配置文件
 iptables-restore < /etc/sysconfig/iptables   从配置文件中恢复规则

 在指定表的指定链的尾部添加一条规则
 命令语法:iptables -t 表名 -A 链名 匹配条件 -j 动作
 示例:iptables -t filter -A INPUT -s 192.168.1.146 -j DROP

 在指定表的指定链的首部添加一条规则
 命令语法:iptables -t 表名 -I 链名 匹配条件 -j 动作
 示例:iptables -t filter -I INPUT -s 192.168.1.146 -j ACCEPT

 指定表的指定链的指定位置添加一条规则
 命令语法:iptables -t 表名 -I 链名 规则序号 匹配条件 -j 动作
 示例:iptables -t filter -I INPUT 5 -s 192.168.1.146 -j REJECT

 设置指定表指定链的默认策略
 命令语法:iptables -t 表名 -P 链名 动作
 示例:iptables -t filter -P FORWARD ACCEPT

 按照指定序号删除规则
 命令语法:iptables -t 表名 -D 链名 规则序号
 示例:iptables -t filter -D INPUT 3

 删除指定表中指定链的指定规则
 命令语法:iptables -t 表名 -D 链名 匹配条件 -j 动作
 示例:iptables -t filter -D INPUT -s 192.168.1.146 -j DROP

 删除指定表中指定链的所有规则
 命令语法:iptables -t 表名 -F 链名
 示例:iptables -t filter -F INPUT
 
 删除指定表中的所有规则
 命令语法:iptables -t 表名 -F
 示例:iptables -t filter -F

 修改指定表中指定链的指定规则
 命令语法:iptables -t 表名 -R 链名 规则序号 规则原本的匹配条件 -j 动作
 示例:iptables -t filter -R INPUT 3 -s 192.168.1.146 -j ACCEPT

 修改指定表指定链的默认策略
 命令语法:iptables -t 表名 -P 链名 动作
 示例:iptables -t filter -P FORWARD ACCEPT

 源地址示例
 iptables -t filter -I INPUT -s 192.168.1.111,192.168.1.118 -j DROP
 iptables -t filter -I INPUT -s 192.168.1.0/24 -j ACCEPT
 iptables -t filter -I INPUT ! -s 192.168.1.0/24 -j ACCEPT

 目标地址示例
 iptables -t filter -I OUTPUT -d 192.168.1.111,192.168.1.118 -j DROP
 iptables -t filter -I INPUT -d 192.168.1.0/24 -j ACCEPT
 iptables -t filter -I INPUT ! -d 192.168.1.0/24 -j ACCEPT

 指定过滤协议示例
 iptables -t filter -I INPUT -p tcp -s 192.168.1.146 -j ACCEPT
 iptables -t filter -I INPUT ! -p udp -s 192.168.1.146 -j ACCEPT

 INPUT指定网卡示例
 iptables -t filter -I INPUT -p icmp -i eth4 -j DROP
 iptables -t filter -I INPUT -p icmp ! -i eth4 -j DROP

 OUTPUT指定网卡示例
 iptables -t filter -I OUTPUT -p icmp -o eth4 -j DROP
 iptables -t filter -I OUTPUT -p icmp ! -o eth4 -j DROP

 TCP扩展匹配示例
 iptables -t filter -I OUTPUT -d 192.168.1.146 -p tcp -m tcp --sport 22 -j REJECT
 iptables -t filter -I INPUT -s 192.168.1.146 -p tcp -m tcp --dport 22:25 -j REJECT
 iptables -t filter -I INPUT -s 192.168.1.146 -p tcp -m tcp --dport :22 -j REJECT
 iptables -t filter -I INPUT -s 192.168.1.146 -p tcp -m tcp --dport 80: -j REJECT
 iptables -t filter -I OUTPUT -d 192.168.1.146 -p tcp -m tcp ! --sport 22 -j ACCEPT

 多源端口与目标端口示例
 iptables -t filter -I OUTPUT -d 192.168.1.146 -p udp -m multiport --sports 137,138 -j REJECT
 iptables -t filter -I INPUT -s 192.168.1.146 -p tcp -m multiport --dports 22,80 -j REJECT
 iptables -t filter -I INPUT -s 192.168.1.146 -p tcp -m multiport ! --dports 22,80 -j REJECT
 iptables -t filter -I INPUT -s 192.168.1.146 -p tcp -m multiport --dports 80:88 -j REJECT
 iptables -t filter -I INPUT -s 192.168.1.146 -p tcp -m multiport --dports 22,80:88 -j REJECT

 目标与源地址范围示例
 iptables -t filter -I INPUT -m iprange --src-range 192.168.1.127-192.168.1.146 -j DROP
 iptables -t filter -I OUTPUT -m iprange --dst-range 192.168.1.127-192.168.1.146 -j DROP
 iptables -t filter -I INPUT -m iprange ! --src-range 192.168.1.127-192.168.1.146 -j DROP

 string模块包过滤示例
 iptables -t filter -I INPUT -p tcp --sport 80 -m string --algo bm --string "OOXX" -j REJECT
 iptables -t filter -I INPUT -p tcp --sport 80 -m string --algo bm --string "OOXX" -j REJECT

 time模块示例
 iptables -t filter -I OUTPUT -p tcp --dport 80 -m time --timestart 09:00:00 --timestop 19:00:00 -j REJECT
 iptables -t filter -I OUTPUT -p tcp --dport 443 -m time --timestart 09:00:00 --timestop 19:00:00 -j REJECT
 iptables -t filter -I OUTPUT -p tcp --dport 80  -m time --weekdays 6,7 -j REJECT
 iptables -t filter -I OUTPUT -p tcp --dport 80  -m time --monthdays 22,23 -j REJECT
 iptables -t filter -I OUTPUT -p tcp --dport 80  -m time ! --monthdays 22,23 -j REJECT
 iptables -t filter -I OUTPUT -p tcp --dport 80  -m time --timestart 09:00:00 --timestop 18:00:00 --weekdays 6,7 -j REJECT
 iptables -t filter -I OUTPUT -p tcp --dport 80  -m time --weekdays 5 --monthdays 22,23,24,25,26,27,28 -j REJECT
 iptables -t filter -I OUTPUT -p tcp --dport 80  -m time --datestart 2017-12-24 --datestop 2017-12-27 -j REJECT

 连接限制示例
 iptables -I INPUT -p tcp --dport 22 -m connlimit --connlimit-above 2 -j REJECT
 iptables -I INPUT -p tcp --dport 22 -m connlimit --connlimit-above 20 --connlimit-mask 24 -j REJECT
 iptables -I INPUT -p tcp --dport 22 -m connlimit --connlimit-above 10 --connlimit-mask 27 -j REJECT

 包限速示例 #注意,如下两条规则需配合使用
 iptables -t filter -I INPUT -p icmp -m limit --limit-burst 3 --limit 10/minute -j ACCEPT
 iptables -t filter -A INPUT -p icmp -j REJECT

 源端口示例
 iptables -t filter -I OUTPUT -d 192.168.1.146 -p tcp -m tcp --sport 22 -j REJECT
 iptables -t filter -I OUTPUT -d 192.168.1.146 -p tcp -m tcp --sport 22:25 -j REJECT
 iptables -t filter -I OUTPUT -d 192.168.1.146 -p tcp -m tcp ! --sport 22 -j ACCEPT

 目标端口示例
 iptables -t filter -I INPUT -s 192.168.1.146 -p tcp -m tcp --dport 22:25 -j REJECT
 iptables -t filter -I INPUT -s 192.168.1.146 -p tcp -m tcp --dport :22 -j REJECT
 iptables -t filter -I INPUT -s 192.168.1.146 -p tcp -m tcp --dport 80: -j REJECT

 TCP协议报文头标志位示例
 iptables -t filter -I INPUT -p tcp -m tcp --dport 22 --tcp-flags SYN,ACK,FIN,RST,URG,PSH SYN -j REJECT
 iptables -t filter -I OUTPUT -p tcp -m tcp --sport 22 --tcp-flags SYN,ACK,FIN,RST,URG,PSH SYN,ACK -j REJECT
 iptables -t filter -I INPUT -p tcp -m tcp --dport 22 --tcp-flags ALL SYN -j REJECT
 iptables -t filter -I OUTPUT -p tcp -m tcp --sport 22 --tcp-flags ALL SYN,ACK -j REJECT

 SYN状态示例
 iptables -t filter -I INPUT -p tcp -m tcp --dport 22 --syn -j REJECT

 UDP协议示例
 iptables -t filter -I INPUT -p udp -m udp --dport 137 -j ACCEPT
 iptables -t filter -I INPUT -p udp -m udp --dport 137:157 -j ACCEPT
 可以结合multiport模块指定多个离散的端口

 ICMP协议示例
 iptables -t filter -I INPUT -p icmp -m icmp --icmp-type 8/0 -j REJECT
 iptables -t filter -I INPUT -p icmp --icmp-type 8 -j REJECT
 iptables -t filter -I OUTPUT -p icmp -m icmp --icmp-type 0/0 -j REJECT
 iptables -t filter -I OUTPUT -p icmp --icmp-type 0 -j REJECT
 iptables -t filter -I INPUT -p icmp --icmp-type "echo-request" -j REJECT

 示例:在filter表中创建IN_WEB自定义链
 iptables -t filter -N IN_WEB

 示例:在INPUT链中引用刚才创建的自定义链
 iptables -t filter -I INPUT -p tcp --dport 80 -j IN_WEB

 示例:将IN_WEB自定义链重命名为WEB
 iptables -E IN_WEB WEB

 示例:删除引用计数为0并且不包含任何规则的WEB链
 iptables -X WEB

 开启Linux转发功能
 echo 1 > /proc/sys/net/ipv4/ip_forward

 配置SNAT 隐藏内网IP,共享公网IP访问互联网
 iptables -t nat -A POSTROUTING -s 10.1.0.0/16 -j SNAT --to-source 公网IP

 如果公网IP是动态的,使用MASQUERADE 进行动态的SNAT操作
 iptables -t nat -A POSTROUTING -s 10.1.0.0/16 -o eth0 -j MASQUERADE

 配置DNAT,可以通过公网IP访问内网的服务
 iptables -t nat -I PREROUTING -d 公网IP -p tcp --dport 公网端口 -j DNAT --to-destination 私网IP:端口号
 iptables -t nat -I PREROUTING -d 公网IP -p tcp --dport 8080 -j DNAT --to-destination 10.1.0.1:80
 iptables -t nat -A POSTROUTING -s 10.1.0.0/16 -j SNAT --to-source 公网IP
 本机端口映射
 iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080

事例:
 111服务器iptables设置:
 iptables -A INPUT -s X.X.X.X -p tcp --dport 3717 -j ACCEPT
 iptables -A INPUT  -p tcp --dport 3717 -j DROP
 49服务器iptables设置:
 iptables -A INPUT -s X.X.X.X -p tcp --dport 1521 -j ACCEPT
 iptables -A INPUT  -p tcp --dport 1521 -j DROP
 线下丽水服务器iptables设置:
 iptables -A INPUT -s 127.0.0.1/32 -p tcp -m tcp --dport 1521 -j ACCEPT
 iptables -A INPUT -p tcp -m tcp --dport 1521 -j DROP