Linux 之 使用iptables作為防火墻
上面左邊是我的個人微信,如需進一步溝通,請加微信。 右邊是我的公眾號“Openstack私有雲”,如有興趣,請關註。
近期朋友一個防火墻故障,在緊急情況下,將外網專線插到一臺linux服務器(紅帽rhel5.3),使用linux的iptables完成了原來防火墻的端口轉換NAT功能以及內網服務器上網的功能。下面記錄一下過程。
在操作之前,復習了一下iptables的原理,我參考了下面這個網址,介紹的非常詳細:
https://www.cnblogs.com/clsn/p/8308678.html
另外,參考了下面這個網址,和我的應用環境非常相似,都是單獨使用一臺linux服務器作為防火墻使用,提供給內網服務器nat地址端口轉換以及上外網:
http://yjph83.iteye.com/blog/2105074
iptables主要有3個表filter、nat、mangle,5個鏈INPUT、OUTPUT、FORWORD、PREROUTING、POSTROUTING,可以實現非常復雜的各類防火墻功能,比如本機服務器的消息過濾、轉發,nat端口映射,內外網消息轉發等等。在我的應用當中,主要用到nat端口映射和內網外消息轉發。
其他不多說,上重點,下面這張圖,是簡化了的iptables包處理流程圖,消息從左到右。
1、使用一對一nat端口映射功能,消息流是圖的下面直線那條線路,也就是說,需要配置NAT表的PREROUTING鏈,FILTER表的FORWORD鏈,以及NAT表的POSTROUTING鏈;
2、實現內網共享上網功能,其實使用的也是nat地址轉換功能,需要在NAT表的POSTROUTING鏈上將內網的源地址轉換為外網地址,同樣的,還要設置FILTER表的FORWORD鏈,使內網的消息能夠雙向通過。對iptables設置完成之後,在內網需要共享上網的服務器上,需要將網關直接設置為iptables所在的服務器的內網IP地址。
操作記錄:
簡單說明一下網絡結構,linux防火墻服務器的eth0連內網,eth3連外網,eth0地址10.1.1.8 ,eth3外網地址121.1.2.3 。其他內網服務器連接內網,網段是10.1.1.0/24,網關設置為10.1.1.8 。
一、 一對一NAT端口映射設置
1、首先將linux核心參數net.ipv4.ip_forward=1 打開
#vi /etc/sysctl.conf ~~ net.ipv4.ip_forward = 1 ~~ #sysctl -p
2、配置NAT表的PREROUTING鏈
iptables -t nat -A PREROUTING -d 121.1.2.3 -p tcp --dport 9998 -j DNAT --to 10.1.1.66:3389
3、配置NAT表的POSTROUTING鏈
iptables -t nat -A POSTROUTING -d 10.1.1.66 -p tcp --dport 3389 -j SNAT --to 10.1.1.8
4、配置FILTER表的FORWORD鏈
iptables -A FORWARD -o eth0 -d 10.1.1.66 -p tcp --dport 3389 -j ACCEPT
5、配置FILTER表的FORWORD鏈,使鏈路處於ESTABLISHED,RELATED狀態消息回來的時候能夠原路返回:
iptables -A FORWARD -i eth0 -s 10.1.1.66 -p tcp --sport 3389 -m state --state ESTABLISHED,RELATED -j ACCEPT
上面的設置是以10.1.1.66內網端口3389映射到外網121.1.2.3的9998端口為例。其他的一對一端口映射一樣的設置方法。
二、實現內網共享上網功能
1、在NAT表的POSTROUTING鏈上將內網的源地址轉換為外網地址:
iptables -t nat -A POSTROUTING -s 10.1.1.0/24 -o eth3 -j SNAT --to-source 121.1.2.3
2、設置FILTER表的FORWORD鏈,使內網的消息能夠雙向通過:
iptables -A FORWARD -i eth0 -s 10.1.1.0/24 -j ACCEPT
iptables -A FORWARD -i eth0 -d 10.1.1.0/24 -j ACCEPT
3、在內網服務器上將網關設置為10.1.1.8:
route add default gw 10.1.1.8
4、在內網服務器上設置DNS地址:
#vi /etc/resolv.conf
nameserver xxx.xx.xx.x //根據實際情況設置
5、設置DNS端口udp 53端口能夠通過,參考上面的“一對一NAT端口映射設置進行設置”方法進行設置
特別說明:
在我的環境當中,iptables表有一個鏈 RH-Firewall-1-INPUT ,簡化了filter表的設置,對於需要通過filter的端口,需要在這個RH-Firewall-1-INPUT鏈中添加規則。比如:
iptables -I RH-Firewall-1-INPUT 12 -p tcp --dport 3389 -m state --state NEW -j ACCEPT
Linux 之 使用iptables作為防火墻