在Debian系统中,首先需要确保iptables已安装。通过以下命令安装:
sudo apt update && sudo apt install iptables
安装完成后,即可使用iptables命令配置防火墙规则。
配置前建议先查看现有规则,避免冲突:
sudo iptables -L -n -v
-L:列出所有链的规则;-n:以数字形式显示IP和端口(避免DNS解析延迟);-v:显示详细信息(如数据包计数、字节统计)。默认策略决定了未匹配任何规则的数据包的处理方式。生产环境中建议收紧默认策略:
sudo iptables -P INPUT DROP # 拒绝所有入站流量(默认拒绝)
sudo iptables -P FORWARD DROP # 拒绝所有转发流量(若无需转发)
sudo iptables -P OUTPUT ACCEPT # 允许所有出站流量(本地发起的连接正常)
⚠️ 注意:设置INPUT DROP后,需确保后续添加了允许本地回环、SSH等必要服务的规则,否则可能导致无法远程登录。
本地回环(lo)用于本机内部通信(如数据库、Web服务等),必须允许:
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A OUTPUT -o lo -j ACCEPT
允许已经建立的连接及相关数据包通过(避免中断现有会话):
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
--ctstate ESTABLISHED表示已建立的连接,RELATED表示关联的连接(如FTP数据传输)。
若需允许某台设备(如管理机)访问服务器,可添加针对性规则:
sudo iptables -A INPUT -s 192.168.1.100 -j ACCEPT # 允许192.168.1.100的所有流量
若仅需允许特定端口(如SSH),可结合协议和端口:
sudo iptables -A INPUT -p tcp --dport 22 -s 192.168.1.100 -j ACCEPT # 仅允许192.168.1.100访问SSH
根据需求开放常用服务端口(如HTTP、HTTPS):
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT # HTTP(端口80)
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT # HTTPS(端口443)
建议结合--ctstate NEW,ESTABLISHED限制为新建和已建立的连接,提升安全性:
sudo iptables -A INPUT -p tcp --dport 80 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
若需拒绝某台设备或某个端口的访问,可使用DROP(静默丢弃,无响应)或REJECT(发送拒绝响应):
sudo iptables -A INPUT -s 192.168.1.101 -j DROP # 拒绝192.168.1.101的所有流量
sudo iptables -A INPUT -p tcp --dport 22 -j REJECT # 拒绝所有SSH连接(明确拒绝)
⚠️ 注意:拒绝规则应放在允许规则之后,避免误拦截合法流量。
iptables规则默认临时生效(重启系统或iptables服务后丢失),需通过以下方式持久化:
安装工具后,规则会自动保存到/etc/iptables/rules.v4(IPv4)和/etc/iptables/rules.v6(IPv6):
sudo apt install iptables-persistent
安装过程中会提示“是否保存当前规则”,选择“是”即可。
手动保存/恢复规则:
sudo netfilter-persistent save # 手动保存
sudo netfilter-persistent reload # 手动恢复
若未使用iptables-persistent,可通过以下命令手动保存:
sudo iptables-save > /etc/iptables/rules.v4 # IPv4
sudo ip6tables-save > /etc/iptables/rules.v6 # IPv6
恢复时使用iptables-restore命令读取文件即可。
若需删除某条已添加的规则,可使用-D选项(需指定完整规则):
sudo iptables -D INPUT -s 192.168.1.100 -j ACCEPT # 删除允许192.168.1.100的规则
若需清空所有规则(恢复初始状态),可使用:
sudo iptables -F # 清空所有链的规则
sudo iptables -X # 删除自定义链(若有)
⚠️ 注意:删除所有规则后,需重新设置默认策略和必要规则,否则可能导致服务器无法访问。
INPUT DROP后,若未允许本地回环或SSH,可能导致无法远程登录,建议在测试环境中验证规则后再应用到生产环境。DROP再设置ACCEPT,合法流量可能被拦截。建议将具体允许规则放在前面,默认拒绝规则放在最后。/etc/iptables/rules.v4),避免误操作导致规则丢失。可使用cp命令或编写备份脚本实现。ufw(Uncomplicated Firewall),它是iptables的前端工具,简化了配置流程。