From d08adfa42243bfc34e88921859d719e838ea60da Mon Sep 17 00:00:00 2001 From: gameloader Date: Fri, 15 Apr 2022 09:38:48 +0800 Subject: [PATCH] change pic location --- content/posts/ex5.md | 330 +++++++++++++++++++++++++++++++------------ 1 file changed, 242 insertions(+), 88 deletions(-) diff --git a/content/posts/ex5.md b/content/posts/ex5.md index 824761e..1938977 100644 --- a/content/posts/ex5.md +++ b/content/posts/ex5.md @@ -15,21 +15,36 @@ author = "Logic" #### 学习iptables的简单使用 {#学习iptables的简单使用} 查看iptables的用法 `man iptables` -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0412j5rJwu.png) + +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0412j5rJwu.png" >}} + 在此处可以发现,iptables默认使用filter表,则 `iptables -t filter -nvL` 可以简写为 `iptables -nvL` -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0412zfdaub.png) -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/04127WFdan.png) + +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0412zfdaub.png" >}} + +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/04127WFdan.png" >}} + 添加规则,允许所有网络访问本机,-A表示添加规则,INPUT指定添加规则的链,-j表示跳转到ACCEPT 方法。因为未指定任何其他选项,故为放行所有输入的数据包。 -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0412KLIA5j.png) + +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0412KLIA5j.png" >}} + 为FORWARD链添加默认规则,-P表示设置链的默认策略,这里我们将FORWARD链的默认策略设定为DROP,即丢弃转发包。 -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/04120uXSfw.png) + +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/04120uXSfw.png" >}} + 再将FORWARD链的规则改回ACCEPT -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0412UeHZMa.png) + +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0412UeHZMa.png" >}} + 添加一条自定义链test,查看man手册可知可使用-N选项增加自定义链 -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0412obrFnq.png) -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0412pi1fR8.png) + +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0412obrFnq.png" >}} + +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0412pi1fR8.png" >}} + 删除自定义链test -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0412R9hXeL.png) + +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0412R9hXeL.png" >}} ### 任务二 {#任务二} @@ -38,39 +53,66 @@ author = "Logic" #### 熟悉iptables的各种参数 {#熟悉iptables的各种参数} -p可以指定iptables规则匹配的协议,如允许INPUT链的所有tcp协议的数据包通过。 -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0412KpnclT.png) + +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0412KpnclT.png" >}} + -s可以指定规则匹配的IP源地址,如在INPUT链允许来自192.168.0.1主机的数据包通过。 -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0412OHp2St.png) + +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0412OHp2St.png" >}} + -d可以指定规则匹配的IP目的地址,如允许目的地址为192.168.0.1的数据包通过。 -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/04121SrSfQ.png) + +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/04121SrSfQ.png" >}} + -i可以指定规则匹配的进入本地的网络接口,即网卡,如允许通过eth0网卡进入的数据包通过。 -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0412DnSZWC.png) + +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0412DnSZWC.png" >}} + -o可以指定规则匹配离开本地使用的网络接口,如允许从eth0网卡离开的数据包通过。 -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0412XEuPrp.png) + +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0412XEuPrp.png" >}} + 这里要注意该匹配操作只能用于OUTPUT,FORWARD和POSTROUTING这三个链,因为INPUT和PREROUTING是没有离开网络的包的。 --sport用于指定规则匹配的通信源端口。如匹配从端口1111发起的tcp连接的数据包。 -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0412l98cwB.png) + +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0412l98cwB.png" >}} + --dport用于匹配通信目的端口,如匹配目的端口为80的tcp连接的数据包。 -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0412ew4AXy.png) + +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0412ew4AXy.png" >}} + 可以对数据包的状态进行状态检测,一般有四种状态,分别是 > (1)NEW:该包想要建立一个新的连接(重新连接或连接重定向)。(2)RELATED:该包是属于某个已经建立的连接所建立的新连接。(3)ESTABLISHED:该包属于某个已经建立的连接。(4)INVALID:该包不匹配于任何连接,通常这些包被DROP。 如允许目的端口为22的tcp连接且状态为NEW或ESTABLISHED的数据包通过 -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/04126pRxTm.png) + +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/04126pRxTm.png" >}} + 还可以指定一些特殊参数 --icmp-type指定ICMP连接的类型编号,如匹配icmp协议且icmp类型编号为8的数据包 -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0412mw3ilW.png) + +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0412mw3ilW.png" >}} + -m multiport指定多端口号,如匹配类型为tcp连接且目的端口号为22,53,80,110的数据包。 -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0412B4ylRC.png) + +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0412B4ylRC.png" >}} + -m iprange指定ip段,可以指定源地址或者目的地址的IP段,如禁止源地址在192.168.1.2-192.168.1.7之间的数据包通过。 -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0412G45IZY.png) + +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0412G45IZY.png" >}} + -m connlimit --comlimit-above限定每个客户端产生的连接个数,如限制每个客户端最多同时与本地网络有100个tcp连接,超过的连接数据包拒绝。 -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0412iAkfjf.png) + +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0412iAkfjf.png" >}} + -m limit限定连接速率,即限定匹配数据包的个数。如限制连接的最大数据包为6(一个客户端) -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0412WldV0j.png) + +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0412WldV0j.png" >}} + -m string限定字符串,使用--string来指定具体的字符串,使用--algo来指定算法为bm或者kmp。如丢弃从本地离开的匹配字符串tudou.com且使用bm算法的数据包。 -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0412v4Gpo7.png) + +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0412v4Gpo7.png" >}} #### iptables日志记录 {#iptables日志记录} @@ -82,13 +124,20 @@ echo "kernel.warning /var/log/iptables.log" >> /etc/rsyslog.conf systemctl restart rsyslog ``` -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/04125sS6uf.png) +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/04125sS6uf.png" >}} + 配置iptables规则为将来自127.0.0.1的icmp数据包打印到日志且日志信息的前缀为 `iptables icmp-localhost` -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0412E8MINW.png) + +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0412E8MINW.png" >}} + 验证规则 -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0412p8dV1N.png) + +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0412p8dV1N.png" >}} + 可见有匹配的数据包,查看日志信息 -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0412YEnSCk.png) + +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0412YEnSCk.png" >}} + 可以看到两个数据包的相关日志信息再次定义一些日志策略。如获取所有TCP日志且给出相应前缀为 ```shell @@ -116,7 +165,8 @@ iptables -A INPUT -p tcp --dport 22 -j LOG --log-prefix "iptables SSH " iptables -A INPUT -p icmp -j icmp ``` -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0412vN7SKr.png) +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0412vN7SKr.png" >}} + 在这里使用了REJECT来拒绝数据包,使用DROP丢弃数据包也能达到同样的效果,在实际应用场景中一般推荐使用DROP,因为DROP不会向客户端返回任何信息,可以避免在遭到攻击时让攻击者确定服务的存在。放行状态为已连接的数据包 ```shell @@ -129,7 +179,8 @@ iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A INPUT -p tcp --src 127.0.0.1 --dport 80 -j ACCEPT ``` -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0412PSnPjw.png) +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0412PSnPjw.png" >}} + 利用扩展模块limit限制每个客户端每分中最多发送25个数据包,总共最多发送100个数据包。 ```shell @@ -149,7 +200,9 @@ systemctl status openvswitch ``` 启动后查看状态如下 -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0413hoRi6h.png) + +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0413hoRi6h.png" >}} + 安装抓包工具tcpdump,网络配置工具bridge-utils ```shell @@ -162,56 +215,96 @@ yum -y install tcpdump bridge-utils #### ip link使用 {#ip-link使用} 查看使用帮助 -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0413ooym2j.png) + +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0413ooym2j.png" >}} + 新建网络接口eth0类型为vlan设置vlan id为10,添加一个新的虚拟网卡veth1,设定tunnel对端的网卡为veth2。查看网络设备信息 -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/04136tbTKl.png) + +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/04136tbTKl.png" >}} + 分别查看虚拟网卡的信息和vlan的信息 -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0413UCvOJk.png) + +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0413UCvOJk.png" >}} + ip -d link show可以查看更详细的信息 -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0413ugIICY.png) + +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0413ugIICY.png" >}} + ethtool命令用于查询和控制网络设备驱动程序和硬件设置,通过这个命令我们可以查看设置的虚拟网卡的信息,-S用于查看某一虚拟网卡的统计信息 -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0413uRYlvw.png) + +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0413uRYlvw.png" >}} + 启动刚刚设置的各个接口 -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/04138euQxN.png) + +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/04138euQxN.png" >}} + 删除增加的接口 -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/04135qtj5M.png) + +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/04135qtj5M.png" >}} + 可见接口已经被删除 #### ip netns使用 {#ip-netns使用} 查看使用帮助 -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/04137JGB0q.png) + +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/04137JGB0q.png" >}} + 创建一个名为test的namespace并查看所有namespace,可以直接ip netns效果和ip netns list等同 -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0413TexD0q.png) + +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0413TexD0q.png" >}} + 在名为test的namespace中执行命令ip addr show -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0413RZtcp5.png) + +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0413RZtcp5.png" >}} + 在test的namespace中启动bash,并执行命令,查看路由和防火墙,查看完成后退出bash。 -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/04132SYCTC.png) + +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/04132SYCTC.png" >}} + 给test添加接口tap1并启用 -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0413CGXBNN.png) + +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0413CGXBNN.png" >}} + 给tap1虚拟接口配置ip -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0413XVp5mB.png) + +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0413XVp5mB.png" >}} + 删除test namespace -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/04139eMJFx.png) + +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/04139eMJFx.png" >}} #### openvswitch使用 {#openvswitch使用} 查看openvswitch安装的命令行工具 -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0413rMDrTf.png) + +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0413rMDrTf.png" >}} + ovs-ovsctl命令是对交换机上网桥和端口等信息进行配置的命令。我们用它添加一个网桥br0并查看openvswitch中的所有网桥 -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0413bh9rrJ.png) + +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0413bh9rrJ.png" >}} + 判断网桥是否存在,新建一个网卡tap1并将网卡添加到网桥br0,查看网桥信息 -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0413zcTnaK.png) + +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0413zcTnaK.png" >}} + 在网桥br0中新建openvswitch网口并列出网桥br0中所有端口,这里将新建网卡和添加网卡到网桥合并为一条命令。 -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0413Ln4f6q.png) + +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0413Ln4f6q.png" >}} + 删除网桥br0上的网口tap2 -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0413ynC63D.png) + +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0413ynC63D.png" >}} + 设置网口tap1的vlan tag为10,查看tap1的属性 -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0413daX841.png) + +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0413daX841.png" >}} + 从网桥br0删除网口tap1, 并从系统删除虚拟网口tap1,删除网桥br0 -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0413s6O1zC.png) + +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0413s6O1zC.png" >}} ### 任务四 {#任务四} @@ -224,7 +317,8 @@ sysctl -p sysctl -a | grep ip_forward ``` -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0413Y9sPVl.png) +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0413Y9sPVl.png" >}} + 创建tag为10的内网1。 ```shell @@ -251,10 +345,14 @@ ip netns exec ns-tap1 ip addr show ip netns exec ns-tap1 ip route show ``` -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0413yUKLHE.png) -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/041310YlQh.png) -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0413P0gSKK.png) -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0413u8yOfK.png) +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0413yUKLHE.png" >}} + +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/041310YlQh.png" >}} + +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0413P0gSKK.png" >}} + +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0413u8yOfK.png" >}} + 创建tag为11的内网2 ```shell @@ -277,12 +375,19 @@ ip netns exec ns-tap2 ip route show ``` 最终查看ns-tap2中的ip和路由信息如下 -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0413MN5tMu.png) -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0413QJXcy2.png) + +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0413MN5tMu.png" >}} + +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0413QJXcy2.png" >}} + 查看网桥br0此时的信息 -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0413f3DHV1.png) + +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0413f3DHV1.png" >}} + 测试两个内网的连通性,在ns-tap1中ping ns-tap2 -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0413MpVbj7.png) + +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0413MpVbj7.png" >}} + 可见网络不连通使用netns模拟器由器实现内网1与内网2互通 ```shell @@ -308,7 +413,9 @@ ip netns exec ns-tap1 ping -c 1 10.0.1.2 ``` 测试结果如下 -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0413gvUXDm.png) + +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0413gvUXDm.png" >}} + 可见内网此时已经互通 @@ -321,7 +428,9 @@ ip netns exec router iptables -t nat -A POSTROUTING -o r2 -j MASQUERADE ``` 在ns-tap1网络中ping ns-tap2网络,查看router中的防火墙匹配到的数据包 -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0413SvWI4L.png) + +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0413SvWI4L.png" >}} + 打开两个终端利用tcpdump进行抓包分析。用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具。 tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤。实验过程中我们使用-nei参数表示显示数据包的主机ip地址,将链路层信息显示出来,并指定监听的接口。 ```shell @@ -332,7 +441,9 @@ ip netns exec ns-tap2 tcpdump -nei tap2 ``` 监视到的结果为 -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0413bYr5Ha.png) + +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0413bYr5Ha.png" >}} + 可见数据包的确从r2经过继续配置SNAT,SNAT为源地址转换,能改变数据包的源地址。 ```shell @@ -343,7 +454,9 @@ ip netns exec router iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o r2 -j SNAT ``` 同样,在两个网络间进行ping测试,并查看router iptables匹配情况 -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/04135hxJg9.png) + +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/04135hxJg9.png" >}} + 可见成功匹配到数据包配置DNAT,DNAT为目的地址转换,改变数据包的目的地址。 ```shell @@ -354,7 +467,9 @@ ip netns exec router iptables -t nat -I PREROUTING -i r1 -p tcp --dport 80 -j DN ``` 进行连接测试并查看iptables的匹配情况 -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0413sUp1q7.png) + +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0413sUp1q7.png" >}} + 可见成功匹配到数据包配置重定向 ```shell @@ -365,7 +480,9 @@ ip netns exec router iptables -t nat -I PREROUTING -p tcp --dport 80 -j REDIRECT ``` 进行连接测试并查看iptables的匹配情况 -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0413YQLBkh.png) + +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0413YQLBkh.png" >}} + 可见重定向成功配置网络防火墙,允许内网1访问内网2 ```shell @@ -378,9 +495,13 @@ ip netns exec router iptables -A FORWARD -s 10.0.0/24 -d 10.0.1.0/24 -j ACCEPT ``` 内网1 ping 内网2并查看iptables匹配情况 -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0413fZCAbk.png) + +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0413fZCAbk.png" >}} + 拒绝内网1访问内网2,只需要将刚才的规则ACCEPT修改为DROP或REJECT即可,配置完成后查看匹配情况 -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0413ggJv0f.png) + +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0413ggJv0f.png" >}} + 可见此时内网1确实无法访问内网2且匹配到了对应的数据包拒绝内网1访问内网2的80服务 ```shell @@ -390,16 +511,22 @@ ip netns exec router iptables -A FORWARD -s 10.0.0/24 -d 10.0.1.0/24 -p tcp --dp ``` 内网1访问内网2的80服务并查看匹配情况 -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0413aHaJu8.png) + +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0413aHaJu8.png" >}} + 可见数据包匹配成功,且内网1无法访问内网2的80服务 ### 实验六 {#实验六} 查看上一次实验的实验环境 -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0413IO7L81.png) + +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0413IO7L81.png" >}} + 清空上一次的实验配置 -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/041376CBlr.png) + +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/041376CBlr.png" >}} + 搭建新的实验环境,配置内网1 ```shell @@ -436,13 +563,21 @@ ip netns exec ns-tap1 ip addr add dev tap1 10.0.0.2/24 ``` 配置完成后查看网桥信息和内网1中的ip信息 -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0413oGLNal.png) + +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0413oGLNal.png" >}} + 内网2的配置方法类似,不再赘述,配置完成后查看网桥信息和内网2中的ip信息 -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0413gvIbBc.png) + +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0413gvIbBc.png" >}} + 在内网1中测试测试二层同网段通信 -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/04130Tptpp.png) + +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/04130Tptpp.png" >}} + 可见同网段中的网络可以通信配置桥接模式防火墙即br_netfilter。加载br_netfilter内核模块并查看加载情况 -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0413XvYMJs.png) + +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0413XvYMJs.png" >}} + 修改配置以便桥接模式防火墙可以监控网桥中的arp ipv4 ipv6数据包 ```shell @@ -452,7 +587,9 @@ echo "net.bridge.bridge-nf-call-iptables = 1" >> /etc/sysctl.conf ``` 使配置生效,查看生效的配置信息 -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0414eJWW3z.png) + +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0414eJWW3z.png" >}} + 将FORWARD链所有流量导入自定义链 ```shell @@ -463,7 +600,8 @@ iptables -A FORWARD -j openvswitch-forward ``` 导入后查看iptables如下 -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/04140sYgls.png) + +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/04140sYgls.png" >}} ```shell # 添加in方向链表 @@ -476,7 +614,9 @@ iptables -A openvswitch-forward -m physdev --physdev-in tap11 --physdev-is-bridg ``` 导入后查看iptables如下 -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0414F61zEc.png) + +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0414F61zEc.png" >}} + 给内网1添加规则 ```shell @@ -490,7 +630,8 @@ iptables -A openvswitch-i-tap1 -m set --match-set ipv4-tap1 src -j RETURN iptables -A openvswitch-i-tap1 -j openvswitch-fallback ``` -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0414aEmH23.png) +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0414aEmH23.png" >}} + 给内网1添加out方向规则,即给openvswitch-o-tap1添加规则 ```shell @@ -501,7 +642,8 @@ iptables -A openvswitch-o-tap1 -j openvswitch-s-tap1 iptables -A openvswitch-o-tap1 -j RETURN ``` -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0414U6Wx6b.png) +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0414U6Wx6b.png" >}} + 给内网1添加安全规则 ```shell @@ -516,20 +658,29 @@ iptables -A openvswitch-s-tap1 -j DROP ``` 匹配的过程 -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0414V8T7v5.png) + +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0414V8T7v5.png" >}} + 配置好后iptables的情况 -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0414d6EqlL.png) + +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0414d6EqlL.png" >}} + 拒绝没有匹配的流量 ```shell iptables -A openvswitch-fallback -m comment --comment "Default drop rule for unmatched traffic." -j DROP ``` -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/04143rg1o7.png) +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/04143rg1o7.png" >}} + 测试内网1和内网2的连通性 -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/041407QOTZ.png) + +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/041407QOTZ.png" >}} + ping 不通,可见二层防火墙策略已经生效在刚刚定义的ipset ipv4-tap1中添加内网2的ip地址,再次ping验证连通性,ipset就是用来设置一个ip集合,可以用来帮助配置iptables规则生效的地址集。 -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0414U5Ipxx.png) + +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0414U5Ipxx.png" >}} + 可见可以ping通且匹配到了对应的数据包验证内网1能否修改ip mac地址 ```shell @@ -539,8 +690,10 @@ ip netns exec ns-tap1 ip addr del dev tap1 10.0.0.2/24 ip netns exec ns-tap1 ip addr add dev tap1 10.0.0.4/24 ``` -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0414wqAuHf.png) -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0414Ddpkz8.png) +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0414wqAuHf.png" >}} + +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0414Ddpkz8.png" >}} + 可见已经不能ping通且iptables匹配到了应该丢弃的数据包 ```shell @@ -550,5 +703,6 @@ ip netns exec ns-tap1 ip addr add dev tap1 10.0.0.2/24 ip netns exec ns-tap1 ip link set dev tap1 address 16:f7:55:f5:d7:ac ``` -![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0414Ldukmm.png) +{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0414Ldukmm.png" >}} + 可见不能ping通且iptables匹配到了应该丢弃的数据包。以上两次修改说明只有iptables中指定的ip和MAC传递过来的数据包才能通过防火墙。