iptables/netfilter網絡防火墻:
FORWORD鏈上的防火墻規則
路由功能打開
[root@localhost ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
網關設置防火墻,讓內網可以訪問外網網頁
iptables -A FORWARD -s 192.168.126.131 -p tcp --dport 80 -j ACCEPT
iptables -I FORWARD -m state --state ESTABLISHED -j ACCEPT
iptables -A FORWARD -j DROP
也可以用笨辦法
iptables -A FORWARD -s 192.168.126.131 -p tcp --dport 80 -j ACCEPT
iptables -A FORWARD -j DROP
iptables -I FORWARD 2 -d 192.168.126.0/24 -p tcp --sport 80 -j ACCEPT
不過第一種方法可以實現多條端口的訪問
iptables -R FORWARD 2 -s 192.168.126.131 -p tcp -m multiport --dport 80,22,23,21,139,445 -m state --state NEW -j -ACCEPT
modprobe nf_conntrack_ftp (有了此條命令就能使用ftp的RELATED了)
iptables -I FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
所以添加規則于FORWARD鏈,注意幾個問題:
(1) 請求和響應報文均會經由FORWARD鏈,要注意規則的方向性;分清誰是請求誰是相應
建議:第一條:iptables -I FORWARD -m state –state ESTABLISHED,RELATED -j ACCEPT
(2) 如果可以啟用conntrack機制,注意網關主機所能夠追蹤的連接數的最大數量要符合需要
NAT:
- 源地址轉換:SNAT,POSTROUTING
靜態轉換:外網地址是固定的
動態轉換:外網地址時不固定的,需要臨時探測地址后再轉換
地址池地址轉換!
-
目標地址轉換:DNAT,PREROUTING
-
PAT:端口轉換 (端口映射)Port Address Translation
SNAT:源地址轉換,主要用于請求時隱藏主機
目標地址不變,重新改寫源地址,并在本機建立NAT表項,當數據返回時,在剛收到報文的時候就要根據NAT表將目的地址數據改寫為數據發送出去時候的源地址(要不就會發送到INPUT了),并發送給主機
目前大多都是解決內網用戶用同一個公網地址上網的情況
靜態轉換:外網地址是固定的
動態轉換:外網地址時不固定的,需要臨時探測地址后再轉換
地址池地址轉換!
目標地址轉換:DNAT,PREROUTING
PAT:端口轉換 (端口映射)Port Address Translation
目標地址不變,重新改寫源地址,并在本機建立NAT表項,當數據返回時,在剛收到報文的時候就要根據NAT表將目的地址數據改寫為數據發送出去時候的源地址(要不就會發送到INPUT了),并發送給主機
目前大多都是解決內網用戶用同一個公網地址上網的情況
–to-source [ipaddr[-ipaddr]]
注意:【系統在路由及過慮等處理直到數據包要被送出時才進行SNAT】
(有一種SNAT的特殊情況是ip欺騙,也就是所謂的Masquerading,通常建議在使用撥號上網的時候使用,或者說在合法ip地址不固定的情況下使用)
-j SNAT --to-source IP[-IP][:端口-端口](nat 表的 POSTROUTING鏈)
源地址轉換,SNAT 支持轉換為單 IP,也支持轉換到 IP 地址池
(一組連續的 IP 地址)
例如:
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 \
-j SNAT --to 1.1.1.1
將內網 192.168.0.0/24 的原地址修改為 1.1.1.1,用于 NAT
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 \
-j SNAT --to 1.1.1.1-1.1.1.10
同上,只不過修改成一個地址池里的 IP
1、默認情況
–
2、網關主機(源端口轉換)
~]# iptables -t nat -A POSTROUTING -s 192.168.22.0/24(內網段) -j SNAT --to-source 10.1.6.68(路由的外網ip)
–
這時會發現 目標主機自動轉換ip到請求主機
MASQUERADE:地址偽裝,這種用于不知道地址時做轉換使用,如果知道地址最好不要用,會消耗大量系統資源
This target is only valid in the nat table, in the POSTROUTING chain. It should only be used with dynamically assigned IP (dialup) connections: if you have a static IP address, you should use the SNAT target.
DNAT:用于被請求時隱藏主機
和SNAT相反,源地址不變,重新修改目標地址,在本機建立NAT表項,當數據返回時,根據NAT表將源地址修改為數據發送過來時的目標地址,并發給遠程主機
在DNAT的基礎上,可以根據請求數據包的端口做PNAT(端口轉換,也稱為端口映射),可以更句請求數據包不同的端口改寫不同的目標地址,從而發送給不同的主機
這在用一個公網地址做不同服務時用的比較多,而且相對來說,用NAT的方式可以隱藏后端服務器的真實地址,更加的安全
–to-destination [ipaddr[-ipaddr]][:port[-port]]
REDIRECT:本機短端口映射
This target is only valid in the nat table, in the PREROUTING and OUTPUT chains, and user-defined chains which are only called from those chains.
--to-ports port[-port]
RETURN:返回
~]# iptables -t nat -A PREROUTING -d 10.1.6.68 -p tcp –dport 80 -j DNAT –to-destination 192.168.126.131:80
ss -tnl 可以看到哪臺主機訪問哪個端口
注意:改22號端口時 本地轉發主機會被隱藏,最好改的時候把ssh端口給換一下也可以
iptables -t nat -A PREROUTING -d 10.1.6.68 -p tcp --dport 22022 -j DNAT --to-destination 192.168.126.131:22
這樣就不用改本地主機的22端口了,改那個內網主機的端口隱藏成其他的做法
如果本機監聽的端口是8080,但外部不識別這個端口只識別80端口解決方法
做本機的端口映射(NAT表),把剛到達本機的請求(PREROUTING)給改映射端口!
iptables -t nat -A PREROUTING -d 192.168.126.130(本機端口) -p tcp –dport 80 -j REDIRECT –to-port 8080
自定義鏈:如果沒被匹配到默認就會返回調用鏈,不過還是建議加上返回 -j RETURN
iptables -N web_in
iptables -A web_in -d 192.168.126.0/24 -p tcp –dport 80 -j ACCEPT
雖然這樣加上了但是不會被引用
還要在默認鏈上加上引用
iptables -I FORWARD 2 -d 192.168.126.0/24 -p –dport 80 -j web_in
這樣就會把來自192.168.126.0/24網絡上的主機的轉發請求跳轉到 web_in這條鏈上去了
原創文章,作者:qzx,如若轉載,請注明出處:http://www.www58058.com/54725