准备四台计算机
1、desktop用于模拟外网IP:192.168.3.2
2、proxy用于连接内外网:外网IP192.168.3.3 内网IP:192.168.200.2
3、web1和web2位于内网:IP地址分别为192.168.200.3和192.168.200.4
web1和web2的默认网关都设置为192.168.200.2
![在这里插入图片描述](https://img-blog.csdnimg.cn/de02ef2e371942b499dafca127e7d6a1.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAeXV5dXl1bGlhbmcwMA==,size_20,color_FFFFFF,t_70,g_se,x_16
用ping进行测试
在web1上分别测试其对proxy的eth1,eth0的网络连接,icmp请求应答都正常;在web1上测试其对desktop的eth0的网络连接,不能正常连接。
抓取报文
在web1对desktop eth0进行icmp请求,并在proxy上的eth1和eth0上抓取icmp报文:
web1:ping 192.168.3.2
proxy的eth1转发了web1的icmp请求报文,但没有返回web1的icmp响应报文。
开启proxy上的核心转发功能:
方式1:通过echo写入
方式2:vim /etc/sysctl.conf中添加以下一行:
net.ipv4.ip_forward=1
然后:sysctl -p命令激活选项
抓取报文
web1:ping 192.168.3.2
在proxy的eth0上抓取报文icmp,测试结果:proxy的eth0网卡转发了192.168.200.3请求192.168.3.2的请求报文,但没有响应报文。
设置desktop上路由规则
添加一条路由规则:设置到达192.168.200.0/24网段的网关是192.168.3.3
抓取报文
web1: ping 192.168.3.2
可以看到web1和desktop之间的icmp报文可以正常的请求和响应了。
测试其它网络服务
web1和web2上开启httpd和telnet服务:
systemctl start httpd
systemctl start telnet.socket
在desktop上分别连接web1和web2的http和telnet服务: 正常
在desktop上开启http服务:
systemctl start httpd
在web1上连接desktop的http服务: 正常
结论:开启proxy核心转发功能之后,内网和外网主机之间的服务可以相互访问。
在proxy上添加转发规则
禁止外网使用内网的所有服务
iptables -t filter -A FORWAD -d 192.168.200.0/24 -j REJECT
在desktop上测试web1和web2的所有服务:都不能使用
开放内网特定服务
在proxy上添加转发规则,向外网开放内网以下服务:
web1:icmp http
web2:icmp telnet
在desktop上分别测试web1和web2的服务:
可以使用web1的icmp和http服务,不能使用telnet服务
可以使用web2的icmp和telent服务,不能使用http服务
在web1和web2上测试desktop的http服务:内网主机访问不了外网web服务
向内网特定主机开放外网特定服务
只有web1可以访问desktop的http服务
在proxy上添加以下规则:
测试:
web1:可以访问desktop的http服务
web2:不能访问desktop的http服务