change pic location

This commit is contained in:
gameloader 2022-04-15 09:38:48 +08:00
parent 89b083ef7d
commit d08adfa422

View File

@ -15,21 +15,36 @@ author = "Logic"
#### 学习iptables的简单使用 {#学习iptables的简单使用} #### 学习iptables的简单使用 {#学习iptables的简单使用}
查看iptables的用法 `man 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` 在此处可以发现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 方法。因为未指定任何其他选项,故为放行所有输入的数据包。 添加规则,允许所有网络访问本机,-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即丢弃转发包。 为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 再将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选项增加自定义链 添加一条自定义链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 删除自定义链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的各种参数} #### 熟悉iptables的各种参数 {#熟悉iptables的各种参数}
-p可以指定iptables规则匹配的协议如允许INPUT链的所有tcp协议的数据包通过。 -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主机的数据包通过。 -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的数据包通过。 -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网卡进入的数据包通过。 -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网卡离开的数据包通过。 -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" >}}
这里要注意该匹配操作只能用于OUTPUTFORWARD和POSTROUTING这三个链因为INPUT和PREROUTING是没有离开网络的包的。 这里要注意该匹配操作只能用于OUTPUTFORWARD和POSTROUTING这三个链因为INPUT和PREROUTING是没有离开网络的包的。
--sport用于指定规则匹配的通信源端口。如匹配从端口1111发起的tcp连接的数据包。 --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连接的数据包。 --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" >}}
可以对数据包的状态进行状态检测,一般有四种状态,分别是 可以对数据包的状态进行状态检测,一般有四种状态,分别是
> 1NEW:该包想要建立一个新的连接重新连接或连接重定向2RELATED:该包是属于某个已经建立的连接所建立的新连接。3ESTABLISHED该包属于某个已经建立的连接。4INVALID:该包不匹配于任何连接通常这些包被DROP。 > 1NEW:该包想要建立一个新的连接重新连接或连接重定向2RELATED:该包是属于某个已经建立的连接所建立的新连接。3ESTABLISHED该包属于某个已经建立的连接。4INVALID:该包不匹配于任何连接通常这些包被DROP。
如允许目的端口为22的tcp连接且状态为NEW或ESTABLISHED的数据包通过 如允许目的端口为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的数据包 --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的数据包。 -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之间的数据包通过。 -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连接超过的连接数据包拒绝。 -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(一个客户端) -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算法的数据包。 -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日志记录} #### iptables日志记录 {#iptables日志记录}
@ -82,13 +124,20 @@ echo "kernel.warning /var/log/iptables.log" >> /etc/rsyslog.conf
systemctl restart rsyslog 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` 配置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日志且给出相应前缀为 可以看到两个数据包的相关日志信息再次定义一些日志策略。如获取所有TCP日志且给出相应前缀为
```shell ```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 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不会向客户端返回任何信息可以避免在遭到攻击时让攻击者确定服务的存在。放行状态为已连接的数据包 在这里使用了REJECT来拒绝数据包使用DROP丢弃数据包也能达到同样的效果在实际应用场景中一般推荐使用DROP因为DROP不会向客户端返回任何信息可以避免在遭到攻击时让攻击者确定服务的存在。放行状态为已连接的数据包
```shell ```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 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个数据包。 利用扩展模块limit限制每个客户端每分中最多发送25个数据包总共最多发送100个数据包。
```shell ```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 安装抓包工具tcpdump网络配置工具bridge-utils
```shell ```shell
@ -162,56 +215,96 @@ yum -y install tcpdump bridge-utils
#### ip link使用 {#ip-link使用} #### 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。查看网络设备信息 新建网络接口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的信息 分别查看虚拟网卡的信息和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可以查看更详细的信息 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用于查看某一虚拟网卡的统计信息 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使用} #### 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等同 创建一个名为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 在名为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。 在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并启用 给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 给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 删除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使用 {#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中的所有网桥 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查看网桥信息 判断网桥是否存在新建一个网卡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中所有端口这里将新建网卡和添加网卡到网桥合并为一条命令。 在网桥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 删除网桥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的属性 设置网口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 从网桥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 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。 创建tag为10的内网1。
```shell ```shell
@ -251,10 +345,14 @@ ip netns exec ns-tap1 ip addr show
ip netns exec ns-tap1 ip route show ip netns exec ns-tap1 ip route show
``` ```
![](https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0413yUKLHE.png) {{< figure src="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) {{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/041310YlQh.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/0413P0gSKK.png" >}}
{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0413u8yOfK.png" >}}
创建tag为11的内网2 创建tag为11的内网2
```shell ```shell
@ -277,12 +375,19 @@ ip netns exec ns-tap2 ip route show
``` ```
最终查看ns-tap2中的ip和路由信息如下 最终查看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此时的信息 查看网桥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 测试两个内网的连通性在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互通 可见网络不连通使用netns模拟器由器实现内网1与内网2互通
```shell ```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中的防火墙匹配到的数据包 在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地址将链路层信息显示出来并指定监听的接口。 打开两个终端利用tcpdump进行抓包分析。用简单的话来定义tcpdump就是dump the traffic on a network根据使用者的定义对网络上的数据包进行截获的包分析工具。 tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤。实验过程中我们使用-nei参数表示显示数据包的主机ip地址将链路层信息显示出来并指定监听的接口。
```shell ```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经过继续配置SNATSNAT为源地址转换能改变数据包的源地址。 可见数据包的确从r2经过继续配置SNATSNAT为源地址转换能改变数据包的源地址。
```shell ```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匹配情况 同样在两个网络间进行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" >}}
可见成功匹配到数据包配置DNATDNAT为目的地址转换改变数据包的目的地址。 可见成功匹配到数据包配置DNATDNAT为目的地址转换改变数据包的目的地址。
```shell ```shell
@ -354,7 +467,9 @@ ip netns exec router iptables -t nat -I PREROUTING -i r1 -p tcp --dport 80 -j DN
``` ```
进行连接测试并查看iptables的匹配情况 进行连接测试并查看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 ```shell
@ -365,7 +480,9 @@ ip netns exec router iptables -t nat -I PREROUTING -p tcp --dport 80 -j REDIRECT
``` ```
进行连接测试并查看iptables的匹配情况 进行连接测试并查看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 可见重定向成功配置网络防火墙允许内网1访问内网2
```shell ```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匹配情况 内网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即可配置完成后查看匹配情况 拒绝内网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服务 可见此时内网1确实无法访问内网2且匹配到了对应的数据包拒绝内网1访问内网2的80服务
```shell ```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服务并查看匹配情况 内网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服务 可见数据包匹配成功且内网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 搭建新的实验环境配置内网1
```shell ```shell
@ -436,13 +563,21 @@ ip netns exec ns-tap1 ip addr add dev tap1 10.0.0.2/24
``` ```
配置完成后查看网桥信息和内网1中的ip信息 配置完成后查看网桥信息和内网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信息 内网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中测试测试二层同网段通信 在内网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内核模块并查看加载情况 可见同网段中的网络可以通信配置桥接模式防火墙即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数据包 修改配置以便桥接模式防火墙可以监控网桥中的arp ipv4 ipv6数据包
```shell ```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链所有流量导入自定义链 将FORWARD链所有流量导入自定义链
```shell ```shell
@ -463,7 +600,8 @@ iptables -A FORWARD -j openvswitch-forward
``` ```
导入后查看iptables如下 导入后查看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 ```shell
# 添加in方向链表 # 添加in方向链表
@ -476,7 +614,9 @@ iptables -A openvswitch-forward -m physdev --physdev-in tap11 --physdev-is-bridg
``` ```
导入后查看iptables如下 导入后查看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添加规则 给内网1添加规则
```shell ```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 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添加规则 给内网1添加out方向规则即给openvswitch-o-tap1添加规则
```shell ```shell
@ -501,7 +642,8 @@ iptables -A openvswitch-o-tap1 -j openvswitch-s-tap1
iptables -A openvswitch-o-tap1 -j RETURN 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添加安全规则 给内网1添加安全规则
```shell ```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的情况 配置好后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 ```shell
iptables -A openvswitch-fallback -m comment --comment "Default drop rule for unmatched traffic." -j DROP 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的连通性 测试内网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规则生效的地址集。 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地址 可见可以ping通且匹配到了对应的数据包验证内网1能否修改ip mac地址
```shell ```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 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) {{< figure src="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/0414Ddpkz8.png" >}}
可见已经不能ping通且iptables匹配到了应该丢弃的数据包 可见已经不能ping通且iptables匹配到了应该丢弃的数据包
```shell ```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 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传递过来的数据包才能通过防火墙。 可见不能ping通且iptables匹配到了应该丢弃的数据包。以上两次修改说明只有iptables中指定的ip和MAC传递过来的数据包才能通过防火墙。