iptables
iptables -t 表名 <-A/I/D/R> 规则链名 [规则号] <-i/o 网卡名> -p 协议名 <-s 源IP/源子网> --sport 源端口 <-d 目标IP/目标子网> --dport 目标端口 -j 动作
查看规则
iptables -L -n -v --line-numbers
iptables-save
cat /etc/sysconfig/iptables (更改这里的规则需要重启iptables服务,注意一旦重启所有手动设置的iptables规则,包括docker自动设置的iptables规则都会被清空,谨慎重启)
比如要删除INPUT里序号为8的规则,执行:
iptables -D INPUT 8
iptables -I INPUT -s 123.45.6.7 -j DROP #屏蔽单个IP的命令
本机的 2222 端口映射到内网 虚拟机的22 端口
iptables -t nat -A PREROUTING -d 210.14.67.127 -p tcp --dport 2222 -j DNAT --to-dest 192.168.188.115:22
默认规则
iptables -L -n -v --line-numbers
[root@as4k ~]# iptables -L -n -v --line-numbers | grep policy
Chain INPUT (policy ACCEPT 9926 packets, 710K bytes)
Chain FORWARD (policy DROP 0 packets, 0 bytes)
Chain OUTPUT (policy ACCEPT 10113 packets, 7156K bytes)
语法参考
# 通用匹配:源地址目标地址的匹配
-p:指定要匹配的数据包协议类型;
-s, --source [!] address[/mask] :把指定的一个/一组地址作为源地址,按此规则进行过滤。当后面没有 mask 时,address 是一个地址,比如:192.168.1.1;当 mask 指定时,可以表示一组范围内的地址,比如:192.168.1.0/255.255.255.0。
-d, --destination [!] address[/mask] :地址格式同上,但这里是指定地址为目的地址,按此进行过滤。
-i, --in-interface [!] <网络接口name> :指定数据包的来自来自网络接口,比如最常见的 eth0 。注意:它只对 INPUT,FORWARD,PREROUTING 这三个链起作用。如果没有指定此选项, 说明可以来自任何一个网络接口。同前面类似,"!" 表示取反。
-o, --out-interface [!] <网络接口name> :指定数据包出去的网络接口。只对 OUTPUT,FORWARD,POSTROUTING 三个链起作用。
# 查看管理命令
-L, --list [chain] 列出链 chain 上面的所有规则,如果没有指定链,列出表上所有链的所有规则。
# 规则管理命令
-A, --append chain rule-specification 在指定链 chain 的末尾插入指定的规则,也就是说,这条规则会被放到最后,最后才会被执行。规则是由后面的匹配来指定。
-I, --insert chain [rulenum] rule-specification 在链 chain 中的指定位置插入一条或多条规则。如果指定的规则号是1,则在链的头部插入。这也是默认的情况,如果没有指定规则号。
-D, --delete chain rule-specification -D, --delete chain rulenum 在指定的链 chain 中删除一个或多个指定规则。
-R num:Replays替换/修改第几条规则
# 链管理命令(这都是立即生效的)
-P, --policy chain target :为指定的链 chain 设置策略 target。注意,只有内置的链才允许有策略,用户自定义的是不允许的。
-F, --flush [chain] 清空指定链 chain 上面的所有规则。如果没有指定链,清空该表上所有链的所有规则。
-N, --new-chain chain 用指定的名字创建一个新的链。
-X, --delete-chain [chain] :删除指定的链,这个链必须没有被其它任何规则引用,而且这条上必须没有任何规则。如果没有指定链名,则会删除该表中所有非内置的链。
-E, --rename-chain old-chain new-chain :用指定的新名字去重命名指定的链。这并不会对链内部造成任何影响。
-Z, --zero [chain] :把指定链,或者表中的所有链上的所有计数器清零。
-j, --jump target <指定目标> :即满足某条件时该执行什么样的动作。target 可以是内置的目标,比如 ACCEPT,也可以是用户自定义的链。
-h:显示帮助信息;
常见实例
iptables -I INPUT -i lo -j ACCEPT # 允许本机访问
iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # 允许访问外网
iptables -I INPUT -s 10.10.155.0/24 -j ACCEPT # 允许内网访问
iptables -I INPUT -p tcp -m multiport --dports 80,1723 -j ACCEPT # 允许端口, 80 -> http, 1723 -> vpn
iptables -A INPUT -j REJECT # 添加一条规则, 不允许所有
iptables -I pubile_rule -s 172.23.0.0/16 -d 192.188.5.220/32 -p tcp -m tcp --dport 8000:10000 -m comment --comment bear_clickhouse -j ACCEPT
-A POSTROUTING -s 172.17.0.22/32 -d 172.17.0.22/32 -p tcp -m tcp --dport 9921 -j MASQUERADE
-A POSTROUTING -s 172.17.0.9/32 -d 172.17.0.9/32 -p tcp -m tcp --dport 9921 -j MASQUERADE
-A POSTROUTING -s 172.17.0.15/32 -d 172.17.0.15/32 -p tcp -m tcp --dport 9921 -j MASQUERADE
-A INPUT -s 192.168.120.245/32 -p tcp -m tcp --dport 2222 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j DROP
-A INPUT -p tcp -m tcp --dport 2222 -j DROP
-A FORWARD -s 172.23.0.0/16 -j pubile_rule
-A FORWARD -s 172.23.0.0/16 -j app_rule
-A FORWARD -s 172.23.0.0/16 -j tc_rule
-A FORWARD -d 172.23.0.0/16 -j tc_rule
-A FORWARD -s 172.23.0.0/16 -j deny_rule
-A misaka_134029_153oj44zxw -d 127.0.0.1/32 -p tcp -m tcp --dport 65530 -j ACCEPT
-A pubile_rule -s 172.23.0.0/16 -d 192.188.5.220/32 -p tcp -m tcp --dport 8000:10000 -m comment --comment bear_clickhouse -j ACCEPT
-A pubile_rule -s 172.23.0.0/16 -d 10.13.144.88/32 -m state --state ESTABLISHED -m comment --comment intranet_l7 -j ACCEPT
-A pubile_rule -s 172.23.0.0/16 -d 10.13.144.88/32 -m state --state NEW -m comment --comment intranet_l7 -j DROP
-A pubile_rule -s 172.23.0.0/16 -d 10.83.120.22/32 -m state --state ESTABLISHED -m comment --comment intranet_l7 -j ACCEPT
-A pubile_rule -s 172.23.0.0/16 -d 10.83.120.22/32 -m state --state NEW -m comment --comment intranet_l7 -j DROP
参考链接
https://morven.life/notes/the_knowledge_of_iptables/
https://docs.docker.com/network/iptables/
https://www.cnblogs.com/miracle-luna/p/13718436.html
https://www.netfilter.org/documentation/HOWTO/NAT-HOWTO.html
https://www.howtogeek.com/177621/the-beginners-guide-to-iptables-the-linux-firewall/