iptables实现网络防火墙功能,SNAT以及DNAT功能

iptables实现网络防火墙功能,SNAT以及DNAT功能

一、网络防火墙的实现

1.环境准备:

虚拟机vmware workstation 11

系统CentOS 7.3

软件包安装:yum install httpd vsftpd tcpdump

2.前提条件

2.1各主机正确设置IP地址/子网掩码

参考设置:

主机A 网卡ens33:10.0.0.110/24 内网客户端

主机B 网卡ens33:10.0.0.111/24 ens37:172.16.252.52/24 网关服务器

主机C 网卡ens33:172.16.254.52/24 外网服务端

2.2各主机正确设置网关地址

参考设置:

主机A添加默认路由信息

route add default gw 10.0.0.111

主机C添加路由信息

route add -net 10.0.0.0/24 gw 172.16.252.52

3.推荐实现步骤

开启路由转发功能

在filter表中的FORWARD链中实现

4.要注意的问题

1.请求和响应均会经过FORWARD链,要注意规则的方向性

2.如果要启用conntrack机制,建议双方向的状态为ESTABLISHED的报文直接放行通过

3.配置规则时可使用tcpdump抓包分析数据报文

步骤:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

1.主机A添加默认路由信息

route add default gw 10.0.0.111

route -n

2.主机B开启核心转发功能

sysctl -w net.ipv4.ip_forward=1

3.tcpdump抓包测试数据

主机A:ping 172.16.254.52

主机B抓包:tcpdump -i ens33 -nn icmp

测试结果:有10.0.0.110到172.16.254.52的请求报文信息,但没有回应报文信息

4.主机C使用tcpdump抓包测试数据

tcpdump -i ens33 -nn icmp

测试结果:有回应报文信息,但回应报文信息发往给其他主机,因此要设定网关信息

5.主机C添加路由信息

route add -net 10.0.0.0/24 gw 172.16.252.52

route -n

6.主机A ping请求测试

ping 172.16.254.52

测试结果:ping通

7.主机C启动httpd服务

systemctl start httpd.service

8.主机A访问主机C的web页面

curl http://172.16.254.52 #此时应该正常显式页面内容

在上面的基础上搭建网络防火墙

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

方式一:

9.拒绝所有转发服务

iptables -A FORWARD -j REJECT

10.添加链规则:允许本地主机A访问外网主机C的80端口的服务

iptables -I FORWARD -s 10.0.0.0/24 -p tcp --dport 80 -j ACCEPT

11.添加链规则:允许外网主机C的80端口http服务响应本机

iptables -I FORWARD 2 -d 10.0.0.0/24 -p tcp --sport 80 -j ACCEPT

12.主机A测试能否访问主机C的web页面

curl http://172.16.254.52#此时应该正常显式页面内容

方式二:

9.拒绝所有转发服务

iptables -A FORWARD -j REJECT

10.放行所有建立连接的数据报文

iptables -I FORWARD -m state --state ESTABLISHED -j ACCEPT

11.新建一条链规则允许本地主机A访问外网主机C

iptables -I FORWARD 2 -s 10.0.0.0/24 -m state --state NEW -j ACCEPT

12.主机A测试

curl http://172.16.254.52 #此时应该正常显式页面内容

13.添加链规则:允许外网主机C访问本地主机A的80端口的http服务

iptables -I FORWARD 3 -d 10.0.0.110 -p tcp --dport 80 -m state --state NEW -j ACCEPT

14.主机C测试

curl http://10.0.0.110 #此时应该正常显式页面内容

15.添加链规则:允许本机主机A开放更多端口的服务

iptables -R FORWARD 3 -d 10.0.0.110 -p tcp -m multiport --dport 21:23,80 -m state --state NEW -j ACCEPT

16.加载FTP模块(两种方式)

1.modprobe nf_conntrack_ftp

2.vi /etc/sysconfig/iptables-config

IPTABLES_MODULES="nf_conntrack_ftp"

17.建立FTP访问链规则,开放FTP被动模式

iptables -A FORWARD -d 10.0.0.110 -p tcp -m state --state RELATED -j ACCEPT

18.主机C测试

lftp 10.0.0.110

ssh root@10.0.0.110

curl http://10.0.0.110 #此时测试应该都能正常获取信息

二、SNAT转发功能实现

前提条件

各主机正确设置IP地址/子网掩码

参考设置:

主机A 网卡ens33:10.0.0.110/24 内网客户端

主机B 网卡ens33:10.0.0.111/24 ens37:172.16.252.52/24 网关服务器

主机C 网卡ens33:172.16.254.52/24 外网服务器

各主机正确设置网关地址

参考设置:

主机A添加默认路由信息

route add default gw 10.0.0.111

主机C添加路由信息

route add -net 10.0.0.0/24 gw 172.16.252.52

推荐实现步骤

1. 开启网关主机的路由转发功能

主机B开启核心转发功能

sysctl -w net.ipv4.ip_forward=1

2. 添加使用SNAT策略的防火墙规则

规则示例

iptables -t nat -I POSTROUTING -j SNAT --to-source 172.16.252.52

3.验证SNAT结果

主机A curl http://172.16.254.52

主机C tail -f /var/log/httpd/access_log #查看到的ip地址应该为主机B的公网地址

三、DNAT转发功能的实现

前提条件

各主机正确设置IP地址/子网掩码

参考设置:

主机A 网卡ens33:10.0.0.110/24 内网服务器

主机B 网卡ens33:10.0.0.111/24 ens37:172.16.252.52/24,网关服务器

主机C 网卡ens33:172.16.254.52/24 外网客户端

各主机正确设置网关地址

参考设置:

主机A添加默认路由信息

route add default gw 10.0.0.111

主机C添加路由信息

route add -net 10.0.0.0/24 gw 172.16.252.52

推荐实现步骤

1. 开启网关主机的路由转发功能

主机B开启核心转发功能

sysctl -w net.ipv4.ip_forward=1

2. 添加使用SNAT策略的防火墙规则

规则示例

iptables -t nat -I PREROUTING  -d 172.16.252.52 -p tcp --dport 80 -j DNAT --to-destination 10.0.0.110

3.验证DNAT结果(主机C访问主机B的公网地址显式的内应该为主机A的web内容)

主机C curl http://172.16.252.52

主机A tail -f /var/log/httpd/access_log #查看到的ip地址应该为外网主机C的地址

本文转自 PowerMichael 51CTO博客,原文链接:http://blog.51cto.com/huwho/1934983,如需转载请自行联系原作者

上一篇:Linux防火墙iptables学习笔记(三)iptables命令详解和举例
下一篇:解决SecureCRT中文版“数据库里没找到防火墙‘无’”的错误提示