網絡知識學習:iptables學習

前言:
學習iptables,需要知道它的工作原理,我們可以把它歸納成“三表五鏈”,其中“三表”分別爲nat表、filter表以及raw表,“五鏈”爲PREROUTING、FORWARD、POSTROUTING、INPUT、OUTPUT,至於他們到底怎麼配置,有什麼作用,請看下文。

特別注意:
對於centOS 7最小化系統而言,並沒有自帶iptables服務,需要手動安裝。

一、iptables原理


  iptalbes工作流程:
    1.當啓動服務時,會從/etc/sysconfig/iptables讀取配置啓動
    2.當一個數據包進入網卡時,它首先進入PREROUTING鏈,內核根據數據包目的IP判斷是否需要轉送出去。
    3.如果數據包就是進入本機的,它就會沿着圖向下移動,到達INPUT鏈。數據包到了INPUT鏈後,任何進程都會收到它。本機上運行的程序可以發送數據包,這些數據包會經過OUTPUT鏈,然後到達POSTROUTING鏈輸出。
    4.如果數據包是要轉發出去的,且內核允許轉發,數據包就會如圖所示向右移動,經過FORWARD鏈,然後到達POSTROUTING鏈輸出。

 

關於“三表”:
    filter 這個表主要用於過濾包的,是系統預設的表,內建三個鏈:INPUT,OUTPUT以及FORWARD鏈的作用是在包剛剛到達防火牆時改變他的目的地址,如果需要的話,OUTPUT鏈改變本地產生的包的目的地址,POSTROUTING鏈在包就要離開防火牆之前改變其源地址
    nat 主要作用於修改數據包的TOS(Type Of Service,服務類型),TTL(Time Tolive ,生存週期)值以及爲數據包設值MARK標記,以實現Qos(Quality of Service,服務質量)調整以及策略路由等應用,由於需要相應的路由設備支持,因此應用並不廣泛。五個鏈:PREROUTING,POSTROUTING,INPUT,OUTPUT,FORWARD
    raw 對報文設置一個標誌,決定數據包是否被狀態跟蹤機制處理,只有兩個鏈:OUTPUT,PREROUTING


二、iptables常用參數


  因爲iptables配置默認是配置filter表,因此本小節只介紹filter表,不過以下參數對於nat、raw表依舊適用。

iptables -A 增加規則
iptables -D 刪除規則
iptables -I 插入規則 
iptables -Z 計數器清零
iptables -F 清除當前規則,不能清除規則
iptables -P INPUT DROP 設定默認規則,不能用-F清除規則,只能用iptables -P ACCEPT才能恢復
iptables (-t nat) --line-number-nvL 查看nat表規則(帶有ID號)
                  -t爲需要配置的表,默認是filter表
  '-j' 跳轉到相應的動作,常用有ACCEPT、DROP、REJECT         、MASQUERADE(僞裝)
  '-s' 後面跟源地址
  '-d' 後面跟目的地址
  '-p' 後面跟協議,有tcp、udp、icmp等
  '--sport' 後面跟源端口號
  '--dport' 後面跟目的端口號
  '-i' 後面跟輸入設備,如eth0
  '-o' 後面跟輸出設備,如eth0
  
注意:上面所說的"源"和"目的"(或者成爲輸入和輸出)注意區分,對於INPUT鏈來說,源是對方,目的是本機,對於OUTPUT鏈來說則是反過來的,相信這麼說你會明白的。如果還是不明白,請繼續讀一遍工作流程。


三、iptables規則的保存、備份與恢復

規則保存:service iptables save
規則備份:iptables-save > myipt.rule (備份)可以把防火牆規則保存到指定文件中
規則恢復:iptables-restore < myipt.rule (恢復)這樣可以已保存到指定文件的規則
關閉服務:service iptables stop   注意:只要有規則的增加,就會自動開啓服務

四、iptables的nat表應用


  路由器就是使用iptables的nat原理實現,舉兩個栗子

 Q1:假設你的機器上有兩塊網卡eth0,eth1,其中eth0的IP爲192.168.10.11,eth1的IP爲172.16.10.11,eth0連接了internet但是eth1沒有連接,現在又另一臺機器172.16.10.12和eth1是互通的,那麼如何設置也能夠讓eth1的這臺機器能夠連接internet呢?
 解題思路:打開主機的地址轉發功能——————>   echo "1"> /proc/sys/net/ipv4/ip_forward
 問題解析:/proc/sys/net/ipv4/ip_forward文件,默認是0。
         意爲禁止數據包的轉發,因此如果把它裏面的內容置爲1,則允許數據包的轉發,用於有一張以上的網卡。
         重啓服務器之後又會變爲0,因此如果想自動執行,可以將該命令寫入到腳本/etc/rc.d/rc.local中
 A1:iptables -t nat -A POSTROUTING -s 172.16.10.0/24 -o eth0 -j MASQUERADE
Q2:如何將本地80端口的請求轉發到8080端口,當前主機ip爲192.168.2.18
A2:iptables -t nat -I POSTROUTING -d 192.168.2.18 -p tcp --dport 80 -j DNAT --to 192.168.2.18:8080
    

五、拓展學習

  1.iptables支持時間控制用戶的行爲,如:指定工作日的8點到18點期間才能訪問445端口
    iptables -A INPUT -p tcp --dport 445 -m time --weekdays Mon,Tus,Wed,Thu,Fri --timestart 08:00:00 --timestop 18:00:00 -j ACCEPT
  2.iptables寫一條規則,只同時允許443,80,1723,22,3306,11211,25,110,dns,ntp協議,其他端口拒絕,即多端口開放
    iptables -I INPUT -p tcp -m multiport --dport 443,80,1723,22,3306,11211,25,110,53,123 -j ACCEPT
    iptables -P INPUT -j DROP

 

發佈了73 篇原創文章 · 獲贊 23 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章