Linux基础——iptables常规操作
一、iptables概述
iptables 的核心是四表五链,
四表:raw, connecting tracking, mangle, nat
五链:PREOUTING, INPUT, FORWAED, OUTPUT, POSTROUTING
每种表可以包含的链种类
| Tables | PREROUTING | INPUT | FORWARD | OUTPUT | POSTROUTING |
|---|---|---|---|---|---|
| raw | * | * | |||
| mangle | * | * | * | * | * |
| nat | * | * | * | ||
| filter | * | * | * |
- filter 表:这是默认的表,用于处理数据包的过滤(接受或拒绝)。它用于定义防火墙规则,控制流入和流出的流量。
- nat 表:用于网络地址转换(NAT),比如源地址转换(SNAT)和目的地址转换(DNAT)。它主要用于修改数据包的 IP 地址。
- mangle 表:用于修改数据包的各个字段(如TTL、TOS、标记等)。它比
filter表更低级,主要用于数据包的标记和处理,适合一些流量控制和 QoS 配置。 - raw 表:主要用于在连接追踪(connection tracking)之前对数据包进行处理。它通常用于禁用连接跟踪功能,在某些特定场景下可能会提高效率。
总结:表是链的集合,有什么样的链,就是什么样的表.
iptables它主要作用于路由决策阶段,也就是流程图中 PREROUTING 那里.
大概流程如下
1.数据包进入内核网络栈:
- 首先经过
iptables的 PREROUTING 链,可能被修改(如 DNAT)。 - 接着,进入路由表进行路由决策。
2.路由决策:
- 根据路由表的规则,决定数据包是送到本机、转发给其他主机,还是丢弃。
3.进一步处理:
- 如果是本机流量,会进入 INPUT 链 处理。
- 如果需要转发,会进入 FORWARD 链。
- 出站流量会经过 OUTPUT 链 和 POSTROUTING 链。


二、iptables基本操作
1、新增源主机192.168.177.142流量访问harbor主机22端口 [root@harbor ~]# iptables -I INPUT -s 192.168.177.142 -p tcp -m multiport --dport 22 -j ACCEPT -m comment --comment "permit 22 port" 2、查看添加的策略 [root@harbor ~]# iptables -nvL INPUT --line-numbers Chain INPUT (policy ACCEPT 112 packets, 7652 bytes) num pkts bytes target prot opt in out source destination 1 0 0 ACCEPT tcp -- * * 192.168.177.142 0.0.0.0/0 multiport dports 22 /* permit 22 port */ 2 646 48965 LIBVIRT_INP all -- * * 0.0.0.0/0 0.0.0.0/0 3、主机192.168.177.142 ssh访问harbor节点,第一条策略匹配到8个数据包1861字节 [root@harbor ~]# iptables -nvL INPUT --line-numbers Chain INPUT (policy ACCEPT 120 packets, 8244 bytes) num pkts bytes target prot opt in out source destination 1 8 1861 ACCEPT tcp -- * * 192.168.177.142 0.0.0.0/0 multiport dports 22 /* permit 22 port */ 2 654 49557 LIBVIRT_INP all -- * * 0.0.0.0/0 0.0.0.0/0 4、ssh验证通过后,检查策略 [root@harbor ~]# iptables -nvL INPUT --line-numbers Chain INPUT (policy ACCEPT 130 packets, 9108 bytes) num pkts bytes target prot opt in out source destination 1 25 4109 ACCEPT tcp -- * * 192.168.177.142 0.0.0.0/0 multiport dports 22 /* permit 22 port */ 2 664 50421 LIBVIRT_INP all -- * * 0.0.0.0/0 0.0.0.0/0 删除策略 1、检查INPUT入方向删除策略的编号,例如:第一条chain num:1 [root@harbor ~]# iptables -nvL INPUT --line-numbers Chain INPUT (policy ACCEPT 561 packets, 91616 bytes) num pkts bytes target prot opt in out source destination 1 242 19161 ACCEPT tcp -- * * 192.168.177.142 0.0.0.0/0 multiport dports 22 /* permit 22 port */ 2 1095 133K LIBVIRT_INP all -- * * 0.0.0.0/0 0.0.0.0/0 2、删除INPUT入方向第一条策略,例如:第一条chain num:1 [root@harbor ~]# iptables -D INPUT 1 3、检查策略是否已删除 [root@harbor ~]# iptables -nvL INPUT --line-numbers Chain INPUT (policy ACCEPT 6 packets, 384 bytes) num pkts bytes target prot opt in out source destination 1 1140 136K LIBVIRT_INP all -- * * 0.0.0.0/0 0.0.0.0/0
参考
https://ipset.netfilter.org/iptables.man.html
https://docs.redhat.com/zh-cn/documentation/red_hat_enterprise_linux/6/html/cluster_administration/s2-iptables_firewall-ca
https://zhuanlan.zhihu.com/p/8737839453
稳步前行,只争朝夕。
浙公网安备 33010602011771号