一、背景知识
![](https://img.haomeiwen.com/i12979420/d586de513d5863ea.png)
![](https://img.haomeiwen.com/i12979420/d5deeb189bfa665a.png)
![](https://img.haomeiwen.com/i12979420/4a82db078c82d8dd.png)
![](https://img.haomeiwen.com/i12979420/a63a38c114cc5e25.png)
![](https://img.haomeiwen.com/i12979420/b8aaf4578a8151ee.png)
![](https://img.haomeiwen.com/i12979420/49fb42434d94b4b8.png)
iptables具体是如何去过滤各种规则的呢?
四表五链概念:
- Filter表——过滤数据包
- Nat表——用于网络地址转换(IP、端口)
- Mangle表——修改数据包的服务类型、TTL、并且可以配置路由实现QOS
- Raw表——决定数据包是否被状态跟踪机制处理
- INPUT链——进来的数据包应用此规则链中的策略
- OUTPUT链——外出的数据包应用此规则链中的策略
- FORWARD链——转发数据包时应用此规则链中的策略
- PREROUTING链——对数据包作路由选择前应用此链中的规则(所有的数据包进来的时侯都先由这个链处理)
- POSTROUTING链——对数据包作路由选择后应用此链中的规则(所有的数据包出来的时侯都先由这个链处理)
![](https://img.haomeiwen.com/i12979420/ce4a2e5cbfdeea3b.png)
四表中我们常用的就只有filter和nat,精简图:
![](https://img.haomeiwen.com/i12979420/b4ce8db92d1782b8.png)
二、实验环境
服务器A: 192.168.123.187
服务器B: 192.168.123.188
服务器C: 192.168.123.189
服务器B 192.168.123.188 上安装有 nginx ,访问地址 http://192.168.123.188:8085
服务器B 192.168.123.188 上安装有 caddy,访问地址 http://192.168.123.188:8086
三 、iptabbles 基本操作
![](https://img.haomeiwen.com/i12979420/a5cf4696e8122c25.png)
iptabes -t [表名] -I [链名] -j [处理动作(ACCEP/REJECT/DROP等)]
iptables -A 追加
iptables -I 插入
iptables -D 删除
查看对应表所有链上的规则:
# iptables -t [表名] -L [链名] -nv --line
# iptables -t [表名] -nvL --line
你可以使用规则的序号做删除,但是你也可以根据 执行 iptables -A 或者 iptables -I 的命令改为 iptables -D 删除
如果你想要删除一条规则,但不想通过规则的序列号来指定,你可以使用 -D 选项后跟规则的匹配条件来删除。
需要注意的是,使用 -D 选项删除规则时,匹配条件必须足够具体,以便只删除你想要删除的规则,避免误删其他规则。如果你的匹配条件过于宽泛,可能会导致不想删除的规则也被删除。
如果你只是想修改规则而不是删除,可以使用 -R(替换)选项来根据序列号修改规则,或者使用 -I(插入)选项在指定位置添加新规则。
四、案例实战
案例1: 阻止访问某个网站(百度)
![](https://img.haomeiwen.com/i12979420/4a2dab0aceebb451.png)
操作 OUPUT链:
![](https://img.haomeiwen.com/i12979420/08a2aaf1e8e44b46.png)
![](https://img.haomeiwen.com/i12979420/4e5f757a283b5792.png)
操作INPUT链:
![](https://img.haomeiwen.com/i12979420/0fd61a2e2ed197a5.png)
案例2: 访问百度,拦截到nginx
![](https://img.haomeiwen.com/i12979420/2dfe998f51c9d176.png)
![](https://img.haomeiwen.com/i12979420/3e99684b1c39247e.png)
操作 OUTPUT链:
![](https://img.haomeiwen.com/i12979420/f4de61f34949c692.png)
如果我们尝试操作 POSTROUTING链,你会发现 POSTROUTING 只能做源地址(ip+port)转换,不能做目的地址转换
同理, PREROUTING链只能做目的地址转换(ip+port),不能做源地址转换。
你都出去了(路由后),我就无法限制你去哪了 ,但是一开始可以限制你只能从哪里来
你都来了(路由前),我就无法限制你一定要从哪里来,但是可以限制你之后去哪里
![](https://img.haomeiwen.com/i12979420/56e703bac5965dbd.png)
![](https://img.haomeiwen.com/i12979420/1e9a91413715ec37.png)
![](https://img.haomeiwen.com/i12979420/661ff82012ce3779.png)
案例3: 禁止主机B远程SSH主机A
![](https://img.haomeiwen.com/i12979420/b8bd316c20cf50a3.png)
操作INPUT链:
![](https://img.haomeiwen.com/i12979420/00773870ea77ee8e.png)
![](https://img.haomeiwen.com/i12979420/80c468443534b4ad.png)
-j DROP 直接丢弃,不给恢复
-j REJECT直接拒绝,给个回应
![](https://img.haomeiwen.com/i12979420/fa8de08582d7fced.png)
![](https://img.haomeiwen.com/i12979420/5d1d97215a1a27c8.png)
操作OUTPUT链:
![](https://img.haomeiwen.com/i12979420/d641ebe9166178f5.png)
![](https://img.haomeiwen.com/i12979420/2c984473a06b9811.png)
案例4: 主机C通过主机A访问外网
![](https://img.haomeiwen.com/i12979420/a226e5984b2cd45a.png)
1.将C的网管设置为A
![](https://img.haomeiwen.com/i12979420/0202001b9ec13c1b.png)
![](https://img.haomeiwen.com/i12979420/81c60e8c51637bf0.png)
-
在A开启路由转发
image.png
image.png
-
A上FORWARD 默认策略是DROP
![](https://img.haomeiwen.com/i12979420/72023feb46ba061f.png)
![](https://img.haomeiwen.com/i12979420/30d2b576811bf97c.png)
五、 参考
本期视频希望通过四个案例,帮助大家更好的学习iptables
https://www.bilibili.com/video/BV1dw411J7Qk
朱双印iptables专栏
https://www.zsythink.net/archives/category/%e8%bf%90%e7%bb%b4%e7%9b%b8%e5%85%b3/iptables/page/2
https://www.zsythink.net/archives/category/%e8%bf%90%e7%bb%b4%e7%9b%b8%e5%85%b3/iptables/
网友评论