防火墙管理器二:iptables

来源:互联网 发布:可靠性软件 编辑:程序博客网 时间:2024/06/14 02:43

一、iptables的部署

因为iptables和firewalld服务不能同时存在,所以我们在使用iptables时必须关闭firewalld服务

这里写图片描述

查看filter表

[root@server ~]# iptables -t filter -L[root@server ~]# iptables -t filter -nL[root@server ~]# iptables -nL

刷新filter表

[root@server ~]# iptables -F

保存当前filter表

[root@server ~]# service iptables save

一般刷新后都要保存一下,不然重启服务后又恢复之前的设定了

配置文件

[root@server ~]# cat /etc/sysconfig/iptables

在做接下来的实验前我们先刷掉之前的设定并保存
这里写图片描述
这里写图片描述

二、iptable的用法

[root@server ~]# iptables -A INPUT -i lo -j ACCEPT #添加本地回环接口
[root@server ~]# iptables -A INPUT -s 172.25.254.14 -p tcp --dport 22 -j ACCEPT  #允许14主机使用22端口访问

这里写图片描述

[root@server ~]# iptables -A INPUT -p tcp --dport 80 -j ACCEPT  #允许所有人访问80端口

这里写图片描述

[root@server ~]# iptables -A INPUT -j REJECT#拒绝所有人访问

用44主机连:
这里写图片描述
用14主机连
这里写图片描述
发现14主机依然可以访问我们的22号端口,是因为我们之前设定过14主机可以访问22号端口,策略在读取的时候是按顺序读取的,所以14主机访问时读取的是第二条策略,44主机读取的是最后一条策略
这里写图片描述

分别用44主机和14主机访问ftp服务都会被拒绝,因为当访问ftp服务时读的都是最后一条策略
这里写图片描述

这里写图片描述

[root@server ~]# iptables -I INPUT 1 -p tcp --dport 22 -j DROP #将此条策略插到第1条

这里写图片描述

删除第二条策略
这里写图片描述
这里写图片描述

REJECT与 DROP的区别
用REJECT拒绝14 主机访问22端口
这里写图片描述
14主机访问的时侯会有connection refused 的提示
这里写图片描述

用DROP拒绝14主机访问22端口
这里写图片描述

14主机访问的时后没有任何响应
这里写图片描述

state 通常可以有4种状态:
»NEW: 该包想要开始一个新的连接(重新连接或连接重定 向)
»RELATED:该包是属于某个已建立的连接所建立的新连接。举例:FTP的数据传输连接和控制连接之间就是RELATED关系。
»ESTABLISHED:该包属于某个已建立的连接。
»INVALID:该 包不匹配于任何连接,通常这些包被DROP。

我们可以这样设计我们的策略:

[root@server ~]# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT[root@server ~]# iptables -A INPUT -m state --state NEW -i lo -j ACCEPT[root@server ~]# iptables -A INPUT -m state --state NEW -p tcp --dport 22 -j ACCEPT [root@server ~]# iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT [root@server ~]# iptables -A INPUT -j REJECT [root@server ~]# service iptables save

这里写图片描述

DNAT(目标地址转换)与 SNAT(源地址转换)
POSTROUTING:可以在这里定义进行源NAT的规则,系统在决定了数据包的路由以后在执行该链中的规则。
SNAT就是改变转发数据包的源地址
–to-source:
PREROUTING:(外部访问内部)可以在这里定义进行目的NAT的规则,因为路由器进行路由时只检查数据包的目的ip地址,所以为了使数据包得以正确路由,我们必须在路由之前就进行目的NAT;
DNAT就是改变转发数据包的目的地址 –to-dest:
MASQUERADE:使用拨号方式,公有地址不固定(地址伪装)

[root@server ~]# iptables -t nat -nL  #查看nat表的策略

SNAT:
在server上配置双网卡:
eth0:172.25.254.244
eth1:172.25.44.1

这里写图片描述

在www上配置:
ip:172.25.254.14
gateway:172.25.254.244(server主机上与自己ip处于同一网段的ip)
这里写图片描述
这里写图片描述

配置完成后检测是否能ping通网关,以免对接下来的实验产生影响
这里写图片描述

我这里刚开始是ping不同的,原因是因为我之前写的策略的问题,将之前的策略刷掉,再ping就可以ping通了

在进行SNAT之前我们的www主机是不能用ssh 连接172.25.44.250这台主机的
这里写图片描述

接下来我们在server上进行SNAT

[root@server ~]# iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to-source 172.25.44.1   

server这台主机具有双ip,既能与172.25.254.14这台主机传输数据,又能与172.25.44.250这台主机传输数据。
当14想要访问250时,由于二者不能直接通信,所以14先去找server,server会告诉250主机这个数据包是从我的172.25.44.1上来的,这样就可以让server可以向250传输数据

在我们写完源地址转换策略后还需要做一下设定:

可以看到默认net.ipv4.ip_forward = 0

[root@server ~]# sysctl -a | grep ip_forwardnet.ipv4.ip_forward = 0

这里写图片描述

编辑/etc/sysctl.conf,插入net.ipv4.ip_forward = 1

[root@server ~]# vim /etc/sysctl.conf 

这里写图片描述

[root@server ~]# sysctl -pnet.ipv4.ip_forward = 1

再次用14主机连接250主机,就可以成功连接了
这里写图片描述

DNAT:

[root@server ~]# iptables -t nat -A PREROUTING -i eth1 -j DNAT --to-dest 172.25.254.14

当250主机想要和14进行数据传输,250先去找server,由于250这个主机可以与server的172.25.44.1这个ip传输数据,所以server就做了这样的设定:当250主机访问自己的172.25.44.1这个ip时,将目的地转发到172.25.254.14这台主机上,这样就实现了从250到14主机的数据传输

写完上面策略后测试:
这里写图片描述

原创粉丝点击