一、术语介绍

链和表:
链即是红色框中的prerouteing、input、output、forward、postrouting,可以将这些链看作门卫保安,那么保安对小区出入会做管控,会根据管理条例出台规则。
image.png
在这些链中(保安对小区出入会做管控,会根据管理条例出台规则),这些规则会按顺序排列在链中。在iptables中,链的规则存放于哪些表中(从链到表的对应关系):
PREROUTING 的规则可以存在于:raw表,mangle表,nat表。
INPUT 的规则可以存在于:mangle表,filter表,(centos7中还有nat表,centos6中没有)。
FORWARD 的规则可以存在于:mangle表,filter表。
OUTPUT 的规则可以存在于:raw表mangle表,nat表,filter表。
POSTROUTING 的规则可以存在于:mangle表,nat表。
image.png

filter表:负责过滤功能,防火墙;内核模块:iptables_filter
nat表:network address translation,网络地址转换功能;内核模块:iptable_nat
mangle表:拆解报文,做出修改,并重新封装 的功能;iptable_mangle
raw表:关闭nat表上启用的连接追踪机制;iptable_raw
image.png
规则:根据指定的匹配条件来尝试匹配每个流经此处的报文,一旦匹配成功,则由规则后面指定的处理动作进行处理;

image.png
规则处理的动作:
ACCEPT:允许数据包通过。
DROP:直接丢弃数据包,不给任何回应信息,这时候客户端会感觉自己的请求泥牛入海了,过了超时时间才会有反应。
REJECT:拒绝数据包通过,必要时会给数据发送端一个响应的信息,客户端刚请求就会收到拒绝的信息。
SNAT:源地址转换,解决内网用户用同一个公网地址上网的问题。
MASQUERADE:是SNAT的一种特殊形式,适用于动态的、临时会变的ip上。
DNAT:目标地址转换。
REDIRECT:在本机做端口映射。
LOG:在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则,也就是说除了记录以外不对数据包做任何其他操作,仍然让下一条规则去匹配。

二、命令介绍

查看链和表

iptables -t filter -L #查看所有链的filter表中的规则。还有raw、mangle、nat等表
image.png

iptables -L #查看链,常用选项:
-v选项展示更多信息;
-n选项,表示不对IP地址进行名称反解,直接显示IP地址;
–line-numbers即可显示规则的编号;
-x选项,表示显示精确的计数值
image.png

增加删除修改

iptables -F INPUT,-F表示删除INPUT链中的规则;
image.png

使用 -t选项指定了要操作的表,此处指定了操作filter表,默认为操作filter表。
image.png
image.png
-I选项(insert),指明将”规则”添加哪个链中,-I INPUT表示将规则插入于INPUT链中;
-s选项(source),指明匹配条件是报文中的源地址是192.168.1.146和192.168.2.146”;
-j选项,指明当”匹配条件”被满足时,所对应的动作,上例中指定的动作为DROP(丢弃)。

通过编号删除表中的规则
iptables -t filter -D INPUT 2
image.png

根据规则条件删除,源地址为192.168.1.146,动作为DROP的规则
image.png

修改iptables规则
iptables -t filter -R INPUT 1 -s 192.168.1.146 -j REJECT
image.png
-R选项表示修改指定的链,使用-R INPUT 1表示修改INPUT链的第1条规则,使用-j REJECT表示将INPUT链中的第一条规则的动作修改为REJECT,注意:上例中, -s选项以及对应的源地址不可省略,即使我们已经指定了规则对应的编号,但是在使用-R选项修改某个规则时,必须指定规则对应的原本的匹配条件(如果有多个匹配条件,都需要指定)。

修改默认策略,默认的链里面是accept,可修改为DROP
image.png

配置好yum源以后安装iptables-service
yum install -y iptables-services
#停止firewalld
systemctl stop firewalld
#禁止firewalld自动启动
systemctl disable firewalld
#启动iptables
systemctl start iptables
#将iptables设置为开机自动启动,以后即可通过iptables-service控制iptables服务
systemctl enable iptables
保存方法一、service iptables save 命令保存iptables规则了
保存方法二、iptables-save > /etc/sysconfig/iptables

DNAT和SNAT配置

SNAT配置
iptables -t nat -A POSTROUTING -s 10.1.0.0/16 -j SNAT —to-source 192.168.1.146
来自内网 10.1.0.0/16全部转换为192.168.1.146
image.png
配置SNAT,可以隐藏网内主机的IP地址,也可以共享公网IP,访问互联网,如果只是共享IP的话,只配置如下SNAT规则即可。
iptables -t nat -A POSTROUTING -s 10.1.0.0/16 -j SNAT —to-source 公网IP

如果公网IP是动态获取的,不是固定的,则可以使用MASQUERADE进行动态的SNAT操作,如下命令表示将10.1网段的报文的源IP修改为eth0网卡中可用的地址。
iptables -t nat -A POSTROUTING -s 10.1.0.0/16 -o eth0 -j MASQUERADE

DNAT配置
iptables -t nat -I PREROUTING -d 192.168.1.146 -p tcp —dport 3389 -j DNAT —to-destination 10.1.0.6:3389
image.png
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

image.png

IP的静态映射

下面就是nat表了,这个绝对不要改,除非你很明白它们的作用,
#达到比对filter表的了解还要深刻的程度。
#意义是nat标的三条链默认接受任何数据传输。
/sbin/iptables -t nat -P PREROUTING ACCEPT
/sbin/iptables -t nat -P POSTROUTING ACCEPT
/sbin/iptables -t nat -P OUTPUT ACCEPT
#这是真正实现地址转换的语句,意义为:
#在PREROUTING链中(也就是刚进入linux服务器的数据包),将目的地址为1.1.1.2的数据包
#进行修改,使得其目的地址变为192.168.1.1;
#在POSTROUTING链中(马上要送出linux服务器的数据包),将源地址为192.168.1.1的数据
#包的源地址改为1.1.1.2;
/sbin/iptables -t nat -A PREROUTING -d 1.1.1.2 -j DNAT —to-destination 192.168.1.1
/sbin/iptables -t nat -A POSTROUTING -s 192.168.1.1 -j SNAT —to-source 1.1.1.2
/sbin/iptables -t nat -A PREROUTING -d 1.1.1.3 -j DNAT —to-destination 192.168.1.2
/sbin/iptables -t nat -A POSTROUTING -s 192.168.1.2 -j SNAT —to-source 1.1.1.3
#脚本到此结束。
你的内网服务器192.168.1.1和192.168.1.2应该已经可以通过ip地址1.1.1.2和1.1.1.3访问了

NAT实验

image.png
命令配置如下
iptables配置:
/sbin/iptables -t nat -A PREROUTING -d 100.78.1.3 -j DNAT —to-destination 100.66.255.201
/sbin/iptables -t nat -A PREROUTING -d 100.78.1.4 -j DNAT —to-destination 100.66.255.201
/sbin/iptables -t nat -A PREROUTING -d 100.78.1.5 -j DNAT —to-destination 100.66.255.201
/sbin/iptables -t nat -A POSTROUTING -s 100.78.1.2 -j SNAT —to-source 100.66.255.200

开启路由功能
在test02上要开启
1.临时开启,(写入内存,在内存中开启)
echo “1” > /proc/sys/net/ipv4/ip_forward

2.永久开启,(写入内核)
echo ‘net.ipv4.ip_forward = 1’ >> /etc/sysctl.conf
sysctl -p

sysctl -a |grep “ip_forward” ##确认