本文目录导读:

是的,实用脚本完全可以自动配置防火墙策略,这正是运维自动化的核心场景之一,通过脚本,你可以将重复、易出错的手动操作(如添加规则、备份、检查状态)变成可重复、可追溯的自动化流程。
具体实现方式取决于你使用的防火墙类型(Linux iptables/nftables、Windows Defender Firewall、或硬件防火墙如华为、Cisco等),下面提供几个最实用的脚本范例。
Linux服务器(iptables/nftables)
这是最常见的场景,以下是一个bash脚本,用于自动配置一套“白名单”策略:只允许特定IP访问SSH,开放Web服务,并禁止其他一切入站流量。
脚本:configure_firewall.sh
#!/bin/bash
# 防火墙配置脚本 - 仅允许特定IP访问SSH
# 定义变量
SSH_ALLOWED_IPS=("192.168.1.100" "10.0.0.50") # 允许访问SSH的IP列表
WEB_SERVICE_PORT="80,443" # 开放的Web端口
# 1. 清理现有规则(风险操作!生产环境建议先备份)
echo "正在清除所有现有iptables规则..."
sudo iptables -F
sudo iptables -X
sudo iptables -t nat -F
sudo iptables -t mangle -F
# 2. 设置默认策略(DROP所有入站,允许所有出站和转发)
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT
# 3. 允许已建立的连接和回环接口
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A INPUT -i lo -j ACCEPT
# 4. 开放Web服务端口
echo "开放Web端口: $WEB_SERVICE_PORT"
sudo iptables -A INPUT -p tcp -m multiport --dports $WEB_SERVICE_PORT -j ACCEPT
# 5. 仅允许特定IP访问SSH
echo "配置SSH访问白名单..."
for IP in "${SSH_ALLOWED_IPS[@]}"; do
sudo iptables -A INPUT -p tcp --dport 22 -s $IP -j ACCEPT
echo " 已添加: $IP"
done
# 6. 其他常见服务(按需开启)
# sudo iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT # 允许ping
# 7. 保存规则(防止重启丢失,不同系统命令不同)
echo "保存规则..."
if command -v iptables-save &> /dev/null; then
sudo iptables-save > /etc/iptables/rules.v4 # Debian/Ubuntu
# sudo iptables-save > /etc/sysconfig/iptables # CentOS/RHEL
echo "规则已保存。"
else
echo "警告:未找到iptables-save,规则重启后将丢失。"
fi
echo "=== 防火墙配置完成 ==="
sudo iptables -L -n -v | head -20 # 显示前20条规则确认
使用前注意事项:
- 风险警告:
iptables -F会清空所有规则,如果脚本出错(比如SSH端口写错),你会立即断开连接。建议在本地终端或带外管理(如iDRAC、IPMI)执行。 - 执行权限:
chmod +x configure_firewall.sh。 - 测试:先在测试环境跑一遍。
Windows Server(PowerShell)
Windows自带强大的netsh和New-NetFirewallRule cmdlet,以下脚本创建一个新的入站规则,阻止特定IP访问系统。
脚本:Block-MaliciousIP.ps1
# 配置防火墙,阻止恶意IP列表
$BlockedIPs = @("10.0.0.99", "203.0.113.50") # 要阻止的IP
$RuleName = "BlockMaliciousIPs" # 规则名称前缀
foreach ($IP in $BlockedIPs) {
# 检查是否已存在同名规则
$existingRule = Get-NetFirewallRule -DisplayName "$RuleName_$IP" -ErrorAction SilentlyContinue
if ($existingRule) {
Write-Host "规则已存在: $IP" -ForegroundColor Yellow
continue
}
# 创建新规则:阻止该IP的所有入站流量
New-NetFirewallRule -DisplayName "$RuleName_$IP" `
-Direction Inbound `
-Action Block `
-RemoteAddress $IP `
-Profile Any `
-Enabled True
Write-Host "已添加阻止规则: $IP" -ForegroundColor Green
}
Write-Host "操作完成,当前阻止IP数: $( (Get-NetFirewallRule -DisplayName "$RuleName*").Count )"
脚本优势:
- 幂等性:检查规则是否存在,避免重复添加。
- 可以轻松集成到SIEM或EDR系统中,实现自动封禁。
华为/思科等企业级防火墙(通过CLI)
对于硬件防火墙,通常通过SSH或API调用CLI,以下是一个通过expect或sshpass自动登录华为防火墙并添加策略的脚本示例。
脚本:huawei_fw_add_rule.sh
#!/bin/bash # 自动在华为USG防火墙添加安全策略(需要sshpass) FW_IP="192.168.100.1" FW_USER="admin" FW_PASS="YourPassword" NEW_SRC_IP="10.10.10.0/24" NEW_DST_IP="172.16.1.100" # 使用expect自动交互(或者使用sshpass + 非交互式命令) sshpass -p "$FW_PASS" ssh -o StrictHostKeyChecking=no $FW_USER@$FW_IP << EOF system-view security-policy rule name auto_add_via_script source-zone trust destination-zone untrust source-address $NEW_SRC_IP destination-address $NEW_DST_IP action permit description "添加于 $(date)" commit quit quit EOF echo "策略已添加,源:$NEW_SRC_IP 到 目的:$NEW_DST_IP"
进阶:更安全、更专业的做法
-
使用配置管理工具(更推荐):
- Ansible:通过
firewalld、iptables或ufw模块,声明式管理防火墙规则。 - name: 允许SSH访问 firewalld: service: ssh permanent: yes state: enabled
- name: 允许特定IP firewalld: rich_rule: rule family="ipv4" source address="192.168.1.0/24" service name="ssh" accept permanent: yes state: enabled
- Terraform:用于云防火墙(AWS Security Group, Azure NSG),实现基础设施即代码。
- Ansible:通过
-
脚本的增强功能:
- 备份/回滚:在修改前导出当前规则(
iptables-save > backup_$(date +%s).rules)。 - 原子操作:使用
ipset或nftables sets批量管理IP集合,避免逐条添加导致性能问题。 - 日志记录:记录每次变更到文件或syslog。
- 错误处理:检查命令返回值,连接失败时中止并报警。
- 备份/回滚:在修改前导出当前规则(
- 可以:脚本可以自动配置防火墙策略,且是提升效率、减少人为失误的有效手段。
- 但要注意:操作前必须有备份机制和回滚方案,尤其对于生产环境的防火墙,一次错误的变更可能导致业务中断。
- 推荐路径:从简单脚本开始管理单台服务器 → 过渡到Ansible等工具管理集群 → 最终通过CI/CD Pipeline集成到变更管理流程中。
如果你能提供更具体的场景(比如是哪种防火墙、需要配置哪些策略),我可以给出更贴合的示例。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播