Linux基础——iptables常规操作

一、iptables概述

iptables 的核心是四表五链,

四表:raw, connecting tracking, mangle, nat
五链:PREOUTING, INPUT, FORWAED, OUTPUT, POSTROUTING

每种表可以包含的链种类


TablesPREROUTINGINPUTFORWARDOUTPUTPOSTROUTING
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 链。
 

image

 

image

 

二、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

 

posted on 2025-10-24 18:02  gkhost  阅读(0)  评论(0)    收藏  举报

导航