最近工做上一個做業用到了iptables命令,主要進行端口映射,在網上查了好多資料,儘管有不少例子,但仍是整了好幾天才整明白。在這裏將學習到的知識總結一下。如下均屬我的看法。(有一些是從網絡中總結的,不斷完善中...)linux
1、基本知識瀏覽器
(1) iptables簡介安全
iptables是一個Linux下優秀的nat+防火牆工具,iptables操做的是2.4以上內核的netfilter,因此須要linux的內核在2.4以上。其功能性與安全性遠遠比其前輩ipforward、ipchains強大,iptables大體是工做在OSI七層的2、3、四層。服務器
首先簡單介紹一下netfilter的大體工做流程,也就是一個數據包(或者分組,packet),在到達linux的網絡接口(網卡)的時候,如何處理這個包。而後再介紹一下如何利用iptables改變或控制這個數據包。網絡
netfilter的內部有三個表嗎,分別是filter、nat和mangle。每一個表有不一樣的操做鏈(Chain)。tcp
filter表中,即起防火牆功能的表,定義了三個Chain,分別是INPUT、FORWARD、OUTPUT(即對包的進入、轉發和出進行定義的三個鏈),對這個filter表的操做是實現防火牆功能的一個重要手段。工具
nat表(Network Address Translation網絡地址翻譯),定義了PREROUTING、POSTROUTING、OUTPUT三個鏈,主要用於實現地址轉換和端口轉發。學習
mangle表,是一個自定義表,包括上述的filter和nat表中的各類chains,它可讓咱們進行一些自定義的操做。mangle表中的chains存在netfilter對包的處理流程中處於一個比較優先的位置(對此表的瞭解很少,通常狀況咱們用不到這個mangle表,在此不作介紹)。spa
下述圖清晰的描繪了netfilter對包的處理流程(摘自網上,不知做者是誰,在此深表敬意!)。.net
注:詳細的解說參見以下文章:
http://blog.csdn.net/xingliyuan22/article/details/9047767
(2)基本操做
①iptables命令啓動、中止、重啓、保存:
#/etc/init.d/iptables start
#service iptables start
#/etc/init.d/iptables stop
#/etc/init.d/iptables restart
#service iptables restart
#/etc/init.d/iptables save
②其餘操做詳解見
http://blog.csdn.net/xingliyuan22/article/details/8960917
http://blog.csdn.net/xingliyuan22/article/details/9142891
2、應用
(1)端口映射
前提:一臺Linux雙網卡計算機IP:192.168.1.二、202.201.1.2,內網有一個Web服務器192.168.1.6
要求:在外網的瀏覽器輸入202.201.1.2:8000訪問到192.168.1.6的80Web服務端口
詳細配置:
注意:在此以前要打開端口轉發服務
/etc/sysctl.conf配置文件的 net.ipv4.ip_forward = 1 默認是0
能夠得到root權限修正,也能夠用以下命令:
echo "1" > /etc/sysctl.conf/net.ipv4.ip_forward
①清除原有規則
#iptables -F -t nat
#iptables -F -t filter
#/etc/init.d/iptables save
②配置映射規則
#iptables -t nat -A PREROUTING -d 202.201.1.2 -t tcp --dport 8000 -t tcp -j DNAT -to--destination 192.168.1.6:80
#iptables -t nat -A POSTROUTING -d 192.168.1.6 -p tcp --dport 80 -j SNAT -- to 192.168.1.2
#iptables -A FORWARD -o eth0 -d 192.168.1.6 -p tcp --dport 80 -j ACCEPT
#iptables -A FORWARD -i eth0 -s192.168.1.6 -p tcp --dport 80 -j ACCEPT
#iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
③保存,啓動服務
#/etc/init.d/iptables save
#service iptables restart
注:在/proc/net/ip_conntrack文件裏有包的流向
(2)IP映射
前提:Linux先在一個網卡上追加一個IP地址,Linux上的一個網卡能夠有多個IP地址。
LINUX雙網卡,IP分別爲eth0:192.168.1.2/2四、eth1:192.168.2.2/24
要求:將IP:192.168.2.5映射到LINUX上的192.168.1.2上
①追加linux的eth0一個網址
#ip address add 1.1.1.1/30 brd + dev eth0
②iptables配置
#iptables -A FORWARD -s 192.168.12.95 -j ACCEPT
#iptables -A FORWARD -d 192.168.12.95 -j ACCEPT
#iptables -t nat -A PREROUTING -d 202.201.1.2 -j DNAT -to--destination 192.168.1.6
#iptables -t nat -A POSTROUTING -d 192.168.1.6 -j SNAT -- to -source 192.168.1.2
#/etc/init.d/iptables save
#service iptables restart
注:詳細的解釋參加下述文章: