对于 iptables 学习,反复看过 man iptables
命令,但是缺乏归纳总结,不用就忘了。现在好了,直接让 ChatGPT 帮我画一些系统框图辅助记忆。
Q:帮我用 Mermaid 画一个系统框图描述 iptables 所有 Chain 的处理顺序,并且描述其生效范围。
graph LR
INPUT --> PREROUTING
PREROUTING --> ROUTING
ROUTING --> FORWARD
FORWARD --> POSTROUTING
POSTROUTING --> OUTPUT
这个图表演示了 iptables 中 5 个 Chain 处理的先后关系,其中:
- INPUT Chain 用于处理进入本地计算机的网络数据包;
- PREROUTING Chain 用于处理数据包路由前的操作,例如修改目标 IP 地址;
- ROUTING Chain 用于处理数据包的路由过程,例如根据路由表进行转发;
- FORWARD Chain 用于处理转发给其他计算机的网络数据包;
- POSTROUTING Chain 用于处理数据包路由后的操作,例如修改源 IP 地址;
- OUTPUT Chain 用于处理从本地计算机发出的网络数据包;
Q:再帮我给每一个 Chain 规则生成一个详细的命令。
INPUT Chain:允许来自特定 IP 地址的 SSH 连接
iptables -A INPUT -p tcp -s 192.168.1.100 --dport 22 -j ACCEPT
PREROUTING Chain:将来自特定 IP 地址的数据包重定向到另一台计算机
iptables -t nat -A PREROUTING -s 192.168.1.100 -j DNAT --to-destination 192.168.1.200
ROUTING Chain:将来自特定 IP 地址的数据包标记为优先级 1
iptables -t mangle -A PREROUTING -s 192.168.1.100 -j MARK --set-mark 1
FORWARD Chain:允许从特定网卡转发特定端口的数据包
iptables -A FORWARD -i eth0 -o eth1 -p tcp --dport 80 -j ACCEPT
POSTROUTING Chain:将来自特定 IP 地址的数据包修改为指定 IP 地址并从指定网卡发出
iptables -t nat -A POSTROUTING -s 192.168.1.100 -o eth0 -j SNAT --to-source 10.0.0.1
OUTPUT Chain:允许从本地计算机发出到特定 IP 地址和端口的数据包
iptables -A OUTPUT -p tcp -d 192.168.1.100 --dport 80 -j ACCEPT
Q:再帮我用 Mermaid 描述下 Table 和 Chain 之间的系统关系。
graph LR
subgraph Table_Chain_Relationships
Filter_Table -->|Table| INPUT
Filter_Table -->|Table| OUTPUT
Filter_Table -->|Table| FORWARD
Mangle_Table -->|Table| PREROUTING
Mangle_Table -->|Table| INPUT
Mangle_Table -->|Table| OUTPUT
Mangle_Table -->|Table| FORWARD
Mangle_Table -->|Table| POSTROUTING
Raw_Table -->|Table| PREROUTING
Raw_Table -->|Table| OUTPUT
Security_Table -->|Table| INPUT
Security_Table -->|Table| OUTPUT
Security_Table -->|Table| FORWARD
NAT_Table -->|Table| PREROUTING
NAT_Table -->|Table| OUTPUT
NAT_Table -->|Table| POSTROUTING
end
还不快抢沙发