Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

Linux iptables 防火牆配置基礎教學與 NAT 穿透實戰

編輯:Linux 教學

前言

iptables 是 Linux 核心內建的封包過濾框架,透過定義規則鏈來控制網路流量的進出與轉發。掌握其核心概念與常用指令,是系統管理員與網路工程師的必備技能。本文將從表、鏈、規則匹配器、目標動作等基礎架構切入,並搭配實際 NAT 案例,示範如何解決內網主機無法透過公網 IP 存取內部服務的經典問題。

一、iptables 核心架構四要素

1. 指定表(-t table)

  • filter:預設表,專責封包過濾(INPUT、OUTPUT、FORWARD 鏈)。
  • nat:網址轉換表,處理來源/目的 IP 轉換(PREROUTING、POSTROUTING、OUTPUT 鏈)。
  • mangle:封包修改表,用於修改 TOS、TTL 等欄位。

2. 指定操作命令

參數說明
-A在鏈尾新增規則
-D刪除指定規則
-R替換規則
-I插入規則至指定位置
-L列出所有規則
-F清空規則
-N建立使用者自訂鏈
-X刪除使用者自訂鏈
-P設定預設政策
-Z歸零計數器

3. 指定鏈

filter 表:INPUT(進站)、OUTPUT(出站)、FORWARD(轉發)。
nat 表:PREROUTING(路由前)、POSTROUTING(路由後)、OUTPUT(本機產生)。

4. 規則匹配器與目標動作

常用匹配:-s 來源 IP、-d 目的 IP、-p 協定、--dport 目的埠、-i/-o 介面。
目標動作:ACCEPT(通過)、DROP(丟棄)、REJECT(拒絕並回應)、LOG(記錄)、SNAT/DNAT(位址轉換)。

二、通用語法與腳本範例

iptables [-t table] command [chain] [rule-matcher] -j target

基礎防火牆腳本範例(/etc/rc.d/filter-firewall):

#!/bin/bash
IPT=/sbin/iptables
WWWSERVER=192.168.168.119
FTPSERVER=192.168.168.119
IPRANGE=192.168.168.0/24

$IPT -F
$IPT -P FORWARD DROP
$IPT -A FORWARD -p tcp -d $WWWSERVER --dport 80 -i eth0 -j ACCEPT
$IPT -A FORWARD -p tcp -d $FTPSERVER --dport 21 -i eth0 -j ACCEPT
$IPT -A INPUT -s 192.168.168.81 -i eth0 -j DROP

三、實戰案例:NAT 環境下內網存取公網 IP 失敗的解決方案

場景描述

  • 單一公網 IP:222.111.33.88
  • 內部 Web 伺服器:192.168.1.250:80
  • 已設定 SNAT 讓內網上網、DNAT 發布 Web 服務

問題現象

外網存取 222.111.33.88:80 正常,但內網主機(如 192.168.1.123)同樣用此公網 IP 存取卻失敗。

封包流向分析

  1. Client (192.168.1.123) → 發送 SYN 給 222.111.33.88:80
  2. NAT 閘道 PREROUTING 鏈 DNAT → 目的改為 192.168.1.250:80
  3. Server 回應 SYN+ACK → 來源 192.168.1.250:80 直接送回 Client
  4. Client 收到來源 192.168.1.250 的封包,與預期的 222.111.33.88 不符 → 丟棄,連線失敗

根因:回程封包未經 SNAT,來源 IP 仍為內網 IP,導致 Client 拒絕接收。

解決方案:在 POSTROUTING 做 SNAT(Hairpin NAT)

# 針對內網網段存取內部 Web 伺服器的流量,強制來源轉換為閘道內網 IP
iptables -t nat -I POSTROUTING -s 192.168.1.0/24 -p tcp -d 192.168.1.250 --dport 80 -j SNAT --to-source 192.168.1.1

此規則讓回程封包來源變成閘道內網 IP (192.168.1.1),Client 便能正確匹配連線。

補充:FORWARD 鏈若預設 DROP,需額外放行

iptables -A FORWARD -p tcp -d 192.168.1.250 --dport 80 -j ACCEPT

四、FTP 服務特別處理

FTP 主動/被動模式需載入核心模組追蹤連線:

modprobe ip_conntrack_ftp
modprobe ip_nat_ftp

五、啟用 IP 轉發與清空舊規則

echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X

總結

iptables 雖指令繁多,掌握「表→鏈→匹配→動作」四步驟即能靈活應對。針對 NAT 環境下的 Hairpin NAT 問題,關鍵在於讓回程封包也經過 SNAT,使來源 IP 符合 Client 預期。實務上建議將規則寫入啟動腳本,並搭配 iptables-save/restore 持久化。

Copyright © Windows教程網 All Rights Reserved