1. 程式人生 > >Linux 之 使用iptables作為防火墻

Linux 之 使用iptables作為防火墻

linux服務 轉發 nat表 oss sta round 興趣 sysctl margin

技術分享圖片 技術分享圖片

上面左邊是我的個人微信,如需進一步溝通,請加微信。 右邊是我的公眾號“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作為防火墻