防火墻 之 NAT技術

1? 概述

地址轉換(NAT)就是:路由器將私有地址轉換為公有地址使數據包能夠發到因特網上,同時從因特網上接收數據包時,將公用地址轉換為私有地址。 在計算機網絡中,網絡地址轉換(Network Address Translation或簡稱NAT,也叫做網絡掩蔽或者IP掩蔽)是一種在IP數據包通過路由器或防火墻時重寫源IP地址或/和目的IP地址的技術。

地址轉換NAT(Network Address Translation)又稱地址代理,它實現了私有網絡訪問外部網絡的功能。這種技術被普遍使用在有多臺主機但只通過一個公有IP地址訪問因特網的私有網絡中。根據規范,路由器是不能這樣工作的,但它的確是一個方便并得到了廣泛應用的技術。當然,NAT也讓主機之間的通信變得復雜,導致通信效率的降低。

本文將結合例子講解NAT技術的實現和相關原理

2? 環境準備

準備三臺機器

A:? 192.168.32.61當內網主機,路由指向172.18.50.65

B:? 172.18.50.65? 192.168.32.65當路由器,開啟路由轉發功能:echo 1 >/proc/sys/net/ipv4/ip_forward

C:172.18.50.73當外網主機,指向網關172.18.50.65

3? NAT原理介紹和示例

路由器中,實現NAT轉換是由表nat實現的

nat表默認centos7有四條鏈:PREROUTING,INPUT,OUTPUT,POSTROUTING

nat表默認centos6有三條鏈:PREROUTING,OUTPUT,POSTROUTING

請求報文:修改源/目標IP,由策略定義如何修改

響應報文:修改源/目標IP,根據跟蹤機制自動實現

在NAT技術中,主要有分為三個,SNAT,DNAT,PNAT,相關介紹和示例如下

3.1? SNAT:source NAT

SNAT,改寫封包來源 IP 為某特定 IP 或 IP 范圍,可以指定 port 對應的范圍,進行完此處理動作后,將直接跳往下一個規則(mangleostrouting)。

一般僅轉換ip,一般情況下不轉換端口,但是如果端口剛好已經被使用了,路由器也會一起轉換端口,此時路由器上沒有記錄連接,但是在客戶端和服務器上可以看到對應的連接。

讓本地網絡中的主機通過某一特定地址訪問外部網絡,實現地址偽裝

策略一般作用于POSTROUTING, INPUT鏈

.SNAT:固定IP

--to-source[ipaddr[-ipaddr]][:port[-port]]

--random:如果使用選項--random,則端口映射將被隨機化

語法

iptables? -t nat?-A POSTROUTING -s LocalNET?! -dLocalNet -j SNAT --to-source ExtIP

#ExtIP公網地址

.示例:

#路由器上配置,表示所有內網的地址192.168.32.0/24都通過SNAT轉換為地址172.18.50.65

iptables -t nat -APOSTROUTING -s 192.168.32.0/24 -j SNAT --to-source 172.18.50.65

3.2? MASQUERADE:

改寫封包來源 IP 為防火墻 NIC IP,可以指定 port 對應的范圍,進行完此處理動作后,直接跳往下一個規則(mangleostrouting)。這個功能與 SNAT 略有不同,當進行 IP 偽裝時,不需指定要偽裝成哪個 IP,IP 會從網卡直接讀,當使用撥接連線時,IP 通常是由 ISP 公司的 DHCP 服務器指派的,這個時候 MASQUERADE 特別有用。

如果通過ADSL撥號的話,ip是不固定的。所以這個時候需要用網卡名來替換

--to-ports port[-port]

--random:如果使用選項--random,則端口映射將被隨機化

iptables -t nat -A POSTROUTING -s LocalNET ! -d LocalNet -j MASQUERADE

.示例:

#以下語句在路由器上配置,表示將內網的192.168.32.0/24網段的ip進行NAT轉換,動作是MASQUERADE

iptables -t nat -A POSTROUTING -s 192.168.32.0/24 -j MASQUERADE

3.3DNAT:destination NAT

改寫封包目的地 IP 為某特定 IP 或 IP 范圍,可以指定 port 對應的范圍,進行完此處理動作后,將會直接跳往下一個規則(filter:input 或 filter:forward)。

把本地網絡中的主機上的某服務開放給外部網絡訪問(發布服務和端口映射),但隱藏真實IP。當外部主機訪問服務器時,有路由器通過DNAT做地址轉換,從而訪問到本地的服務器

策略一般作用于PREROUTING, OUTPUT鏈,這里服務器上看到的訪問的ip不是路由器的公網ip,而是源客戶端的ip

語法

iptables -t nat -A PREROUTING -d ExtIP -p tcp|udp? --dport? PORT -j DNAT ?--to-destination ?InterSeverIP[:PORT]

.示例:

在路由器上配置

#以下語句表示當訪問172.18.50.65的80端口時,將轉到內部服務器:192.168.32.61進行響應。如果http服務器發布的端口是默認的80,那么轉發的目的地址不需要跟端口號

iptables -t nat -A PREROUTING -d172.18.50.65 -p tcp --dport 80 -j DNAT --to-destination 192.168.32.61

#以下語句表示當訪問172.18.50.65的80端口時,將轉到內部服務器:192.168.32.61進行響應。如果http服務器發布的端口是非標準端口,那么轉發的目的地址需要跟端口號,如8080

iptables -t nat -APREROUTING? ?-d 172.18.50.65 -p tcp --dport 80 -j DNAT--to-destination 192.168.32.61:8080

測試,直接訪問路由器的公網ip

curl??http://172.18.50.65

3.3? PNAT: port NAT

實現端口轉換,端口和IP都進行修改

PANT是通過動作轉發REDIRECT實現,將封包重新導向到另一個端口,這個功能可以用來實作通透式porxy 或用來保護 web 服務器。

這個也是作用在nat表中。

可用于:PREROUTING,OUTPUT或自定義鏈

通過改變目標IP和端口,將接受的包轉發至不同地址

示例:

#以下配置在提供httpd服務的機器上配置,表示當有人訪問80端口時,就把請求轉到81端口

iptables -t nat ?-A PREROUTING -d 192.168.32.61 ?-p tcp --dport 80 ?-j REDIRECT --to-ports 81

?

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 一.防火墻概念 (一)安全技術介紹 (1) 入侵檢測與管理系統(Intrusion Detection Syste...
    楠人幫閱讀 1,529評論 0 3
  • 1.安全技術 (1)入侵檢測與管理系統(Intrusion Detection Systems): 特點是不阻斷任...
    尛尛大尹閱讀 2,500評論 0 2
  • 1 前言 防火墻(Firewall),就是一個隔離工具,工作于主機或者網絡的邊緣,對于進出本主機或本網絡的報文,根...
    魏鎮坪閱讀 7,047評論 1 23
  • 本文整理了在實踐過程中使用的Linux網絡工具,這些工具提供的功能非常強大,我們平時使用的只是冰山一角,比如lso...
    老夫劉某閱讀 3,587評論 0 7
  • 我不祝你一帆風順 前進的路上總會有風吹雨淋 在風暴中倔強地揚起風帆 總有一天你會看見錦旗飄迎 我不祝你一帆風順 因...
    靜火閱讀 1,019評論 2 1