Debian防火墙自动化管理实现方法
ufw是Debian默认推荐的简化防火墙管理工具,通过命令行提供直观的规则配置,支持自动持久化规则。
sudo apt update && sudo apt install ufw # 安装ufw
sudo ufw enable # 启用ufw(默认拒绝所有入站,允许所有出站)
#!/bin/bash
sudo ufw allow 22/tcp # 允许SSH
sudo ufw allow 80/tcp # 允许HTTP
sudo ufw allow 443/tcp # 允许HTTPS
sudo ufw reload # 重新加载规则(无需重启服务)
/etc/ufw/ufw.conf
,启用后会随系统启动自动加载,无需额外操作。firewalld采用“区域(Zone)”和“服务(Service)”模型,支持动态更新规则(无需重启服务),适合复杂环境。
sudo apt install firewalld # 安装firewalld
sudo systemctl start firewalld # 启动服务
sudo systemctl enable firewalld # 开机自启
#!/bin/bash
sudo firewall-cmd --set-default-zone=public # 设置默认区域为public
sudo firewall-cmd --zone=public --add-service=ssh --permanent # 允许SSH(永久生效)
sudo firewall-cmd --zone=public --add-service=http --permanent # 允许HTTP
sudo firewall-cmd --zone=public --add-service=https --permanent # 允许HTTPS
sudo firewall-cmd --reload # 重新加载配置(使永久规则生效)
--permanent
参数的规则会保存到/etc/firewalld/zones/public.xml
,firewall-cmd --reload
可自动加载这些规则。nftables是Debian 10+的默认防火墙框架,支持更高效的规则管理和脚本化配置。
sudo apt install nftables # 安装nftables
sudo systemctl start nftables # 启动服务
sudo systemctl enable nftables # 开机自启
#!/bin/bash
sudo nft flush ruleset # 清除所有现有规则
sudo nft add table ip filter # 创建filter表
sudo nft add chain ip filter input { type filter hook input priority 0 \; } # 创建input链
sudo nft add rule ip filter input ct state established,related accept # 允许已建立连接
sudo nft add rule ip filter input iif lo accept # 允许本地回环
sudo nft add rule ip filter input tcp dport 22 accept # 允许SSH
sudo nft add rule ip filter input tcp dport 80 accept # 允许HTTP
sudo nft add rule ip filter input tcp dport 443 accept # 允许HTTPS
sudo nft list ruleset > /etc/nftables.conf # 保存规则到配置文件
/etc/nftables.conf
后,systemctl enable nftables
会确保开机自动加载。编写Shell脚本可批量执行防火墙配置命令,适用于大规模环境或频繁变更场景。
#!/bin/bash
# 清除旧规则
iptables -F
iptables -X
# 设置默认策略(拒绝所有入站,允许所有出站)
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
# 允许本地回环和已建立连接
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# 允许SSH、HTTP、HTTPS
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# 保存规则
iptables-save > /etc/iptables/rules.v4
chmod +x firewall_script.sh
sudo ./firewall_script.sh
/etc/network/if-pre-up.d/
目录(如/etc/network/if-pre-up.d/firewall
),并赋予执行权限,系统启动时会自动执行脚本。对于多台Debian服务器,可使用Ansible、Puppet、Chef等自动化工具,通过编写Playbook或Manifest实现防火墙规则的集中配置与同步。
firewall.yml
):- hosts: debian_servers
become: yes
tasks:
- name: Install ufw
apt:
name: ufw
state: present
- name: Enable ufw
command: ufw enable
- name: Allow SSH
ufw:
rule: allow
port: 22
proto: tcp
- name: Allow HTTP
ufw:
rule: allow
port: 80
proto: tcp
运行Playbook:ansible-playbook -i inventory firewall.yml
该方式可实现“一次编写,多处执行”,大幅减少重复劳动。