首頁 > 軟體

iptables中NAT表

2020-06-16 17:34:46

iptables是我們在實際生產環境中大量的使用的工具,它能對進出主機的資料進行過濾以及轉發等等,我們在平時用的比較多的就是iptables的net表和filter表,在這裡就簡要的講解下iptables的nat表,來實現主機上的路由轉發,如果對iptables還不是很了解的可以上網去搜尋會有很多詳細的資料。

nat表是對進出主機的ip或埠進行轉發,在這裡必須要知道的是在linux系統中ip地址並不屬於某一張網絡卡的,而是屬於linux主機的核心的所以在linux系統裡ip是可以轉換的,其實在我們平時用的路由器或者是刷的軟路由都是基於linux的iptables來實現的,在使用iptables的nat表之前需要開啟核心ip地址轉發的功能
[root@test ~]# echo "1" > /proc/sys/net/ipv4/ip_forward
#或者是直接vim編輯把net.ipv4.ip_forward=0改成1
然後再使之生效
[root@test ~]# sysctl -p
net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296

在其中呢我們會用到3種狀態MASQUERADE、DNAT、SNAT和3條鏈PREROUTING,POSTROTING,OUTPUT。
 我們將我們內網的地址轉換為一個外網的IP時有2中方式要用在POSTROUTING鏈上,其中MASQUERADE是源地址偽裝,一般用在ADSL動態上網的環境中把做地址轉發,他會自動識別核心中的地址,但是如果你是用靜態ip或者是某一個內網中的ip做轉發儘量不要用這種方式,以節省系統開銷
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0] 
-A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
#這裡就是把10.8.0.0/24網段的ip動態識別eth0網絡卡上的地址轉發出去
-A POSTROUTING -s 10.8.0.0/24 -o eth0 -j SNAT --to-source 192.168.168.253
#這一條的意思是把10.8.0.0/24網段的ip通過eth0都轉發成192.168.168.253

要注意的是如果用SNAT轉發出去的話就必須用--to-source ip給轉發出去。
  以上2種的都是ip地址由內到外的轉發,如果在一個公網1.1.1.1中的區域網裡的一個內網172.32.0.0/24中的172.32.0.1要存取10.8.0.0/24網段中的10.8.0.1那我們就要在PREROUTING鏈上做DNAT了,當然要在1.1.1.1的區域網內先做好SNAT
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A POSTROUTING -s 172.32.0.1 -o ehth0 -j SNAT --to-source 1.1.1.1

192.168.168.0/24的區域網內做DNAT,當然filter表中的如口也要做好還要做好其中的forward鏈
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A PREROUTING -d 192.168.168.253 -i ehh0 -j DNAT --to-destination 10.8.0.1
#把到192.168.168.253轉發成10.8.0.1

這樣172.32.0.0/24網段中的172.32.0.1就可以存取10.8.0.0/24網段中的10.8.0.1了,要注意的是在DNAT中是可以限制tcp或者是udp的某一個埠的進出的,如果是只讓172.32.0.0/24網段中的172.32.0.1存取10.8.0.0/24網段中的10.8.0.1的http服務那就只開放80埠
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A PREROUTING -d 192.168.168.253 -i ehh0 -p tcp --dport 80 -j DNAT --to-destination 10.8.0.1

或者是我要把10.8.0.0/24網段中的10.8.0.1的http伺服器端口對映出去不用標準埠,如8080就
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A PREROUTING -d 192.168.168.253 -i ehh0 -p tcp --dport 8080 -j DNAT --to-destination 10.8.0.1:80

所以在DNAT中是支援埠對映的,這樣就可以實現內網中的DZM區和非DZN區的保護

更多iptables相關教學見以下內容

CentOS 7.0關閉預設防火牆啟用iptables防火牆  http://www.linuxidc.com/Linux/2015-05/117473.htm

iptables使用範例詳解 http://www.linuxidc.com/Linux/2014-03/99159.htm

Linux防火牆iptables詳細教學 http://www.linuxidc.com/Linux/2013-07/87045.htm

iptables的備份、恢復及防火牆指令碼的基本使用 http://www.linuxidc.com/Linux/2013-08/88535.htm

Linux下防火牆iptables用法規則詳解 http://www.linuxidc.com/Linux/2012-08/67952.htm

Linux下iptables防火牆設定 http://www.linuxidc.com/Linux/2015-10/123843.htm

本文永久更新連結地址http://www.linuxidc.com/Linux/2016-08/134590.htm


IT145.com E-mail:sddin#qq.com