iptables是linux内核级防火墙工具,通过表和链管理网络流量;Filter表控制数据包过滤,nat表处理地址转换,mangle表修改数据包;常用链包括input、OUTPUT和FORWARD;可通过-A添加规则,-F清除规则,-L查看规则;需使用iptables-save保存规则以持久化;支持创建自定义链如ssh_FILTER分类管理;规则按顺序匹配,需注意默认策略防止误锁。
Linux 中的 iptables 是一个强大的防火墙工具,用于配置内核级的数据包过滤规则。它通过规则链(chains)来管理网络流量,控制进出系统的数据包。掌握 iptables 的基本结构和常用命令,是系统管理员保障服务器安全的基础。
理解 iptables 的规则链和表结构
iptables 的核心是“表(tables)”和“链(chains)”。不同的表用于处理不同类型的规则,每个表中包含若干预定义或自定义的链。
常用表包括:
- filter 表:最常用的表,用于决定数据包是否被允许通过。包含 INPUT、OUTPUT 和 FORWARD 链。
- nat 表:用于网络地址转换,如端口转发。包含 PREROUTING、POSTROUTING 和 OUTPUT 链。
- mangle 表:用于修改数据包的特定字段,较少直接使用。
常见内置链说明:
- INPUT:处理进入本机的数据包。
- OUTPUT:处理从本机发出的数据包。
- FORWARD:处理经过本机转发的数据包(适用于路由器或网关)。
添加和管理基本防火墙规则
使用 iptables 命令可以添加、删除和查看规则。规则按顺序匹配,一旦匹配就执行对应动作。
常用操作示例:
- 允许本机访问外部 http 和 https 服务:
iptables -A OUTPUT -p tcp –dport 80 -j ACCEPT
iptables -A OUTPUT -p tcp –dport 443 -j ACCEPT - 允许外部访问本机的 SSH 服务(端口 22):
iptables -A INPUT -p tcp –dport 22 -m state –state NEW -j ACCEPT - 拒绝所有其他未明确允许的入站连接:
iptables -P INPUT DROP - 清除所有规则(慎用):
iptables -F - 查看当前规则列表:
iptables -L -n -v
保存和持久化规则
iptables 规则默认在重启后丢失,必须手动保存。
在不同发行版中保存方式略有不同:
- debian/ubuntu 系统:
安装 iptables-persistent 包并保存规则:
sudo iptables-save > /etc/iptables/rules.v4 - centos/RHEL 系统:
使用命令保存:
service iptables save
或:
iptables-save > /etc/sysconfig/iptables
使用自定义链提高管理效率
当规则较多时,可以创建自定义链来分类管理,例如专门处理 SSH 或 Web 流量。
示例:创建一个名为 SSH_FILTER 的链
- 创建链:
iptables -N SSH_FILTER - 添加规则到自定义链:
iptables -A SSH_FILTER -s 192.168.1.100 -j ACCEPT
iptables -A SSH_FILTER -j DROP - 将 INPUT 链跳转到自定义链:
iptables -A INPUT -p tcp –dport 22 -j SSH_FILTER
这种方式便于后期维护和批量调整策略。
基本上就这些。iptables 虽然语法略显复杂,但只要理解链和表的关系,结合实际需求逐步配置,就能构建起基本的安全防护体系。注意规则顺序和默认策略设置,避免误锁自己。不复杂但容易忽略。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END