实验环境

Pro: 网安实验Lab4-IPtables Firewall - 图1

**

虚拟机 网络连接 IP 网关
Ubuntu1(M1) Host-only 192.168.0.1 192.168.0.2
Ubuntu2(M2) Host-only
桥接
192.168.0.2(内)
192.168.31.129(外)

192.168.31.1(外)
Ubuntu3(M3) Host-only 192.168.0.3 192.168.0.2
Ubuntu4(M4) 桥接 192.168.31.220 192.168.31.1

置连接


准备4台虚拟机,M1,M3模拟内网,M2模拟路由器,M4模拟外网。其中,M1,M3都设置为仅主机模式,并且不勾选红框中的内容。
Pro: 网安实验Lab4-IPtables Firewall - 图2
其中M2作为两个网络的分界,需要安装两个网卡,一个网卡设置为桥接,模拟外网IP地址,另一个网卡设置为Host-only模拟网关。
Pro: 网安实验Lab4-IPtables Firewall - 图3

配置IP

由于在虚拟网络编辑器中没有勾选DHCP自动分配IP,所以需要在M1,M2,M3中手动设置静态IP地址和网关。设置-网络-IPv4,将IPv4方式更改为手动,并设置IP地址,M1地址为192.168.0.1,M2地址为192.168.0.2,M3地址为192.168.0.3。M1,M3网关设置为192.168.0.2,即M2的IP地址。M2网关留空即可。
Pro: 网安实验Lab4-IPtables Firewall - 图4
M1:
Pro: 网安实验Lab4-IPtables Firewall - 图5
M2:
Pro: 网安实验Lab4-IPtables Firewall - 图6
M3:
Pro: 网安实验Lab4-IPtables Firewall - 图7
M4:
Pro: 网安实验Lab4-IPtables Firewall - 图8
M1,M3路由表:
Pro: 网安实验Lab4-IPtables Firewall - 图9

网络测试

M1-M2(内)-M3互通:
M1(192.168.0.1) ping M2(192.168.0.2)和M3(192.168.0.3)
Pro: 网安实验Lab4-IPtables Firewall - 图10
M2(外)-M4互通:
M4(192.168.31.220) ping M2(192.168.31.129)
Pro: 网安实验Lab4-IPtables Firewall - 图11
其余不通:
M1(192.168.0.1) ping M4(192.168.31.220)
Pro: 网安实验Lab4-IPtables Firewall - 图12
M3(192.168.0.3) ping M2外(192.168.31.129)
Pro: 网安实验Lab4-IPtables Firewall - 图13

PART A

开启路由转发

在M2上更改/etc/sysctl.conf文件,开启ipv4路由转发:
sudo gedit /etc/sysctl.conf
Pro: 网安实验Lab4-IPtables Firewall - 图14
刷新:sudo sysctl -p
Pro: 网安实验Lab4-IPtables Firewall - 图15

添加NAT规则

M2: sudo iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT —to-source 192.168.31.129

添加过滤规则

由于实验要求只允许ssh连接,所以设置为白名单即可,而ssh服务运行在22号端口上,所以只需要允许接受来自22端口或到达22端口的通信即可。
iptables -P FORWARD DROP #丢弃所有转发流量
iptables -P INPUT DROP #丢弃所有入流量
iptables -P OUTPUT ACCEPT #接受所有出流量
iptables -I FORWARD -p tcp —sport 22 -j ACCEPT #转发来自22端口的流量
iptables -I FORWARD -p tcp —dport 22 -j ACCEPT #转发到达22端口的流量
Pro: 网安实验Lab4-IPtables Firewall - 图16
在M4上安装ssh服务: sudo apt install openssh-server
开启ssh服务: sudo service ssh start
M1 ping M4:无法到达
Pro: 网安实验Lab4-IPtables Firewall - 图17
M1 ssh M4:连接成功
Pro: 网安实验Lab4-IPtables Firewall - 图18

PART B

配置规则

根据实验要求,只允许本地ssh和ping流量转发,禁用其它连接。
iptables -t filter -F #清除filter表规则
iptables -P OUTPUT DROP #设置默认策略,入流量丢弃
iptables -P INPUT DROP #设置默认策略,出流量丢弃
iptables -A INPUT -p tcp —dport 22 -i lo -j ACCEPT
iptables -A INPUT -p tcp —sport 22 -i lo -j ACCEPT
iptables -A OUTPUT -p tcp —dport 22 -o lo -j ACCEPT
iptables -A OUTPUT -p tcp —sport 22 -o lo -j ACCEPT
iptables -A INPUT -p icmp -i lo -j ACCEPT #接受本地入icmp数据包
iptables -A OUTPUT -p icmp -o lo -j ACCEPT #接受本地出icmp数据包
Pro: 网安实验Lab4-IPtables Firewall - 图19
Pro: 网安实验Lab4-IPtables Firewall - 图20

进行测试

M2 ping M1(192.168.0.1):
Pro: 网安实验Lab4-IPtables Firewall - 图21
M2 ping M2(192.168.0.2):
M2 ping M2(192.168.31.129):
Pro: 网安实验Lab4-IPtables Firewall - 图22
M2 ssh M2(192.168.0.2):
M2 ssh M2(192.168.31.129):
Pro: 网安实验Lab4-IPtables Firewall - 图23
Pro: 网安实验Lab4-IPtables Firewall - 图24

PART C

配置规则

根据实验要求,只允许M1与外部网络进行ssh通信,并拒绝其它连接。
iptables -t filter -F #清除filter表规则
iptables -P OUTPUT DROP #设置默认策略,入流量丢弃
iptables -P INPUT DROP #设置默认策略,出流量丢弃
iptables -P FORWARD DROP #设置默认策略,转发流量丢弃
iptables -A INPUT -s 192.168.0.1 -p tcp —dport 22 -j ACCEPT
iptables -A INPUT -d 192.168.0.1 -p tcp —sport 22 -j ACCEPT
iptables -A OUTPUT -s 192.168.0.1 -p tcp —dport 22 -j ACCEPT
iptables -A OUTPUT -d 192.168.0.1 -p tcp —sport 22 -j ACCEPT
iptables -A FORWARD -s 192.168.0.1 -p tcp —dport 22 -j ACCEPT
iptables -A FORWARD -d 192.168.0.1 -p tcp —sport 22 -j ACCEPT
Pro: 网安实验Lab4-IPtables Firewall - 图25
Pro: 网安实验Lab4-IPtables Firewall - 图26

进行测试

M1 ping M4(192.168.31.220):无法连接
M1 ssh M4(192.168.31.220):成功连接
Pro: 网安实验Lab4-IPtables Firewall - 图27
M3 ssh M4(192.168.31.220):无法连接
Pro: 网安实验Lab4-IPtables Firewall - 图28

实验总结

通过此次实验,加深了对包过滤防火墙的理解,同时学习了linux下iptables的基本使用方法。