iptables詳解

  • iptables的工作機制

  • iptables有五個鉤子函數(hook functions),也叫五個規則鏈。

  • 1.PREROUTING (路由前)

  • 2.INPUT (數據包流入口)

  • 3.FORWARD (轉發關卡)

  • 4.OUTPUT(數據包出口)

  • 5.POSTROUTING(路由后)

  •   這是NetFilter規定的五個規則鏈,任何一個數據包,只要經過本機,必將經過這五個鏈中的其中一個鏈。 

  • iptables的策略

  • 防火墻的3個表:

  • 1.filter 定義允許或者不允許的

  • 2.nat 定義地址轉換的 

  •                 3.mangle功能:修改報文原數據

  • 對于filter來講一般只能做在3個鏈上:INPUT ,FORWARD ,OUTPUT

  • 對于nat來講一般也只能做在3個鏈上:PREROUTING ,OUTPUT ,POSTROUTING

  • 而mangle則是5個鏈都可以做:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING

  • 注意:規則的次序非常關鍵,誰的規則越嚴格,應該放的越靠前,而檢查規則的時候,是按照從上往下的方式進行檢查的。

  • 一.規則的寫法:

  •  iptables定義規則的方式比較復雜:

  •  格式:iptables [-t table] COMMAND chain CRETIRIA -j ACTION

  •  -t table :3個filter nat mangle

  •  COMMAND:定義如何對規則進行管理

  •  chain:指定你接下來的規則到底是在哪個鏈上操作的,當定義策略的時候,是可以省略的

  •  CRETIRIA:指定匹配標準

  •  -j ACTION :指定如何進行處理

  •  比如:不允許172.16.0.0/24的進行訪問。

  •  iptables -t filter -A INPUT -s 172.16.0.0/16 -p udp –dport 53 -j DROP

  •  當然你如果想拒絕的更徹底:

  •  iptables -t filter -R INPUT 1 -s 172.16.0.0/16 -p udp –dport 53 -j REJECT

  • 二:詳解COMMAND:

  • 1.鏈管理命令(這都是立即生效的)

  • -P :設置默認策略的(設定默認門是關著的還是開著的)

  • 默認策略一般只有兩種

  • iptables -P INPUT (DROP|ACCEPT)  默認是關的/默認是開的

  • 比如:

  • iptables -P INPUT DROP 這就把默認規則給拒絕了。并且沒有定義哪個動作,所以關于外界連接的所有規則包括Xshell連接之類的,遠程連接都被拒絕了。

  • 注意:一般來說不要改默認的規則

  •         -F: FLASH,清空規則鏈的(注意每個鏈的管理權限)

  •     iptables -t nat -F PREROUTING

  •     iptables -t nat -F 清空nat表的所有鏈

  •         -N:NEW 支持用戶新建一個鏈

  •             iptables -N inbound_tcp_web 表示附在tcp表上用于檢查web的。

  •         -X: 用于刪除用戶自定義的空鏈

  •             使用方法跟-N相同,但是在刪除之前必須要將里面的鏈給清空昂了

  •         -E:用來Rename chain主要是用來給用戶自定義的鏈重命名

  •             -E oldname newname

  •          -Z:清空鏈,及鏈中默認規則的計數器的(有兩個計數器,被匹配到多少個數據包,多少個字節)

  •             iptables -Z :清空

  • 2.規則管理命令

  •          -A:追加,在當前鏈的最后新增一個規則

  •          -I num : 插入,把當前規則插入為第幾條。

  •             -I 3 :插入為第三條

  •          -R num:Replays替換/修改第幾條規則

  •             格式:iptables -R 3 …………

  •          -D num:刪除,明確指定刪除第幾條規則

  •         

  • 3.查看管理命令 “-L”

  •  附加子命令

  •  -n:以數字的方式顯示ip,它會將ip直接顯示出來,如果不加-n,則會將ip反向解析成主機名。

  •  -v:顯示詳細信息

  •  -vv

  •  -vvv :越多越詳細

  •  -x:在計數器上顯示精確值,不做單位換算

  •  –line-numbers : 顯示規則的行號

  •  -t nat:顯示所有的關卡的信息

  • 三:詳解匹配標準

  • 1.通用匹配:源地址目標地址的匹配

  •  -s:指定作為源地址匹配,這里不能指定主機名稱,必須是IP

  • IP | IP/MASK | 0.0.0.0/0.0.0.0

  • 而且地址可以取反,加一個“!”表示除了哪個IP之外

  •  -d:表示匹配目標地址

  •  -p:用于匹配協議的(這里的協議通常有3種,TCP/UDP/ICMP)

  •  -i eth0:從這塊網卡流入的數據

  • 流入一般用在INPUT和PREROUTING上

  •  -o eth0:從這塊網卡流出的數據

  • 流出一般在OUTPUT和POSTROUTING上

  •         

  • 2.擴展匹配

  • 2.1隱含擴展:對協議的擴展

  •     -p tcp :TCP協議的擴展。一般有三種擴展

  • –dport XX-XX:指定目標端口,不能指定多個非連續端口,只能指定單個端口,比如

  • –dport 21  或者 –dport 21-23 (此時表示21,22,23)

  • –sport:指定源端口

  • –tcp-fiags:TCP的標志位(SYN,ACK,FIN,PSH,RST,URG)

  •     對于它,一般要跟兩個參數:

  • 1.檢查的標志位

  • 2.必須為1的標志位

  • –tcpflags syn,ack,fin,rst syn   =    –syn

  • 表示檢查這4個位,這4個位中syn必須為1,其他的必須為0。所以這個意思就是用于檢測三次握手的第一次包的。對于這種專門匹配第一包的SYN為1的包,還有一種簡寫方式,叫做–syn

  •     -p udp:UDP協議的擴展

  •         –dport

  •         –sport

  •     -p icmp:icmp數據報文的擴展

  •         –icmp-type:

  • echo-request(請求回顯),一般用8 來表示

  • 所以 –icmp-type 8 匹配請求回顯數據包

  • echo-reply (響應的數據包)一般用0來表示

  •                   

  • 2.2顯式擴展(-m)

  •      擴展各種模塊

  •       -m multiport:表示啟用多端口擴展

  •       之后我們就可以啟用比如 –dports 21,23,80

  • 四:狀態檢測:state

  • 是一種顯式擴展,用于檢測會話之間的連接關系的,有了檢測我們可以實現會話間功能的擴展

  •         什么是狀態檢測?對于整個TCP協議來講,它是一個有連接的協議,三次握手中,第一次握手,我們就叫NEW連接,而從第二次握手以后的,ack都為1,這是正常的數據傳輸,和tcp的第二次第三次握手,叫做已建立的連接(ESTABLISHED),還有一種狀態,比較詭異的,比如:SYN=1 ACK=1 RST=1,對于這種我們無法識別的,我們都稱之為INVALID無法識別的。還有第四種,FTP這種古老的擁有的特征,每個端口都是獨立的,21號和20號端口都是一去一回,他們之間是有關系的,這種關系我們稱之為RELATED。

  • 所以我們的狀態一共有以下幾種:

  •     NEW :新連接請求;

  •         ESTABLISHED:已建立的連接

  •         RELATED:相關聯的連接,當前連接是一個新請求,但附屬于某個已存在的連接

  •         INVALID:無法識別的連接

  •  UNTRACKED:未追蹤的連接

  • 比如: iptables -I OUTPUT -s 172.16.0.6 -m state –state ESTABLISHED -j ACCEPT

  • 注解:請求只要能進來,就允許出去。

  • 裝載連接追蹤模塊:內核模塊裝載

  • lsmod | less 查看linux模塊

  • 手動裝載modprobe nf_conntrack模塊

  • modprobe nf_conntrack_ipv4

  • modprobe nf_conntrack_ftp

  • cd /proc/sys/net/  cat nf_conntrack

  • 五:處理動作(跳轉目標)

  • 簡單target:

  • ACCEPT ,DROP

  • 擴展target:

  • REJECI

  • LOG(日志)

  • 保存和載入規則:

  • iptables-save保存到標準輸出

  • iptables-save > /etc/sysconfig/iptables-v1 重定向到文件中

  • 重載之前的防火墻策略 iptables-restore < /etc/sysyconfig/iptables-v1

  • iptables-restore

  • -n,–noflush:不清除原有規則

  • -t,–test:僅分析生成規則集,但不提交

  • 設置開機啟動iptabels:

  • chkconfig –level 3 5 iptabels on

  • centos 6:

  • 保存規則:

  • service iptabels save

  • 保存規則于/etc/sysconfig/iptables文件,覆蓋保存;

  • 重載規則:

  • service iptables restart

  • 默認重載/etc/sysconfig/iptables文件中的規則

  • 規則優化的思路:

  • (1)優先放行雙方向狀態為ESTABLISHED的報文;

  • (2)服務不同類別的功能的規則,匹配到報文可能性更大的放前面

  • (3)服務同一類別的功能的規則,匹配條件較嚴格的放在前面;

  • (4)設置默認策略:白名單機制;一般來說不建議

原創文章,作者:jjjhn,如若轉載,請注明出處:http://www.www58058.com/66593

(0)
jjjhnjjjhn
上一篇 2017-03-15 19:09
下一篇 2017-03-15 19:09

相關推薦

  • DNS服務器搭建從協議到實現詳解

    一、域名和服務概述    1.FQDN:Fully Qualified Domain Name,完全限定域名,全局唯一           FQDN是指主機名加上全路徑,全路徑中列出了序列中所有域成員。全域名可以從邏輯上準確地表示…

    Linux干貨 2016-04-30
  • N25-第三周作業

    第三周 一、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。 [root@zf ~]# who | cut -d " " -f1  | sort | uniq -…

    Linux干貨 2016-12-20
  • 第三周 磁盤文件系統進階

    文件系統的使用:     首先要“掛載”:mount 命令和umount命令     根文件系統這完的其他文件系統要想能夠訪問, 都必須通過“關聯”至根文件上的某個目錄來實現,次關聯操作即為“掛載”;此目錄幾位“掛載點”;     掛載點:mount-point,用于做為另一個文件系統的訪問入口; …

    Linux干貨 2016-11-22
  • Linux發行版及哲學思想

    Linux各發行版以及哲學思想 什么是Linux 為什么會有不同的Linux發行版 現有主流發行版,及其他們之間相互關系 Linux所遵循的哲學思想 什么是Linux Linux是一種自由和開放源代碼的Unix-like操作系統,由當時就讀于芬蘭赫爾辛基大學的Linus Torvalds于1991年10月5日首次發布于互聯網。Linux遵循第二版GNU通用公…

    Linux干貨 2016-10-29
  • 文件目錄介紹

    對于操作系統的目錄感覺總是記不住,今天結合上課筆記和自己的理解總結一下:/——-執行操作時總是要跳轉到不同的目錄,根是一個樹狀結構,下面介紹都是根下的目錄以及相關介紹├── bin 存放用戶使用的基本命令(可執行程序,二進制文件)、分區的時候不會單獨給它分區├── boot  跟內核有關的文件├── cgroup &nbsp…

    Linux干貨 2017-04-10
  • 用戶和組相關的配置文件

    目錄 l  用戶 l  組賬號 l  UID和GID號 l  /etc/passwd分析 l  /etc/shadow分析 l  /etc/group分析 l  /etc/gshadow分析 l  通過用戶和用戶組配置文件來查詢或管理用戶 l  總結 1、用戶(User…

    Linux干貨 2016-10-23
欧美性久久久久