一、Linux系统下使用iptables
在Linux中,常用的防火墙工具是iptables。以下是一些基本的iptables命令,用于配置防火墙规则。
查看现有的iptables规则:
sudo iptables -L
清除所有现有的规则(慎用,可能导致服务不可用):
sudo iptables -F
允许特定端口(例如,允许TCP端口80):
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
拒绝来自特定IP的访问:
sudo iptables -A INPUT -s 123.123.123.123 -j DROP
# 假设要限制的IP段为192.168.1.0/24,你可以使用以下命令:
iptables -I INPUT -s 192.168.1.0/24 -j DROP
允许特定IP的访问:
sudo iptables -A INPUT -s 123.123.123.123 -j ACCEPT
保存规则,使其在重启后生效(可选,取决于发行版):
sudo iptables-save > /etc/iptables/rules.v4
或者在某些系统中,您可能需要使用iptables-persistent
:
sudo netfilter-persistent save
sudo netfilter-persistent reload
检查iptables服务状态(取决于发行版):
sudo systemctl status iptables
启动/停止/重启iptables服务
sudo systemctl start iptables
sudo systemctl stop iptables
sudo systemctl restart iptables
1. 基本概念
防火墙在做数据包过滤决定时,有一套遵循和组成的规则,这些规则存储在专用的数据包过滤表中,而这些表集成在 Linux 内核中。在数据包过滤表中,规则被分组放在我们所谓的链(chain)中。而netfilter/iptables IP 数据包过滤系统是一款功能强大的工具,可用于添加、编辑和移除规则。
虽然 netfilter/iptables IP 信息包过滤系统被称为单个实体,但它实际上由两个组件netfilter 和 iptables 组成。
netfilter 组件也称为内核空间(kernelspace),是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。
iptables 组件是一种工具,也称为用户空间(userspace),它使插入、修改和除去信息包过滤表中的规则变得容易。除非您正在使用 Red Hat Linux 7.1 或更高版本,否则需要下载该工具并安装使用它
- 表(Tables):iptables 定义了五个表,每个表用于处理不同类型的数据包。最常用的表是
filter
表,用于处理输入、输出和转发的数据包。 - 链(Chains):每个表包含几个内置链,用于处理特定类型的数据包。例如,
filter
表包含INPUT
、OUTPUT
和FORWARD
链。 - 规则(Rules):规则定义了数据包与链的匹配条件以及匹配后应采取的操作(如接受、拒绝或跳转到另一个链)。
- 目标(Targets):当数据包与规则匹配时,规则可以指定一个目标。常见的目标包括
ACCEPT
(接受数据包)、DROP
(丢弃数据包)和REJECT
(拒绝数据包并发送错误消息)。
2. 常用命令
-
查看规则:
iptables -L
:列出filter
表中的所有规则。iptables -L -t nat
:列出nat
表中的所有规则。-v
选项可以显示更详细的信息。
-
添加规则:
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
:在INPUT
链的末尾添加一条规则,允许 TCP 协议的 22 端口(SSH)的数据包。-A
表示追加到链的末尾,-I
可以用于在链的指定位置插入规则。
-
删除规则:
iptables -D INPUT -p tcp --dport 22 -j ACCEPT
:删除与指定条件匹配的规则。- 注意,删除规则时必须提供完整的匹配条件,否则无法正确删除。
-
修改规则:iptables 没有直接的修改命令,但可以通过删除旧规则并添加新规则来实现修改。
-
保存和恢复规则:
service iptables save
(或iptables-save > /etc/sysconfig/iptables
):将当前规则保存到文件中。service iptables restart
(或iptables-restore < /etc/sysconfig/iptables
):从文件中恢复规则。- 注意:不是所有的 Linux 发行版都使用相同的命令来保存和恢复 iptables 规则。
3. 复杂用法
- 匹配多个条件:使用多个
-p
、--dport
、--source
等选项可以定义更复杂的匹配条件。 - 使用通配符:在匹配源地址或目标地址时,可以使用通配符(如
192.168.1.*
)来匹配多个地址。 - 使用扩展匹配:iptables 还支持扩展匹配模块,如
multiport
、string
等,用于执行更复杂的匹配操作。 - 使用自定义链:可以创建自定义链并在其他链中引用它们,以实现更复杂的逻辑。
4. 注意事项
- 在修改 iptables 规则之前,请务必备份当前的规则集。
- 谨慎使用
DROP
和REJECT
目标,因为它们会阻止数据包通过系统并可能导致连接问题。 - 使用
-v
或--verbose
选项可以查看更详细的规则信息。 - 不同的 Linux 发行版可能对 iptables 的使用略有差异,因此请参考特定发行版的文档以获取更多信息。