iptables 详解


Iptables 是用于设置、维护和检查 Linux 内核中的 IPv4 和 IPv6 包过滤规则表和网络地址转换的一个命令行工具,位于用户空间。

Netfilter 才是真正起作用的内核模块,位于内核空间。

1、链表的概念

在了解链表概念之前,先看下面报文在主机中的流向图。

假设我们要访问主机中的web服务,那么我们的请求经过网卡后,流向内核空间,先经过PREROUTING链,再经过INPUT链,到达用户空间的web服务。

web服务回答我们的请求,则先经过OUTPUT链,再经过POSTROUTING链到达我们。

1.1、表(table)的概念

表名 作用
filter 负责过滤功能,防火墙
nat network address translation,网络地址转换功能
mangle 拆解报文,做出修改,并重新封装 的功能
raw 关闭nat表上启用的连接追踪机制

 1.2、链(chain)的概念

链名 解释 可以包含的表(优先级由前到后)
PREROUTING 路由前 raw,mangle,nat
INPUT 输入 mangle,nat,filter
OUTPUT 输出 raw,mangle,nat,filter
FORWARD 转发 mangle,filter
POSTROUTING 路由后 mangle,nat

1.3、处理动作(target)

ACCEPT:允许数据包通过。

DROP:直接丢弃数据包,不给任何回应信息,这时候客户端会感觉自己的请求泥牛入海了,过了超时时间才会有反应。

REJECT:拒绝数据包通过,必要时会给数据发送端一个响应的信息,客户端刚请求就会收到拒绝的信息。

SNAT:源地址转换,解决内网用户用同一个公网地址上网的问题。

MASQUERADE:是SNAT的一种特殊形式,适用于动态的、临时会变的ip上。

DNAT:目标地址转换。

REDIRECT:在本机做端口映射。

LOG:在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则,也就是说除了记录以外不对数据包做任何其他操作,仍然让下一条规则去匹配。

2、匹配条件

2.1、规则查询

  • 查看对应表的所有规则,-t选项指定要操作的表,省略"-t 表名"时,默认表示操作filter表,-L表示列出规则,即查看规则。
iptables -t 表名 -L

 

  • 查看指定表的指定链中的规则。
iptables -t 表名 -L 链名

 

  • 查看指定表的所有规则,并且显示更详细的信息(更多字段),-v表示verbose,表示详细的,冗长的,当使用-v选项时,会显示出"计数器"的信息,由于上例中使用的选项都是短选项,所以一般简写为iptables -t 表名 -vL
iptables -t 表名 -v -L

 

  • 表示查看表的所有规则,并且在显示规则时,不对规则中的IP或者端口进行名称反解,-n选项表示不解析IP地址。
iptables -t 表名 -n -L

 

  • 表示查看表的所有规则,并且显示规则的序号,--line-numbers选项表示显示规则的序号,注意,此选项为长选项,不能与其他短选项合并,不过此选项可以简写为--line,注意,简写后仍然是两条横杠,仍然是长选项。
iptables --line-numbers -t 表名 -L

 

  • 表示查看表中的所有规则,并且显示更详细的信息(-v选项),不过,计数器中的信息显示为精确的计数值,而不是显示为经过可读优化的计数值,-x选项表示显示计数器的精确值。
iptables --line -t filter -nvxL

 

2.2、规则管理

2.2.1、添加规则

我的这篇文章汇总了一些常见的匹配条件,iptables之匹配条件

  • 在指定表的指定链的尾部添加一条规则,-A选项表示在对应链的末尾添加规则,省略-t选项时,表示默认操作filter表中的规则
命令语法:iptables -t 表名 -A 链名 匹配条件 -j 动作
示例:iptables -t filter -A INPUT -s 192.168.1.146 -j DROP

 

  • 在指定表的指定链的首部添加一条规则,-I选型表示在对应链的开头添加规则
命令语法:iptables -t 表名 -I 链名 匹配条件 -j 动作
示例:iptables -t filter -I INPUT -s 192.168.1.146 -j ACCEPT

 

  • 在指定表的指定链的指定位置添加一条规则
命令语法:iptables -t 表名 -I 链名 规则序号 匹配条件 -j 动作
示例:iptables -t filter -I INPUT 5 -s 192.168.1.146 -j REJECT

 

  • 设置指定表的指定链的默认策略(默认动作)
命令语法:iptables -t 表名 -P 链名 动作
示例:iptables -t filter -P FORWARD ACCEPT

 

2.2.2、删除规则

  • 按照规则序号删除规则,删除指定表的指定链的指定规则,-D选项表示删除对应链中的规则。
命令语法:iptables -t 表名 -D 链名 规则序号
示例:iptables -t filter -D INPUT 3

 

  • 按照具体的匹配条件与动作删除规则,删除指定表的指定链的指定规则。
命令语法:iptables -t 表名 -D 链名 匹配条件 -j 动作
示例:iptables -t filter -D INPUT -s 192.168.1.146 -j DROP

 

  • 删除指定表的指定链中的所有规则,-F选项表示清空对应链中的规则
命令语法:iptables -t 表名 -F 链名
示例:iptables -t filter -F INPUT

 

  • 删除指定表中的所有规则
命令语法:iptables -t 表名 -F
示例:iptables -t filter -F

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM