实验环境
**
虚拟机 | 网络连接 | 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都设置为仅主机模式,并且不勾选红框中的内容。
其中M2作为两个网络的分界,需要安装两个网卡,一个网卡设置为桥接,模拟外网IP地址,另一个网卡设置为Host-only模拟网关。
配置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网关留空即可。
M1:
M2:
M3:
M4:
M1,M3路由表:
网络测试
M1-M2(内)-M3互通:
M1(192.168.0.1) ping M2(192.168.0.2)和M3(192.168.0.3)
M2(外)-M4互通:
M4(192.168.31.220) ping M2(192.168.31.129)
其余不通:
M1(192.168.0.1) ping M4(192.168.31.220)
M3(192.168.0.3) ping M2外(192.168.31.129)
PART A
开启路由转发
在M2上更改/etc/sysctl.conf文件,开启ipv4路由转发:
sudo gedit /etc/sysctl.conf
刷新:sudo sysctl -p
添加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端口的流量
在M4上安装ssh服务: sudo apt install openssh-server
开启ssh服务: sudo service ssh start
M1 ping M4:无法到达
M1 ssh M4:连接成功
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数据包
进行测试
M2 ping M1(192.168.0.1):
M2 ping M2(192.168.0.2):
M2 ping M2(192.168.31.129):
M2 ssh M2(192.168.0.2):
M2 ssh M2(192.168.31.129):
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
进行测试
M1 ping M4(192.168.31.220):无法连接
M1 ssh M4(192.168.31.220):成功连接
M3 ssh M4(192.168.31.220):无法连接
实验总结
通过此次实验,加深了对包过滤防火墙的理解,同时学习了linux下iptables的基本使用方法。