Iptables
第1章 iptables介绍
1.iptables是什么?
iptables是开源的基于数据包过滤的防火墙工具。
2.iptables企业应用场景
1、主机防火墙(filter表的INPUT链)。
2、局域网共享上网(nat表的POSTROUTING链)。半个路由器,NAT功能。
3、端口及IP映射(nat表的PREROUTING链),硬防的NAT功能。
4、IP一对一映射。
3.商用防火墙品牌
华为 深信服 思科 H3C Juniper 天融信 飞塔 网康 绿盟科技 金盾
第2章 iptables工作流程
iptables是采用数据包过滤机制工作的,所以它会对请求的数据包的包头数据进行分析,并根据我们预先设定的规则进行匹配来决定是否可以进入主机。 1.防火墙是一层层过滤的。实际是按照配置规则的顺序从上到下,从前到后进行过滤的。 2.如果匹配上了规则,即明确表明是阻止还是通过,此时数据包就不在向下匹配新规则了。 3.如果所有规则中没有明确表明是阻止还是通过这个数据包,也就是没有匹配上规则,向下进行匹配,直到匹配默认规则得到明确的阻止还是通过。 4.防火墙的默认规则是对应链的所有的规则执行完以后才会执行的(最后执行的规则)。
第3章 iptables四表五链
1.表与链对应关系
实际iptables包含4张表和五个链,但主要记住两张表即可filter和nat表即可。

2.FILTER表

3.NAT表

第4章 iptables工作原理示意图


第5章 iptables环境准备
1.安装iptables管理命令
[root@m01 ~]# yum install iptables-services -y
2.加载防火墙的内核模块
modprobe ip_tables
modprobe iptable_filter
modprobe iptable_nat
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
modprobe ipt_state
查看已加载的模块
[root@m01 ~]# lsmod |egrep 'filter|nat|ipt' ipt_REJECT 12541 0 nf_nat_ftp 12770 0 nf_conntrack_ftp 18638 1 nf_nat_ftp iptable_filter 12810 0 xt_nat 12681 3 iptable_nat 12875 1 nf_nat_ipv4 14115 1 iptable_nat nf_nat 26146 3 nf_nat_ftp,nf_nat_ipv4,xt_nat nf_conntrack 105745 7 nf_nat_ftp,nf_nat,xt_state,nf_nat_ipv4,xt_conntrack,nf_conntrack_ftp,nf_conntrack_ipv4 ip_tables 27240 2 iptable_filter,iptable_nat
3.启动防火墙
首先停止firewalld
systemctl stop firewalld
systemctl disable firewalld
开启iptables
systemctl start iptables.service
systemctl enable iptables.service
第6章 iptables基本操作命令
1.查看防火墙规则
[root@m01 ~]# iptables -nL
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
2.清除防火墙规则
iptables -F <- 清除所有规则,不会处理默认的规则
iptables -X <- 删除用户自定义的链
iptables -Z <- 链的计数器清零(数据包计数器与数据包字节计数器)
3.添加防火墙规则
iptables -t <-指定表d(efault: `filter')

[root@m01 ~]# iptables -nL #默认指定filter表 Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain FORWARD (policy ACCEPT) target prot opt source destination REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain OUTPUT (policy ACCEPT) target prot opt source destination [root@m01 ~]# iptables -nL -t nat #指定nat表 Chain PREROUTING (policy ACCEPT) target prot opt source destination Chain INPUT (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination Chain POSTROUTING (policy ACCEPT) target prot opt source destination [root@m01 ~]# iptables -nL -t filter Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain FORWARD (policy ACCEPT) target prot opt source destination REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain OUTPUT (policy ACCEPT) target prot opt source destination [root@m01 ~]#
iptables -A <-把规则添加到指定的链上,默认添加到最后一行。
iptables -I <-插入规则,默认插入到第一行(封IP)。
iptables -D <-删除链上的规则
4.网络连接状态
NEW:已经或将启动新的连接
ESTABLISHED:已建立的连接
RELATED:正在启动的新连接
INVALID:非法或无法识别的
4.删除某个规则
iptables -nL --line-numbers 查看规则号码
iptables -D INPUT 1 删除指定链上的指定序号
iptables A INPUT -p tcp -m state --dport 22 -j DROP iptables -nL iptables -nL --line-numbers iptables -D INPUT 1
第7章 iptables实战
1.从上往下依次匹配
2.一但匹配上,就不在往下匹配了
3.默认规则,默认的情况,默认规则是放行所有

[root@web01 ~]# cat iptalbes_2020805 # Generated by iptables-save v1.4.21 on Wed Aug 5 18:26:12 2020 *mangle :PREROUTING ACCEPT [263607353:66422334553] :INPUT ACCEPT [169338738:25597686987] :FORWARD ACCEPT [88577646:40571590463] :OUTPUT ACCEPT [154479766:24125019525] :POSTROUTING ACCEPT [243056693:64696518132] -A POSTROUTING -o virbr0 -p udp -m udp --dport 68 -j CHECKSUM --checksum-fill COMMIT # Completed on Wed Aug 5 18:26:12 2020 # Generated by iptables-save v1.4.21 on Wed Aug 5 18:26:12 2020 *nat :PREROUTING ACCEPT [2398619:178423217] :INPUT ACCEPT [1170690:96171436] :OUTPUT ACCEPT [25203:1810828] :POSTROUTING ACCEPT [235828:14447864] :DOCKER - [0:0] -A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER -A OUTPUT ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER -A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE -A POSTROUTING -s 172.18.0.0/16 ! -o br-64604e377d9d -j MASQUERADE -A POSTROUTING -s 192.168.122.0/24 -d 224.0.0.0/24 -j RETURN -A POSTROUTING -s 192.168.122.0/24 -d 255.255.255.255/32 -j RETURN -A POSTROUTING -s 192.168.122.0/24 ! -d 192.168.122.0/24 -p tcp -j MASQUERADE --to-ports 1024-65535 -A POSTROUTING -s 192.168.122.0/24 ! -d 192.168.122.0/24 -p udp -j MASQUERADE --to-ports 1024-65535 -A POSTROUTING -s 192.168.122.0/24 ! -d 192.168.122.0/24 -j MASQUERADE -A POSTROUTING -s 172.18.0.3/32 -d 172.18.0.3/32 -p tcp -m tcp --dport 10514 -j MASQUERADE -A POSTROUTING -s 172.18.0.8/32 -d 172.18.0.8/32 -p tcp -m tcp --dport 4443 -j MASQUERADE -A POSTROUTING -s 172.18.0.8/32 -d 172.18.0.8/32 -p tcp -m tcp --dport 443 -j MASQUERADE -A POSTROUTING -s 172.18.0.8/32 -d 172.18.0.8/32 -p tcp -m tcp --dport 80 -j MASQUERADE -A DOCKER -i docker0 -j RETURN -A DOCKER -i br-64604e377d9d -j RETURN -A DOCKER -d 127.0.0.1/32 ! -i br-64604e377d9d -p tcp -m tcp --dport 1514 -j DNAT --to-destination 172.18.0.3:10514 -A DOCKER ! -i br-64604e377d9d -p tcp -m tcp --dport 4443 -j DNAT --to-destination 172.18.0.8:4443 -A DOCKER ! -i br-64604e377d9d -p tcp -m tcp --dport 443 -j DNAT --to-destination 172.18.0.8:443 -A DOCKER ! -i br-64604e377d9d -p tcp -m tcp --dport 80 -j DNAT --to-destination 172.18.0.8:80 COMMIT # Completed on Wed Aug 5 18:26:12 2020 # Generated by iptables-save v1.4.21 on Wed Aug 5 18:26:12 2020 *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [6163:965240] -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT -A INPUT -j REJECT --reject-with icmp-host-prohibited -A FORWARD -j REJECT --reject-with icmp-host-prohibited COMMIT # Completed on Wed Aug 5 18:26:12 2020 [root@web01 ~]#

Chain INPUT (policy ACCEPT) num target prot opt source destination 1 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 2 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 3 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 4 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22 5 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain FORWARD (policy ACCEPT) num target prot opt source destination 1 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain OUTPUT (policy ACCEPT) num target prot opt source destination

[root@web01 ~]# iptables -nL --line-numbers Chain INPUT (policy ACCEPT) num target prot opt source destination 1 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 2 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 3 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 4 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22 Chain FORWARD (policy ACCEPT) num target prot opt source destination 1 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain OUTPUT (policy ACCEPT) num target prot opt source destination [root@web01 ~]#
1.禁止某个端口访问
iptables -t filter -A INPUT -p tcp --dport 22 -j DROP 规则解释: -p #<==指定过滤的协议-p(tcp,udp,icmp,all) --dport #<==指定目标端口(用户请求的端口)。 -j #<==对规则的具体处理方法(ACCEPT,DROP,REJECT,SNAT/DNAT) --sport #<==指定源端口。
2.禁止某个IP访问
iptables -I INPUT -p tcp -s 10.0.0.253 -i eth0 -j DROP iptables -A INPUT -p tcp ! -s 10.0.0.1 -i eth0 -j DROP iptables -A INPUT -p tcp ! -s 10.0.0.0/24 -i eth0 -j DROP 规则解释: -s #<==指定源地址或网段(192.168.1.0/24)。 ! 取反。 -d #<==指定目的地址(nat表prerouting)。 -i #<==进入的网络接口(eth0,eth1)。 -o #<==出去的网络接口(eth0,eth1)。
3.禁止除跳板机以外的IP访问
iptables -I INPUT -p tcp ! -s 10.0.0.1 -j DROP
4.匹配端口范围
iptables -I INPUT -p tcp -m multiport --dport 21,22,23,24 -j DROP iptables -I INPUT -p tcp --dport 3306:8809 -j ACCEPT iptables -I INPUT -p tcp --dport 18:80 -j DROP #<==最佳
5.匹配ICMP类型
iptables -A INPUT -p icmp --icmp-type 8 例:iptables -A INPUT -p icmp --icmp-type 8 -j DROP iptables -A INPUT -p icmp -m icmp --icmp-type any -j ACCEPT iptables -A FORWARD -s 192.168.1.0/24 -p icmp -m icmp --icmp-type any -j ACCEPT
6.练习题
1、封掉10.0.0.7 iptables -I INPUT -s 10.0.0.7 -j DROP 2、让10.0.0.7和SSH客户端(10.0.0.1)服务器可以Ping,其它的不能Ping iptables -I INPUT -p icmp --icmp-type 8 -s 10.0.0.7 -j ACCEPT iptables -I INPUT 2 -p icmp ! -s 10.0.0.1 --icmp-type 8 -j DROP 3、封掉3306端口 iptables -I INPUT -p tcp --dport 3306 -j DROP
第8章 iptables企业案例
1.部署一个安全的防火墙
两种思想:针对默认规则而言。
逛公园:黑名单 1、默认规则默认是允许的状态。
看电影:白名单 2、默认规则默认是不允许的状态。更安全。 看电影的思想更安全。
实战部署:

[root@m01 ~]# iptables -F [root@m01 ~]# iptables -X [root@m01 ~]# iptables -Z [root@m01 ~]# iptables -A INPUT -p tcp -m multiport --dport 80,443 -j ACCEPT [root@m01 ~]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT [root@m01 ~]# iptables -A INPUT -s 10.0.0.0/24 -j ACCEPT [root@m01 ~]# iptables -A INPUT -s 172.16.1.0/24 -j ACCEPT [root@m01 ~]# iptables -A INPUT -i lo -j ACCEPT [root@m01 ~]# iptables -P INPUT DROP [root@m01 ~]# iptables -P FORWARD DROP [root@m01 ~]# iptables -P OUTPUT ACCEPT [root@m01 ~]# iptables -nL Chain INPUT (policy DROP) #默认策略改成拒绝 target prot opt source destination ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 multiport dports 80,443 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 ACCEPT all -- 10.0.0.0/24 0.0.0.0/0 ACCEPT all -- 172.16.1.0/24 0.0.0.0/0 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 Chain FORWARD (policy DROP) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination 命令集合: #先清空策略 iptables -F iptables -X iptables -Z #访问频率多的策略放在前面 iptables -A INPUT -p tcp -m multiport --dport 80,443 -j ACCEPT iptables -A INPUT -p tcp --dport 22 -j ACCEPT iptables -A INPUT -s 10.0.1.0/24 -j ACCEPT iptables -A INPUT -s 172.16.1.0/24 -j ACCEPT iptables -A INPUT -i lo -j ACCEPT #默认策略改成拒绝 没有匹配到拒绝 iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT iptables -nL
2.局域网共享上网
实验环境:
m01: 共享上网网关出口
web01: 只有内网地址,网关指向m01
实验步骤:
m01操作
iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j SNAT --to-source 10.0.0.61
echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
sysctl -p
iptables -F
iptables -X
iptables -Z
iptables -A INPUT -p tcp -m multiport --dport 80,443 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -s 10.0.1.0/24 -j ACCEPT
iptables -A INPUT -s 172.16.1.0/24 -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
iptables -A FORWARD -i eth1 -s 172.16.1.0/24 -j ACCEPT
iptables -A FORWARD -o eth0 -s 172.16.1.0/24 -j ACCEPT
iptables -A FORWARD -i eth0 -d 172.16.1.0/24 -j ACCEPT
iptables -A FORWARD -o eth1 -d 172.16.1.0/24 -j ACCEPT
web01操作:
[root@web01 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE=Ethernet
BOOTPROTO=none
DEFROUTE=yes
NAME=eth0
DEVICE=eth0
ONBOOT=no
IPADDR=10.0.0.7
PREFIX=24
GATEWAY=10.0.0.2
DNS1=10.0.0.2
[root@web01 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth1
TYPE=Ethernet
BOOTPROTO=none
DEFROUTE=yes
NAME=eth1
DEVICE=eth1
ONBOOT=yes
IPADDR=172.16.1.7
GATEWAY=172.16.1.61
PREFIX=24
DNS1=10.0.0.2
[root@web01 ~]# systemctl restart network
[root@web01 ~]# ip r
default via 172.16.1.61 dev eth1 proto static metric 100
172.16.1.0/24 dev eth1 proto kernel scope link src 172.16.1.7 metric 100
[root@web01 ~]# cat /etc/resolv.conf
nameserver 10.0.1.2
web01测试访问外网:
[root@web01 ~]# ping www.baidu.com
PING www.a.shifen.com (14.215.177.39) 56(84) bytes of data.
64 bytes from 14.215.177.39: icmp_seq=1 ttl=127 time=7.70 ms
64 bytes from 14.215.177.39: icmp_seq=2 ttl=127 time=8.92 ms
3.端口映射
m01操作:
iptables -t nat -A PREROUTING -d 10.0.1.61 -p tcp --dport 9000 -j DNAT --to-destination 172.16.1.7:22
命令拆解:
表:nat
链:PREROUTING
目标IP:10.0.1.61
目标端口:9000
协议:tcp
动作:DNAT
目标IP:172.16.1.7
目标端口:22
访问测试:
zhangyadeMacBook-Pro:~ zhangya$ ssh root@10.0.1.61 -p 9000
root@10.0.1.61's password:
Last login: Tue Aug 20 09:38:42 2019 from 172.16.1.51
[root@web01 ~]#
4.IP映射
[root@m01 ~]# ip a add 10.0.1.62/24 dev eth0 label eth0:0
[root@m01 ~]# iptables -t nat -A PREROUTING -d 10.0.1.62 -j DNAT --to-destination 172.16.1.7
[root@m01 ~]# iptables -nL -t nat
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
DNAT tcp -- 0.0.0.0/0 10.0.1.61 tcp dpt:9000 to:172.16.1.7:22
DNAT all -- 0.0.0.0/0 10.0.1.62 to:172.16.1.7
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
SNAT all -- 172.16.1.0/24 0.0.0.0/0 to:10.0.1.61
测试访问:
zhangyadeMacBook-Pro:~ zhangya$ ssh root@10.0.1.62
root@10.0.1.62's password:
Last login: Wed Aug 21 13:30:04 2019 from 10.0.1.1
[root@web01 ~]# hostname
web01
[root@web01 ~]#
第9章 iptables规则保存
iptables-save > 20190821 #将防火墙规则保存到文件中
iptables-save #将防火墙规则保存到配置文件中,防止重启后失效
iptables-restore < 20190821 #从配置文件里载入防火墙配置
第10章 iptables防坑指南
1.修改之前先导出备份一份
2.修改的时候小心别把自己关在外面
3.可以现在定时任务里添加一条定时清空的规则,等测试没问题再取消定时任务

第11章 课堂笔记 1.从上往下依次匹配 2.一但匹配上,就不在往下匹配了 3.默认规则,默认的情况,默认规则是放行所有 -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT -A INPUT :把这条规则添加到INPUT链的最后一行 -p tcp :指定协议为tcp -m state --state NEW :匹配TCP的连接状态 -m tcp --dport 22 :匹配TCP协议的目标端口 -j ACCEPT :执行动作 放行 iptables A INPUT -p tcp -m state --dport 22 -j DROP 禁止一个数据包: tcp协议 访问的端口是22 iptables -A INPUT -p tcp --dport 22 -j DROP iptables -nL iptables -nL --line-numbers iptables -D INPUT 1 禁止源地址是10.0.0.7的主机访问22端口 iptables -A INPUT -p tcp -s 10.0.0.7 --dport 22 -j DROP 禁止源地址是10.0.0.7的主机访问任何端口 iptables -A INPUT -p tcp -s 10.0.0.7 -j DROP 禁止源地址是10.0.0.8的主机访问80端口 iptables -A INPUT -p tcp -s 10.0.0.8 --dport 80 -j DROP 禁止除了10.0.0.7以外的地址访问80端口 iptables -A INPUT -p tcp ! -s 10.0.0.7 --dport 80 -j DROP 2条规则冲突,会以谁先谁为准 iptables -I INPUT -p tcp -s 10.0.0.7 --dport 22 -j ACCEPT iptables -I INPUT -p tcp -s 10.0.0.7 --dport 22 -j DROP 禁止10.0.0.7访问22和80端口 iptables -I INPUT -p tcp -s 10.0.0.7 -m multiport --dport 22,80 -j DROP 禁止10.0.0.7访问22到100之间的所有端口 iptables -A INPUT -p tcp -s 10.0.0.7 --dport 22:100 -j DROP 禁止所有主机ping iptables -A INPUT -p icmp --icmp-type 8 -j DROP 放行10.0.0.7可以ping iptables -I INPUT 2 -p icmp --icmp-type 8 -s 10.0.0.7 -j ACCEPT 只允许10.0.0.7可以ping ACCEPT icmp -- 10.0.0.7 0.0.0.0/0 icmptype 8 DROP icmp -- 0.0.0.0/0 0.0.0.0/0 icmptype 8 等同于上一条,优化版,只要不是10.0.0.7就不允许ping iptables -I INPUT -p icmp --icmp-type 8 ! -s 10.0.0.7 -j DROP 优先级: 匹配频次最高的条件放前面 100次 80 90 22 10 安全策略: 一种是广场上巡逻的人,默认认为大家都是安全的,只有通缉令上的人需要关注 一种是火车进站安检,默认所有人都是不安全的,只有有票的人才放行 iptables -F iptables -X iptables -Z iptables -A INPUT -p tcp -m multiport --dport 80,443 -j ACCEPT iptables -A INPUT -p tcp --dport 22 -j ACCEPT iptables -A INPUT -s 10.0.0.0/24 -j ACCEPT iptables -A INPUT -s 172.16.1.0/24 -j ACCEPT iptables -A INPUT -i lo -j ACCEPT iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT iptables -nL 共享上网 iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j SNAT --to-source 10.0.0.61 -t nat :NAT表 -A POSTROUTING :POSTROUTING链 -s 172.16.1.0/24 :源地址172.16.1.0/24 -j SNAT :SNAT 改写源地址 --to-source 10.0.0.61 :将源地址改写成10.0.0.61 172.16.1.7发给百度的数据包格式 源端口: 80 目的端口: 80 源IP: 172.16.1.7 目的IP: 百度的IP 网关: 172.16.1.61 如果172.16.1.7想上网,需要改成如下的包格式 10.0.0.61访问百度 源端口: 80 目的端口: 80 源IP: 10.0.0.61 目的IP: 百度的IP 网关: 10.0.0.2 天坑 如果你的默认规则设置了拒绝所有,又执行了清除规则的语句-F 那就意味着,所有的请求全部都拒绝了 原因是-F不会改变默认规则 [root@web01 ~]# iptables -nL Chain INPUT (policy DROP) target prot opt source destination Chain FORWARD (policy DROP) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination 解决: 物理机: 1.去机房自己清空 2.让机房的人重启服务器,前提条件是规则没有写入配置里 云服务器: 直接通过控制台恢复 如何避免: 1.测试规则之前,先写个定时任务,每隔5分钟重启一次iptables FORWARD链默认为DROP的时候共享上网失效 解决方法: 第一种,添加2条规则 iptables -A FORWARD -s 172.16.1.0/24 -j ACCEPT iptables -A FORWARD -d 172.16.1.0/24 -j ACCEPT 第二种:修改FORWARD链默认规则为ACCEPT iptables -P FORWARD ACCEPT 端口映射: 访问10.0.0.61的9000端口,跳转到172.16.1.7的22端口 访问10.0.0.61的9000端口的数据包格式 源端口: 9000 目的端口: 9000 源IP: 10.0.0.1 目的IP: 10.0.0.61 源端口: 22 目的端口: 22 源IP: 10.0.0.1 目的IP: 172.16.1.7:22 iptables -t nat -A PREROUTING -d 10.0.0.61 -p tcp --dport 9000 -j DNAT --to-destination 172.16.1.7:22 注意: 改写数据包的目标IP和端口 用到的是PREROUTING链 IP映射: ip a add 10.0.1.62/24 dev eth0 label eth0:0 iptables -t nat -A PREROUTING -d 10.0.1.62 -j DNAT --to-destination 172.16.1.7 保存命令: iptables-save iptables-save > iptables_m01 iptables-restore < iptables_m01 iptables-save > /etc/sysconfig/iptables