Linux 防火墙配置教程:Iptables 完全使用手册
Linux Iptables 使用教程
一、简介
iptables
是 Linux 内核的一个防火墙工具,用于设置、维护和检查网络流量的规则。通过 iptables
,你可以过滤进出系统的数据包,从而控制流量、增强系统的安全性、以及执行 NAT(网络地址转换)等任务。
iptables
的基本工作原理是通过规则链(Chains)和规则(Rules)来进行数据包的过滤和操作。它包含了三种默认的规则链:
- INPUT:处理所有进入本地机器的流量。
- OUTPUT:处理从本地机器发出的流量。
- FORWARD:处理经过本地机器转发的流量(通常用于路由器配置)。
每个链包含一组规则,当数据包进入链时,它会按顺序检查每一条规则,直到找到匹配的规则或者直到所有规则都被检查完毕。
二、安装和基本配置
在大多数 Linux 系统中,iptables
默认已经安装。可以通过以下命令来检查 iptables
是否已安装:
bash
sudo iptables --version
如果未安装,通常可以通过包管理工具来安装:
- 在基于 Debian 的系统上(如 Ubuntu):
bash
sudo apt update
sudo apt install iptables
- 在基于 Red Hat 的系统上(如 CentOS、Fedora):
bash
sudo yum install iptables
三、基本概念和命令
1. 查看当前规则
使用 iptables -L
命令查看当前配置的规则。默认情况下,它会列出所有链的规则:
bash
sudo iptables -L
2. 查看规则链的详细信息
为了查看详细的计数信息和规则详细内容,可以使用 -v
参数:
bash
sudo iptables -L -v
3. 查看规则链及其内容的数字格式
有时你可能需要查看数字格式的输出,例如 IP 地址和端口号而非名称,使用 -n
参数:
bash
sudo iptables -L -n
4. 删除所有规则
如果想清除所有的规则,可以使用以下命令:
bash
sudo iptables -F
这会删除所有链中的所有规则。
5. 查看 NAT 表的规则
iptables
还可以处理 NAT(网络地址转换)。要查看 NAT 表中的规则,可以使用:
bash
sudo iptables -t nat -L
四、配置规则
1. 设置默认策略
在 iptables
中,默认策略决定了如果数据包没有匹配任何规则时的处理方式。可以使用以下命令设置默认策略:
- 设置默认策略为 ACCEPT(接受所有数据包):
bash
sudo iptables -P INPUT ACCEPT
sudo iptables -P OUTPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
- 设置默认策略为 DROP(丢弃所有数据包):
bash
sudo iptables -P INPUT DROP
sudo iptables -P OUTPUT DROP
sudo iptables -P FORWARD DROP
2. 添加新规则
使用 iptables -A
命令向某个链(如 INPUT)中添加规则。例如,添加一个允许通过 SSH 端口(默认端口 22)的规则:
bash
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
这条规则表示:
- -A INPUT
:添加规则到 INPUT 链。
- -p tcp
:过滤 TCP 协议。
- --dport 22
:目标端口为 22(即 SSH)。
- -j ACCEPT
:如果数据包匹配规则,则接受它。
3. 删除规则
要删除规则,可以使用 iptables -D
命令。例如,删除刚才添加的 SSH 规则:
bash
sudo iptables -D INPUT -p tcp --dport 22 -j ACCEPT
4. 保存规则
默认情况下,iptables
的规则在系统重启后会丢失。为了使规则在重启后仍然有效,可以将规则保存到配置文件中:
- 在 Ubuntu/Debian 系统中,可以使用
iptables-persistent
工具:
bash
sudo apt install iptables-persistent
sudo netfilter-persistent save
- 在 Red Hat 系统中,可以使用
service iptables save
:
bash
sudo service iptables save
5. 临时禁用和启用防火墙
如果你需要暂时禁用防火墙,可以使用以下命令:
- 禁用
iptables
:
bash
sudo systemctl stop iptables
- 启用
iptables
:
bash
sudo systemctl start iptables
五、常见操作示例
1. 允许某个 IP 地址访问
假设你希望允许 IP 地址 192.168.1.100
访问本地服务器的所有端口,可以使用以下命令:
bash
sudo iptables -A INPUT -s 192.168.1.100 -j ACCEPT
2. 阻止某个 IP 地址访问
如果你希望阻止某个 IP 地址(如 192.168.1.100
)访问本地服务器的所有端口,可以使用以下命令:
bash
sudo iptables -A INPUT -s 192.168.1.100 -j DROP
3. 限制端口访问频率
可以通过 iptables
实现对特定端口的访问频率限制。例如,限制每分钟最多允许 5 次对 SSH(端口 22)的访问:
bash
sudo iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m limit --limit 5/minute -j ACCEPT
4. 转发流量(NAT)
在多网络环境中,常需要设置 NAT 转发规则。例如,设置一个简单的端口转发,将外部访问 8080 端口的请求转发到本地 80 端口:
bash
sudo iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.10:80
sudo iptables -A FORWARD -p tcp --dport 80 -d 192.168.1.10 -j ACCEPT
这两条规则表示:
1. 第一个规则通过 NAT 转发流量。
2. 第二个规则允许将数据包从 FORWARD 链传递到指定 IP 地址。
5. 设置状态追踪
iptables
支持基于数据包状态(如 NEW, ESTABLISHED 等)来进行过滤。例如,允许已经建立的连接继续通信:
bash
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
六、总结
通过 iptables
,你可以灵活地配置和管理 Linux 系统的防火墙。掌握基本的命令和规则设置方法,可以帮助你实现精细的流量控制、增强安全性、以及满足复杂的网络需求。常见的操作包括添加、删除、修改规则,保存规则以及设置默认策略等。
需要注意的是,iptables
配置需要谨慎操作,错误的规则可能导致网络中断或安全隐患。在实际生产环境中,建议定期备份配置,并进行充分测试。