iptables

一、前言

什么是iptables?當我們啟動iptables時,使用service命令可以啟動iptables。但是并非使用service啟動的iptables就能說明其是一個服務。Iptables是一個便以我們寫規則的工具,真正起作用的是內核中的netfilter一個框架。Netfilter內置了5個hook函數,當一個數據包交由此機器時,經過這5個hook函數的其中某個才能進入用戶空間,或者轉發出去。

二、netfilter工作原理

netfilter2.png

當數據包到達目標主機時,經過PREROUTING鏈,經路由之后決定是否轉發,不轉發則進入INPUT鏈,到達用戶空間。進程對外通信時,經由OUTPUT鏈出去,路由之后到達POSTROUTING鏈,經網卡出去。當一數據包經過PREROUTING鏈發現其不是到達本主機,那么數據包經過FORWARD鏈,到達 POSTROUTING鏈轉發出去。本機進程對發送數據時,經由OUTPUT鏈路由之后進入POSTROUTING鏈出去。iptables匹配規則時,是自上而下匹配的,匹配到第一條規則時既跳出,否則一直往下匹配,沒有則使用默認規則。

五個hook函數分別是PREROUTING,INPUT ,OUTPUT,POSTROUTING,FORWARD,我們把這五個鉤子函數稱為鏈,Netfilter實現了幾功能,raw ,mangle,nat,filter。我們一般把這幾個功能稱為表,表之間有優先級關系,從低到高為filter—-nat—-mangle—-raw,表與鏈之間有對應關系,具體見圖表。

filter INPUT FORWARD OUPUT
nat PREROUTING(DNAT) POSTROUTING(SNAT) OUTPUT
mangle PREROUTING INPUT FORWARD OUTPUT POSTROUTING
raw PREROUTING OUTPUT

iptables規則建立時,首先需要確定功能(表),確定報文流向,確定要實現的目標,確定匹配條件。iptables時,盡量遵循以下規則:盡量減少規則條目,彼此間無關聯,訪問條目大放上面,有關聯(同一功能),規則更嚴格的放上面

三、基本語法

iptables [-t TABLE] COMMAND CHAIN  CRETIRIA -j TARGET

-t TABLE :  TABLE為nat,mangle,raw,filter中的一個,默認為filter

                  COMMAND 

                    鏈 : -F 清空規則鏈

                            -N 自建一條鏈

                            -X 刪除一條自定義空鏈

                            -Z 計數器歸零

                            -P 設置默認策略

                            -E 重命名自定義鏈

iptables –t nat -F                  
iptables –t filter –N web_services                   
iptables –t filter  –X web_services 
iptables –t filter   -Z 
iptables –t filter  –P DROP                     
iptables –t filter  –E web_services www_services

                         規則:

                            -A 在規則鏈最后添加一條規則

                            -I 在規則鏈中插入一條規則,默認為第一條

                            -D 刪除一條規則鏈

                            -R 替換規則鏈

               
iptables –t filter –A www_services –p tcp –-dport 80 –j ACCEPT                   
iptables –t filter –I www_services –p tcp –-dport 22 –j ACCEPT 
iptables –t filter –D www_services –p tcp –-dport 22 –j ACCEPT
iptables –t filter –D www_services 1                    
iptables –t filter –R www_services –p tcp –dport 22 –j DROP

                         查看:

                            -L: List

                        子選項:

                                -n: numeric

                                -v, -vv, -vvv

                                -x: eXactly

                                –line-numbers

                              iptables –t filter –L –n –v

                 CRETIRIA

                         通用匹配

                                -s, –src, –source:

                                -d, –dst, –destination:

                                -p {tcp|udp|icmp}:

                                -i IN_IF:

                                -o OUT_IF:

                            擴展匹配:

                        調用netfilter額外模塊實現特殊檢查機制,(使用到相關功能,要使用iptables命令的-m選項來指定調用哪個模塊)

                                隱式擴展:

                                  -p tcp [-m tcp]

                                  –sport PORT[-PORT]

                                  –dport

                                  –tcp-flag 要檢查標志位列表(用逗號分隔)  必須為1的標志位列表(逗號分隔)

                                  -p icmp [-m icmp]

                                    –icmp-type

                                     0: echo-reply, ping響應

                                     8: echo-request, ping請求

iptables -t filter -A INPUT -p icmp --icmp-type 8 -j DROP                        
iptables -t filter -A INPUT -p tcp --tcp-flags syn,ack,rst,fin syn -j DROP               
iptables -t filter -A INPUT -p tcp --dport 80 --tcp-flags all none -j DROP

                           顯式擴展:

                                -m 擴展模塊名稱

                          模塊:iptables,netfilter各擁有一部分代碼

                                   multiport: 多端口匹配,可用于匹配非連續或連續端口;最多指定15個端口;

                                            –source-ports, –sports port[,port,port:port]

                                            –destination-ports, –dports

                                            –ports

iptables -I INPUT -d 192.168.19.128 -p tcp -m multiport --dports 22,80 -j ACCEPT           
iptables -I OUTPUT -s 192.168.19.128 -p tcp -m multiport --ports 22,80 -j ACCEPT

                                   iprange: 匹配指定范圍內的地址,匹配一段連續的地址而非整個網絡時有用;

                                            [!] –src-ragne IP[-IP]

                                            [!] –dst-range

iptables -A INPUT -d 192.168.19.128 -p tcp --dport 23 -m iprange --src-range 192.168.19.129-192.168.19.135 -j ACCEPT                  
iptables -A OUTPUT -s 192.168.19.128 -p tcp --sport 23 -m iprange --dst-range 192.168.19.129-192.168.19.135 -j ACCEPT

                                    string: 字符串匹配,能夠檢測報文應用層中的字符串

                                            –algo {kmp|bm}

                                            –string "STRING"

                                            –hex-string "HEX_STRING": HEX_STRING為編碼成16進制格式的字串;

                                              iptables -I OUTPUT -m string –algo bm –string "sex" -j DROP

                                    time: 基于時間做訪問控制

                                            –datestart YYYY[-MM][-DD[Thh[:mm[:ss]]]]

                                            –datestop

                                 –timestart hh:mm[:ss]

                                            –timestop hh:mm[:ss]

                                            –weekdays day[,day]

                                               iptables -I INPUT -d 192.168.19.128 -p tcp –dport 80 -m time –timestart 08:20 –timestop 18:00 –weekdays Mon,Tue,Thu,Fri -j REJECT

                                    connlimit: 連接數限制,對每IP所能夠發起并發連接數做限制;

                                            [!] –connlimit-above [n]

                                              iptables -A INPUT -d 172.16.100.7 -p tcp –dport 22 -m connlimit –connlimit-above 2 -j DROP

                                    limit: 速率限制

                                            –limit n[/second|/minute|/hour|/day]

                                            –limit-burst n

                                               iptables -A INPUT -d 192.168.19.128 -p icmp –icmp-type 8 -m limit –limit 20/minute –limit-burst 5 -j ACCEPT

                                    state: 狀態檢查

                                            –state

                                             連接追蹤中的狀態:

                                               NEW: 新建立一個會話

                                               ESTABLISHED:已建立的連接

                                               RELATED: 有關聯關系的連接

                                               INVALID: 無法識別的連接

                                     iptables -t filter -A OUTPUT -p tcp –sport 22 -m state –state NEW -j DROP 

                                     放行被動模式下的FTP服務:

                                                 1、裝載模塊/lib/modules/KERNEL_VERSION/kernel/net/netfilter/

                                                 模塊:nf_conntrack_ftp

modprobe nf_conntrack_ftp                                    
lsmod | grep nf_conntrack_ftp                            
nf_conntrack_ftp       12913  0                             
nf_conntrack                            
79758  3 nf_conntrack_ftp,nf_conntrack_ipv6,xt_state

                                                 2、放行請求報文:

                                                 (1)放行NEW狀態對21端口請求的報文;

                                        iptables -A INPUT -p tcp –dport 21 -m –state NEW -j ACCEPT

                                                  (2) 放行ESTABLISHED以及RELATED狀態的報文

                                        iptables -A INPUT -m –state ESTABLISHED,RELATED -j ACCEPT

                                                 3、放行響應報文:

                                                  (1) 放行ESTABLISHED以及RELATED狀態的報文

                                         iptables -A OUTPUT -m –state ESTABLISHED,RELATED -j ACCEPT

                                                 由于系統對調整連接追蹤功能所能容納的連接有最大數目,視具體清空調整最大連接數目,或者不啟用此功能

                                                 cat /proc/sys/net/nf_conntrack_max

                                     65536

                                                 其中當前追蹤的所有連接在/proc/net/nf_conntrack中

                                                 /proc/net/nf_conntrack

                                                  不同協議或連接類型追蹤時的屬性,/proc/sys/net/netfilter目錄:

              TARGET: (-j target)

                                   ACCEPT, REJECT, DROP, SNAT, DNAT, MASQERADE, RETURN, LOG, REDIRECT, MARK

                                SNAT:

                                –to-source SIP

                                    DNAT

                                –to-destination

iptables -t nat -A POSTROUTING -p tcp --dport 23210 -j SNAT --to-source 192.168.19.129       
iptables -t nat -A PREROUTING -p tcp --dport 23220 -j DNAT --to-destination 192.168.19.129     
iptables -A INPUT -d 192.168.19.128 -p tcp --dport 80 -j LOG --log-prefix "from iptables: "

四、 案例

4.1、實驗拓撲圖

iptables實驗拓撲.png

4.2、配置過程

搭建環境

在firewall添加一塊網卡,同時網絡連接為自定義–VMnet3,webserver和client的網絡連接也自定義在VMnet3上

  blob.png

Firewall配置ip,其中eth1網卡ip地址是自動獲取的

blob.png

Webserver

blob.png

添加網關

blob.png

Client

blob.png

添加網關

blob.png

為了不讓已有iptables規則對實驗產生影戲,先清空規則鏈

在所有主機上執行這些命令

blob.png

此時在webserverclient 上無法ping通外網

blob.png 

當需要使用轉發功能時,需要打開網絡轉發功能

Vim /etc/sysctl.conf

Net.ipv4.ip_forward=1

Sysctl –p

blob.png 

配置SNAT

blob.png

或者

blob.png

測試,在webserver上測試

blob.png

遠程主機返回應答的包到目標主機時,沒有在防火墻上做地址轉換,卻依然能把數據包轉發給webserver,這是因為防火墻那臺主機上維持了一張轉換或的IP或端口對應表,故無需人為去添加轉換規則。

在防火墻上添加DNAT

blob.png

在物理機上訪問172.16.0.2的網站

blob.png

五、總結

iptables可做主機防火墻和網絡防火墻,做為網絡防火墻時需要打開轉發功能,iptables規則順序很重要,其自上而下匹配的規則鏈,故需要一條一條檢查規則鏈,故常用規則,特別是匹配次數大的放在上邊,同一規則更嚴格的條目放在上面。

原創文章,作者:成吉思汗,如若轉載,請注明出處:http://www.www58058.com/8950

(2)
成吉思汗成吉思汗
上一篇 2015-10-27
下一篇 2015-10-27

相關推薦

  • 詳解用戶,組,權限管理

    詳解用戶,組,權限管理 M21-陸東貴 測試環境:CentOS 7.2 內容介紹: 我們要使用操作系統進行工作,就需要人機交互操作,這時候計算機就需要創建用戶,通過用戶來實現操作,而且隨著用戶的增加需要給用戶分組,這時候就需要對文件進行權限管理。 需要使用的工具:       用戶相關工具:useradd; …

    Linux干貨 2016-10-25
  • 馬哥教育網絡班19期+第8周課程練習

    1、請描述網橋、集線器、二層交換機、三層交換機、路由器的功能、使用場景與區別。     網橋用來連接兩個不同的網絡間的設備;集線器的作用是把接受的信號放大,從另一個端口再穿法出去,說白了就是延長網絡的傳輸距離;   二層交換機工作在數據鏈路層,根據源和目的MAC地址進行數據轉發;三層交換機就是具有部分路由器功能的交換機,三層交換…

    Linux干貨 2016-07-07
  • N25-第6周

    vim:    模式化的編輯器        基本模式:            編輯模式,命令模式,            輸入模式       &n…

    Linux干貨 2017-02-13
  • 20160808作業

    ?1、刪除/etc/grub2.conf文件中所有以空白開頭的行行首的空白字符      ?2、刪除/etc/fstab文件中所有以#開頭,后面至少跟一個空白字符的行的行首的#和空白字符      ?3、在/root/install.log每一行行首增加#號  &nbs…

    Linux干貨 2016-08-11
  • 快速刪除無用包組

    快速刪除無用組 第一步: [root@cloud ~]# yum grouplist >> list.txt 第二步: 編輯 list.txt把需要留下來的刪除 第三步: 創建腳本 remove.sh 運行 #/bin/bash # # while read…

    Linux干貨 2016-06-09
  • shell腳本總結

    shell進階:列表生成方式:列表生成方式:(1) 直接給出列表 以空白為間隔(2) 整數列表:(a) {start..end}(b) $(seq [start [step]] end)(3) 返回列表的命令$(COMMAND)(4) 使用glob,如:.sh(5) 變量引用;$@, $while read line(用法)(用于遍歷文件,進行處理…

    Linux干貨 2017-07-10

評論列表(2條)

  • stanley
    stanley 2015-10-27 23:19

    贊,已置頂,有機會可以給大家分享寫blog經驗

    • 成吉思汗
      成吉思汗 2015-10-30 17:26

      @stanley謝謝,新手不敢造次呀

欧美性久久久久