爲什麼需要Linux防火牆?

想象你的Linux服務器是一座城堡,防火牆就是城堡的大門和守衛。它能幫你阻止不明身份的“訪客”進入,只允許你明確允許的“人”通過。如果沒有防火牆,黑客可能會掃描你的服務器,嘗試入侵未開放的端口,甚至攻擊你的服務。所以,配置防火牆是保護服務器安全的第一步。

什麼是iptables?

iptables是Linux系統中最基礎的包過濾防火牆工具,它像一個“門衛”,通過檢查網絡數據包的信息(比如來源IP、目標端口、協議類型),決定是“放行”(允許通過)還是“攔截”(拒絕進入)。

簡單來說,它通過一系列規則來管理流量,規則按順序執行,先匹配的規則會先生效。

iptables核心概念

1. 表(Table)

iptables有4個主要表,初學者最常用的是filter表(過濾流量),其他表(如nat用於網絡地址轉換)暫時可以忽略。

2. 鏈(Chain)

鏈是規則的“排隊通道”,iptables根據流量方向分爲3個默認鏈:
- INPUT:處理進入本機的流量(比如別人訪問你的Web服務)
- OUTPUT:處理本機發出的流量(比如你訪問外部網站)
- FORWARD:處理需要轉發的流量(如果服務器作爲路由器)

3. 規則(Rule)

每條規則由匹配條件動作組成:
- 匹配條件:定義什麼樣的流量會被匹配(如目標端口是80、協議是TCP等)
- 動作:匹配後要執行的操作(如ACCEPT允許通過,DROP直接丟棄,REJECT拒絕並返回提示)

配置前準備

1. 查看當前iptables規則

先看看服務器當前的防火牆規則,避免重複配置或規則衝突:

iptables -L -n  # -L列出規則,-n顯示IP和端口(不解析域名)

2. 清空現有規則(如果需要)

如果之前有規則,先清空(謹慎操作!):

iptables -F  # 清空所有規則
iptables -X  # 刪除所有自定義鏈

分步配置防火牆規則

1. 允許本地迴環接口(lo)流量

本地迴環接口(lo)是服務器內部通信的通道,必須允許,否則本地服務(如數據庫、Web服務)無法正常通信:

iptables -A INPUT -i lo -j ACCEPT  # 允許來自lo的入站流量
iptables -A OUTPUT -o lo -j ACCEPT  # 允許發往lo的出站流量

2. 設置默認策略(關鍵!)

默認策略決定了未匹配規則的流量如何處理,建議先設置爲“拒絕”,再逐步開放必要端口(最小權限原則):

iptables -P INPUT DROP   # 入站流量默認拒絕
iptables -P OUTPUT ACCEPT # 出站流量默認允許(自己發出去的流量通常沒問題)
iptables -P FORWARD DROP # 轉發流量默認拒絕(如果服務器不是路由器,可忽略)

3. 允許SSH遠程連接(必做!)

服務器通常需要遠程管理,先開放SSH(默認端口22),注意:生產環境建議限制IP段(如僅允許公司IP),或使用密鑰登錄:

# 允許來自192.168.1.0/24網段的SSH連接(示例,替換爲你的實際IP段)
iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 22 -j ACCEPT

# 或者允許所有IP(僅測試用,不安全!)
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

4. 允許Web服務(80/443端口,按需開放)

如果服務器運行Web服務(如Nginx/Apache),需要開放80(HTTP)和443(HTTPS)端口:

# 允許HTTP(80端口)
iptables -A INPUT -p tcp --dport 80 -j ACCEPT

# 允許HTTPS(443端口)
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

5. 拒絕其他所有未允許的流量

所有未匹配上述規則的流量,默認拒絕:

# 此時INPUT默認策略是DROP,所以無需額外配置,直接生效

6. 保存規則(避免重啓丟失)

配置完規則後,需保存到系統,否則重啓服務器後規則會丟失:

CentOS/RHEL系統:

service iptables save  # 保存規則
systemctl enable iptables  # 設置開機自啓
systemctl start iptables   # 啓動防火牆

Ubuntu/Debian系統:

# 需要先安裝iptables-persistent(如果未安裝)
apt-get install iptables-persistent
# 保存規則
dpkg-reconfigure iptables-persistent

常見操作命令

1. 查看規則

iptables -L -n --line-numbers  # 顯示規則序號,方便刪除

2. 刪除規則(根據序號)

假設要刪除第3條規則:

iptables -D INPUT 3  # 刪除INPUT鏈的第3條規則

3. 清空所有規則

iptables -F  # 清空規則鏈
iptables -X  # 刪除自定義鏈
iptables -Z  # 重置計數器

安全小貼士

  1. 規則順序很重要:規則按從上到下匹配,先允許的規則會優先生效。例如,拒絕規則必須放在最後,避免前面允許的規則被覆蓋。

  2. 最小權限原則:只開放必要的端口,比如Web服務器只需開放80/443,其他端口(如21 FTP、3306 MySQL)僅在需要時開放。

  3. 避免直接開放22端口到公網:建議通過VPN或IP白名單限制SSH訪問,或使用密鑰登錄(禁用密碼登錄)。

  4. 定期檢查規則:服務器如果被入侵,可通過iptables -L查看異常規則,及時清理。

總結

通過以上步驟,你已經完成了Linux服務器防火牆的基礎配置。核心思路是:先允許本地和必要服務的流量,再拒絕所有未明確允許的流量。記住,防火牆規則需要根據實際業務需求調整,不要盲目開放所有端口!

如果需要更復雜的配置(如端口轉發、限制IP訪問),可以進一步學習nat表或結合ipset工具,但基礎規則配置已能滿足大多數服務器的安全需求。

小夜