一.iptables概述
iptables(网络过滤器)是一个工作于用户空间的防火墙应用软件。iptable是Linux下的数据包过滤软件 。
iptables有三张表五条链:
1.Filter:数据包流通是否访问Linux内核的表
Filter包含三条链input、 forward 、output
INPUT:主要与想要进入Linux主机的数据包有关,访问内核上的服务,经过内核。
OUTPUT :主要与Linux本机所要送出的数据包有关,访问内核上的服务,经过内核。
FORWARD :与Linux本机没有关系,它可以传递数据包到后端的计算机中,与表NAT有关
理解Filter包含的三条链:
图中1.1.1.1 与2.2.2.2通信要经过路由。路由有两块网卡,分别设置IP:1.1.1.2 、 2.2.2.1。
内核开启服务http和ftp。
1.1.1.1访问路由内核开启的ftp服务,经过1.1.1.2端口进来。input由filter表里input设定。
相反出去。ouput由filter表里output设定
1.1.1.1与2.2.2.2通信,要经过路由。路由两块网卡网段不同,不可以通信。两块网卡通过内核做数据的连接 forward
2.nat::用来进行来目的地地址转换和源地址转换
INPUT:与进入Linux的数据包有关,但没有去访问内核上的服务,不经过内核。
PREROUTING:在进行路由判断之前目的地地址转换过程中所要进行的规则(DNAT目的地地址转换)。
POSTROUTING:在进行路由判断之后地址转换的过程中所有进行的规则(SNAT:源地址伪装。
OUTPUT:与发送出去的数据包有关,同样没有访问内核上的服务,不经过内核。
3.mangle:备用表
有五条链:input、 forward、 prerouting 、postouting 、output
二.目的地址转换和源地址转换
1.环境配置
1)服务端设置
添加两张网卡
172.25.254.110
1.1.1.110
打开地址伪装
firewall-cmd --permanent --add-masquerade
firewall-cmd --reload
firewall-cmd --list-all
2)客户端设置
1.1.1.10
GATEWAY=1.1.1.110
2.源地址转换SNAT
客户端(IP:1.1.1.10)ssh [email protected]
w -i ##可以发现看到172.25.254.110
主机172.25.254.77上显示的是172.25.254.110连接的它。但是实际上是1.1.1.10连接的172.25.254.77。这就是源地址转换
3.目的地地址转换
firewall-cmd --add-forward-port=port=22:proto=tcp:toport=22:toaddr=1.1.1.10
firewall-cmd --list-all
主机(IP:172.25.254.110)ssh [email protected]
但是它实际连接的时候1.1.1.10
删除目的地地址转换
三.iptable的管理
1.关闭firewalld的管理,打开iptables的管理方式
systemctl stop firewalld.service
systemctl mask firewalld
systemctl disable firewalld
yum install iptables-services
systemctl start iptables
systemctl enable iptables
2.显示iptables中的所有策略
iptables -L ##默认看的是filter,看到的是不是真实的ip,显示的是anywhere
iptables -nL ##-L列出表,-n解析
iptables -t nat -nL ##列出nat表的内容
iptables -t mangle -nL ##列出mangle表的内容
3.刷新火墙的信息,清空之前策略
iptables -F ##删除表的内容
iptables -nL ##表的内容被删除了
systemctl restart iptables ##重启iptables
iptables -nL ##表的内容重新回来了
4.保存iptables的策略
vim /etc/sysconfig/iptables
iptables -F
service iptables save ##保存之后配置文件被修改
cat /etc/sysconfig/iptables
四.iptables的管理
1.添加新的链westos
iptables -N westos
2.修改westos链的名称成WESTOS
iptables -E westos WESTOS
3.删除WESTOS链
iptables -X WESTOS
4.添加策略:表filter中INPUT设置拒绝172.25.254.77连接访问本机(IP:172.25.254.110)
iptables -t filter -A INPUT -s 172.25.254.77 -p tcp --dport 22 -j REJECT
主机(IP:172.25.254.77)ssh [email protected] 无法连接
5.添加策略1:拒绝所有人连接访问本机(IP:172.25.254.110)
添加策略2:允许172.25.254.77连接本机
iptable -A INPUT -j REJECT ##拒绝所有人连接
iptables -A INPUT -s 172.25.254.77 -p tcp --dport 22 -j ACCEPT ## -A表示把该策略从末端插入
iptables -I INPUT -s 172.25.254.77 -p tcp --dport 22 -j ACCEPT ## -I表示把该策略从开头插入
主机(IP:172.25.254.77)ssh [email protected] 可以连接
而其他主机不可以连接
6.添加策略:除了IP为172.25.254.77的主机,所有人都无法连接本机
iptable -A INPUT ! -s 172.25.254.10 -p tcp --dport 22 -j REJECT
五.iptables管理地址伪装
1.源地址转换
sysctl -a | grep ip_forward
net.ipv4.ip_forward = 1
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 172.25.254.110
主机(IP:1.1.1.10 ) ssh [email protected]
主机172.25.254.77上显示的是172.25.254.110连接的它。但是实际上是1.1.1.10连接的172.25.254.77
2.目的地地址转换
iptables -t nat -A PREROUTING -i eth0 -j DNAT --to-dest 1.1.1.10
172.25.254.77主机ssh [email protected]
实际连接的是1.1.1.10