在Ubuntu系統中,可以使用 Uncomplicated Firewall (UFW) 或 Firewalld 來實現防火墻的自動化管理。以下是兩種方法的詳細介紹:
安裝UFW(如果尚未安裝):
sudo apt update
sudo apt install ufw
啟用UFW:
sudo ufw enable
配置UFW規則:
sudo ufw allow 22/tcp # 允許SSH
sudo ufw allow 80/tcp # 允許HTTP
sudo ufw allow 443/tcp # 允許HTTPS
sudo ufw allow from 192.168.1.0/24 to any port 22 # 允許來自192.168.1.0/24網段的SSH連接
sudo ufw delete allow 22/tcp # 刪除允許22端口的規則
查看當前規則:
sudo ufw status verbose
保存規則(確保重啟后規則仍然有效):
sudo ufw save
自動化腳本(例如,firewall.sh):
#!/bin/bash
ufw disable
echo y | ufw reset
ufw allow from xxx.xxx.xxx.xxx
ufw allow from xx.xx.xx.0/24
ufw allow from 192.168.101.0/24 to any port 161 proto udp
ufw allow 80/tcp
ufw allow 1:500/tcp
ufw enable
安裝Firewalld(如果尚未安裝):
sudo apt update
sudo apt install firewalld
啟用Firewalld:
sudo systemctl start firewalld
sudo systemctl enable firewalld
配置Firewalld規則:
sudo firewall-cmd --permanent --add-port=80/tcp
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" accept'
重新加載防火墻規則:
sudo firewall-cmd --reload
自動化腳本(例如,firewall_manager.py):
import firewalld
fw = firewalld.Firewall()
# 獲取當前運行狀態
status = fw.getStatus()
print("Firewalld status:", status)
# 添加一個新的區域
new_zone = "myzone"
if not fw.zoneExists(new_zone):
fw.newZone(new_zone, {"target": "ACCEPT", "icmp-block-inversion": "no"})
print(f"New zone '{new_zone}' created.")
else:
print(f"Zone '{new_zone}' already exists.")
# 將新區域設置為默認區域
fw.setDefaultZone(new_zone)
print(f"Default zone set to '{new_zone}'.")
# 向新區域添加一條規則,允許來自IP地址192.168.1.100的SSH流量
source_ip = "192.168.1.100"
service = "ssh"
fw.addRichRule(f"rule family=\"ipv4\" source address=\"{source_ip}\" service name=\"{service}\" accept", new_zone)
print(f"Added rule to allow SSH traffic from {source_ip}.")
# 重新加載防火墻配置
fw.reload()
print("Firewalld configuration reloaded.")
通過上述方法,可以實現Ubuntu防火墻的自動化管理。根據具體需求,可以選擇使用UFW或Firewalld,并通過腳本進一步自動化配置過程。