防火墻是保護服務器免受惡意流量和 DDoS 攻擊的第一道防線。通過合理配置防火墻規則,可以有效阻止惡意訪問、限制不必要的流量,并減少攻擊對服務器的影響。
以下是配置防火墻規則的全面指南,包括基礎規則設置、防御 DDoS 攻擊的高級策略和最佳實踐。
1. 配置防火墻規則的基礎方法
大多數服務器使用以下防火墻工具之一:
- UFW(Uncomplicated Firewall):適用于 Ubuntu 等系統,簡單易用。
- iptables:功能強大,適用于更復雜的防火墻配置。
- firewalld:適用于 CentOS/RHEL,支持動態防火墻規則。
- 云提供商的防火墻:如 AWS、阿里云、騰訊云等自帶的安全組。
1.1 基礎防火墻規則配置
(1) 允許必要的端口
常見端口:
- SSH(默認端口 22,建議更改為非標準端口)
- HTTP(80)和 HTTPS(443)
- 數據庫端口(如 MySQL 的 3306,PostgreSQL 的 5432),建議限制來源 IP。
UFW 示例:
bash
復制
# 默認拒絕所有入站流量 sudo ufw default deny incoming # 默認允許所有出站流量 sudo ufw default allow outgoing# 允許 SSH sudo ufw allow 22 # 允許 HTTP 和 HTTPS sudo ufw allow 80 sudo ufw allow 443 # 允許 MySQL,僅限特定 IP sudo ufw allow from 192.168.1.100 to any port 3306
iptables 示例:
bash
復制
# 清除現有規則 sudo iptables -F# 默認策略:拒絕所有入站流量,允許出站流量 sudo iptables -P INPUT DROP sudo iptables -P FORWARD DROP sudo iptables -P OUTPUT ACCEPT# 允許本地環回接口 sudo iptables -A INPUT -i lo -j ACCEPT# 允許 SSH sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT # 允許 HTTP 和 HTTPS sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT# 允許特定 IP 訪問 MySQL sudo iptables -A INPUT -p tcp -s 192.168.1.100 --dport 3306 -j ACCEPT
(2) 阻止所有其他流量
- UFW 默認已阻止所有未明確允許的流量。
- iptables:
bash
復制
# 拒絕所有其他入站流量 sudo iptables -A INPUT -j DROP
(3) 限制 SSH 登錄的訪問
更改默認端口:
修改/etc/ssh/sshd_config
,將默認端口從 22 改為非標準端口(如 2222)。plaintext
復制
Port 2222
重啟 SSH 服務:
bash
復制
sudo systemctl restart sshd
限制 SSH 登錄的 IP:
僅允許可信 IP 訪問 SSH:bash
復制
sudo ufw allow from <trusted_ip> to any port 2222
2. 防御惡意流量的高級配置
2.1 阻止特定 IP 或 IP 段
阻止單個 IP:
- UFW:
bash
復制
sudo ufw deny from 192.168.1.101
- iptables:
bash
復制
sudo iptables -A INPUT -s 192.168.1.101 -j DROP
- UFW:
阻止整個 IP 段:
- UFW:
bash
復制
sudo ufw deny from 192.168.1.0/24
- iptables:
bash
復制
sudo iptables -A INPUT -s 192.168.1.0/24 -j DROP
- UFW:
2.2 限制每秒連接數(防止暴力破解)
- 限制單個 IP 的連接請求速率:
- iptables 示例:
bash
復制
sudo iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -m recent --set sudo iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -m recent --update --seconds 60 --hitcount 5 -j DROP
- 每個 IP 在 60 秒內最多允許發起 5 次新的連接請求。
- iptables 示例:
2.3 使用 Fail2Ban 防止暴力破解
Fail2Ban 是一個基于日志文件的防護工具,可以自動封禁多次失敗登錄嘗試的 IP。
安裝 Fail2Ban:
bash
復制
sudo apt install fail2ban
配置 SSH 防護:
編輯/etc/fail2ban/jail.local
:plaintext
復制
[sshd] enabled = true port = 2222 # 如果更改了 SSH 端口,更新此處 filter = sshd logpath = /var/log/auth.log maxretry = 5 bantime = 3600
啟動服務:
bash
復制
sudo systemctl restart fail2ban
3. 防御 DDoS 攻擊的高級策略
3.1 限制每秒請求數
- iptables 示例:
限制每秒最多 10 個請求:bash
復制
sudo iptables -A INPUT -p tcp --dport 80 -m limit --limit 10/second --limit-burst 20 -j ACCEPT sudo iptables -A INPUT -p tcp --dport 80 -j DROP
3.2 使用防火墻模塊(如 iptables 的 conntrack 模塊)
- 限制單個 IP 的最大并發連接數:
bash
復制
sudo iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 20 -j DROP
- 單個 IP 同時最多允許 20 個連接請求。
3.3 使用云服務的 DDoS 防護
- 如果您使用云服務器(如 AWS、阿里云、騰訊云),可以啟用其提供的 DDoS 防護功能:
- 阿里云:云盾 DDoS 基礎防護。
- 騰訊云:DDoS 高防 IP。
- AWS:Shield Standard(免費)或 Shield Advanced(付費)。
3.4 啟用 Web 應用防火墻(WAF)
WAF 是保護 Web 應用程序免受惡意訪問和 DDoS 攻擊的有效工具。
- 推薦工具:
- Cloudflare(免費/付費)。
- 阿里云 WAF。
- ModSecurity(開源 WAF)。
4. 防火墻規則配置的最佳實踐
最小化開放端口:
- 僅開放必要的端口,減少暴露面。
限制 SSH 訪問:
- 使用非標準端口,并限制可信 IP 訪問。
定期審查規則:
- 定期檢查防火墻規則,清理過時或無效的規則。
啟用日志記錄:
- 確保防火墻記錄所有被阻止的流量,以便分析潛在的攻擊行為。
結合多層防護:
- 配置防火墻的同時,結合 Fail2Ban、WAF 和云服務的 DDoS 防護,形成多層次的安全防御。
5. 總結:如何配置防火墻規則以阻止惡意流量和 DDoS?
基礎規則:
- 默認拒絕所有入站流量,僅允許必要端口。
- 限制 SSH 訪問,僅允許可信 IP。
高級策略:
- 設置速率限制,防止暴力破解和 DDoS 攻擊。
- 使用工具如 Fail2Ban 自動封禁惡意 IP。
云服務和 WAF:
- 利用云提供商的 DDoS 保護服務和 Web 應用防火墻,提升防御能力。
通過合理配置防火墻規則并結合多層防護,可以有效阻止惡意流量和 DDoS 攻擊,確保服務器的安全和穩定運行。