iptables 详解
概述
iptables
是一个在用户空间运行的应用软件,通过控制Linux内核netfilter
模块来管理网络数据包的流动与转发。在大部分Linux系统上面,iptables
是使用/usr/sbin/iptables
来操作。通常,iptables
都需要内核级的模块来配合运行,主要是在内核层级里面通过iptables
API 来执行功能的模块。由于相关操作上的需要,iptables
的操作需要用到超级用户的权限。
iptables 结构图
+--------------------+ +--------------------+
| system-config-firewall | | firewall-config |
+---------+----------+ +---------+----------+
| |
| |
v v
+--------------------+ +--------------------+
| iptables service | | firewall-cmd |
+---------+----------+ +---------+----------+
| |
v v
+----------------------------+ +------------------------+
| iptables command | | firewalld daemon&service |
+---------------+------------+ +---------+----------+
| |
v v
+----------------------------+ +------------------------+
| kernel netfilter | | kernel netfilter |
+----------------------------+ +------------------------+
iptables与其他防火墙服务及工具的关系。
iptables 语法
iptables [-t 表名] 命令选项 链名 条件选项 [-j 控制类型]
- 若不指定表名,默认使用
filter
表。 - 命令选项、链名、控制类型必须大写,其他选项小写。
控制类型
- ACCEPT: 允许数据包通过
- REJECT: 拒绝并返回信息
- DROP: 丢弃数据包,无反馈信息
- LOG: 记录日志,并传递到下一条规则
- SNAT: 源地址转换
- DNAT: 目标地址转换
- MASQUERADE: 地址伪装
- REDIRECT: 重定向数据包
常用命令选项
- -A: 添加规则到链末尾
- -I: 插入规则到链的指定位置(默认第一条)
- -L: 列出所有规则
- -D: 删除指定规则
- -F: 清空链中所有规则
- -P: 设置默认策略(仅适用于
ACCEPT
或DROP
) - -R: 替换规则
- -X: 删除用户自定义链
- -N: 新建自定义链
- -n: 以数字格式显示
- --line-number: 显示规则编号
条件选项
通用匹配:
-s
: 源地址-d
: 目标地址-p
: 协议-i
: 入接口-o
: 出接口!
: 取反
隐含匹配:
--sport
: 源端口--dport
: 目标端口--tcp-flags
: TCP 标记--icmp-type
: ICMP 类型(如echo-request
和echo-reply
)
开启转发功能
永久生效:
# vim /etc/sysctl.conf net.ipv4.ip_forward=1 # sysctl -p
临时生效:
# sysctl -w net.ipv4.ip_forward=1 # echo "1" > /proc/sys/net/ipv4/ip_forward
显示配置
多端口匹配:
-m multiport --sports 源端口列表 -m multiport --dports 目标端口列表
IP 范围匹配:
-m iprange --src-range IP范围
MAC 地址匹配:
-m mac --mac-source MAC地址
状态匹配:
-m state --state 连接状态
举例说明
查看防火墙规则
# iptables -nvL
插入一条规则,拒绝发送给本机使用的ICMP协议的数据包
# iptables -t filter -I INPUT -p icmp -j REJECT
允许 TCP 端口 25, 110, 143 的访问
# iptables -A INPUT -p tcp -m multiport --dport 25,110,143 -j ACCEPT
禁止源地址位于 192.168.1.100 到 192.168.1.200 之间的 TCP 数据包转发
# iptables -A FORWARD -p tcp -m iprange --src-range 192.168.1.100-192.168.1.200 -j DROP
删除 filter 表 INPUT 链中的第一条规则
# iptables -D INPUT 1
清空指定链中的所有防火墙规则
# iptables -F INPUT
清空 filter、nat、mangle 表中的所有规则
# iptables -F # iptables -t nat -F # iptables -t mangle -F
本文由mdnice多平台发布
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。