Linux iptables配置應用

                Linux iptables配置應用

概述:

   Linux的防火墻體系主要工作在網絡層,只對tcp/ip數據包實施過濾和限制,屬于典型的包過濾防火墻(或稱為網絡層防火墻)。Linux的防火墻體系基于內核編碼實現,因此具有非常好的性能和效率,因此被更加廣泛的采納和應用。

 

Iptables

  Firewall:隔離工具;Packets Filter Firewall;工作于主機或網絡的邊緣,對經由的報文根據預先定義的規則(匹配條件)進行檢測,對于能夠被規則匹配到的報文實行某預定義的處理機制的一套組件。

   硬件防火墻:在硬件級別實現部分功能的防火墻;另一個部分功能基于軟件實現;

   軟件防火墻:應用軟件處理邏輯運行于通用硬件平臺之上的防火墻;

   主機防火墻:服務范圍為當前主機;

   網絡防火墻:服務范圍為防火墻背后的局域網;

 

iptables/netfilter

   netfilter:防火墻框架,framework;位于內核空間;

   iptables:命令行工具程序,位于用戶空間;規則管理工具;

 

netfilter

hooks function (鉤子函數)

prerouting

input

forward

output

postrouting

 

iptables的五個鏈:

CHAINS:鏈

PREROUTING:在對數據包作路由選擇之前,應用此鏈中的規則。

INPUT:當接收到訪問防火墻本機地址的數據包(入站)時,應用此鏈中的規則。

FORWARD :當接收到需要通過防火墻發送給其它主機地址的數據包(轉發)時,應用此鏈中的規則。

OUTPUT:當防火墻本機向外發送數據包(出站)時,應用此鏈中的規則。

POSTROUTING:在對數據包作路由選擇之后,應用此鏈中的規則。

 

數據報文流向:

到本機某進程的報文:PREROUTING –> INPUT

由本機轉發的報文:PREROUTING –> FORWARD –> POSTROUTING

由本機的某進程發出報文:OUTPUT –> POSTROUTING

blob.png

iptables四個表(tables):

  filter:過濾,防火墻;

  natnetwork address translation,網絡地址轉換;

  mangle:拆解報文,做出修改,并重新封裝;

  raw:關閉nat表上啟用的連接追蹤機制;

 

iptables四個表的優先級順序(由高到低):

  raw –> mangle –> nat –> filte

 

iptables四個表各自所對應的鏈:

rawPREROUTING,OUTPUT

manglePREROUTINGINPUT,FORWARD,OUTPUT,POSTROUTING

natPREROUTING,INPUT,OUTPUT,POSTROUTING

filterINPUTFORWARD,OUTPUT

 

iptables規則的組成部分:

匹配條件:

  網絡層首部:Source IP, Destination IP

傳輸層首部:Source Port, Destination Port

  擴展檢查機制:需要借助于擴展模塊進行指定的匹配條件

處理動作:target

ACCEPT,DROPREJECT

 

配置iptables規則條件前操作:

netfilter:位于內核中的tcp/ip協議棧報文處理框架;

iptables

CentOS 5/6iptables命令編寫規則;

    # iptables -t filter -F  //清空防火墻規則

   # service iptables save

CentOS 7firewalld,firewall-cmd, firewall-config

   # systemctl disable firewalld  //重啟后,防火墻不會自動啟動

程序包:iptablesiptables包名;

        iptstateiptables依賴包,狀態追蹤機制包;

 

iptables命令匹配條件:

規則:根據指定的匹配條件來嘗試匹配每個流經此處的報文,一旦匹配成功,則由規則后面指定的處理動作進行處理;

匹配條件:

  基本匹配條件:源地址,目標地址,傳輸層協議

  擴展匹配條件:需要借助于擴展模塊進行指定的匹配條件

隱式擴展:已經在基本匹配條件中指明的協議相關的擴展;

顯式擴展:隱式擴展之外的其它擴展匹配條件;

  處理動作:

基本動作:ACCEPTDROP,

擴展動作:需要借助于擴展模塊進行,但無須顯式指定,僅需指明動作;

添加規則時需要考量的問題:

(1) 報文流經的位置:用于判斷將規則添加至哪個鏈;

(2) 實現的功能:用于判斷將規則添加至哪個表;

(3) 報文的方向:用于判斷哪個為“源”,哪個為“目標”;

(4) 匹配條件:用于編寫能夠正確匹配目標報文的規則;

 

規則管理格式:iptables [-t able] COMMAND chain cretieria [-m -m matchname [per-match-options]]  [-j targetname [per-target-options]]

   -t table:指明要管理的表; 默認為filter;

 

COMMANDS

鏈管理控制選項:

-P:定義鏈的默認策略;其target一般可使用ACCEPT、REJECT、DROP

    示例:[root@centos7 ~]# iptables -P INPUT DROP

    -N:自定義規則鏈;僅在默認鏈通過某規則進行調用方可生效;因此,每個自定義鏈都有其引用記數;

    -X:刪除自定義的空的引用計數為0的鏈;

-F:清空指定的鏈,或刪除指定鏈上的規則 ;

-E:重命名自定義的引用計數為0的鏈;

-Z:清空指定鏈上的計數器。

 

鏈規則選項:

-A:追加規則到指定的鏈尾部;

     -I:插入規則到指定的鏈中的指定位置,默認為鏈首;

-D:刪除指定的鏈上的指定規則;

-R,將指定的鏈上的指定規則替換為新的規則;    

 

查看鏈規則選項:

-Llist, iptables [-t table] -L [chain [rulenum]] [options…]

-n:數字格式;

-vverbose,詳細格式信息;

-V:查看iptables命令工具的版本信息;

–line-numbers:顯示鏈上的規則的編號;

-xexactly,顯示計數器的精確值;

計數器:

每條規則以及鏈的默認策略分別有各自的兩個計數器:

  (1) 匹配到的報文的個數:pkts

  (2) 匹配到的所有報文的大小之積:bytes

 

匹配條件:

基本匹配條件

擴展匹配條件

   隱式擴展

   顯式擴展

注意:多重條件之間的隱含邏輯為“與”操作;

基本匹配條件:

[!] -s :檢查報文中的源IP地址是否符合此處指定的地址或地址范圍;

[!] -d :檢查報文中的目標IP地址是否符合此處指定的地址或地址范圍;

[!] -p :檢查報文中傳輸層的協議類型,支持tcp, udp,  udplite, icmp,  icmpv6,esp,  ah, sctp, mh,或者 "all";

[!] -i :檢查報文進入本機時的接口是否符合本處指定的接口;INPUT, FORWARD  and  PREROUTING

[!] -o:檢查報文即將離開本機時經由的接口是否符合本處指定的接口;FORWARD, OUTPUT and POSTROUTING

-m, –match match:顯式指明要使用的擴展模塊;

-j, –jump target:跳轉目標;匹配條件:

 

示例:

  在本機防火墻上只開啟本地網絡pingicmp)協議的報文通過:

  iptables  -t filter -A INPUT -j DROP

  iptables  -t filter -A OUTPUT -j DROP

  iptables  -t filter -I INPUT -s 192.168.3.0/24 -d 192.168.3.5 -p icmp –icmp-type 8 -j ACCEPT

  iptables  -t filter -I OUTPUT -s 192.168.3.5 -d 192.168.3.0/24 -p icmp –icmp-type 0/ -j ACCEPT

 

示例:

  在本機防火墻上只開啟pingicmp)本地網絡中其他主機的報文通過:

  iptables  -t filter -A INPUT -j DROP

  iptables  -t filter -A OUTPUT -j DROP

  iptables -I INPUT -s 192.168.3.0/24 -d 192.168.3.5  -p icmp –icmp-type 0 -j ACCEPT

  iptables -I OUTPUT -s 192.168.3.5 -d 192.168.3.0/24 -p icmp –icmp-type 8 -j ACCEPT

 

示例:

 在本機防火墻只開啟本地網絡openssh遠程登錄:

 iptables  -t filter -A INPUT -j DROP

 iptables  -t filter -A OUTPUT -j DROP

 iptables -I INPUT -s 192.168.3.0/24 -d 192.168.3.5 -p tcp –dport 22 -j ACCEPT

 iptables -I OUTPUT -s 192.168.3.5 -d 192.168.3.0/24 -p tcp –sport 22 -j ACCEPT

 

擴展匹配條件:

   隱式擴展:不用-m選項明確給出要使用的擴展機制的擴展;此處主要指使用-p {tcp|udp|icmp}給定協議后可直接對給定的協議所進行的擴展;

 -p tcp:可直接使用tcp協議對應的擴展選項;

 [!]–sport port[:port]:匹配報文中的傳輸層的源端口;可給出多個連接的端口;

 [!] –dport port[:port]:匹配報文中的傳輸層的目標端口;可給出多個連接的端口;

 [!] –tcp-flags mask comp

SYNACK,FIN,RST,URG,PSH;

mask:要檢查的標志位列表,以逗號分隔,例如SYN,ACK,FIN,RST

compmask給定的眾標志位中,其值必須為1的標志位列表,余下的必須為0;

–tcp-flags SYN,ACK,FIN,RST SYN

 [!] –syn:相當于–tcp-flags SYN,ACK,FIN,RST SYN

-p udp:可直接使用udp協議對應的擴展選項

 [!] –sport port[:port]:匹配報文中的傳輸層的源端口;可給出多個連接的端口;

 [!]–dport port[:port]:匹配報文中的傳輸層的目標端口;可給出多個連接的端口;

-p icmp:可直接使用icmp協議對應的擴展選項;

 [!] –icmp-type {type[/code]|typename}

   –icmp-type 8/0:匹配ping請求報文

 –icmp-type  0/0:匹配對ping請求的響應報文

 

顯式擴展:必須使用-m選項給出matchname的擴展,而且有些擴展都還存在專用選項;

 1、multiport

   以離散或連續的方式定義的多端口匹配條件; Up  to 15 ports can be specified.

[!] –sports port[,port|,port:port]…:指定多個源端口;

[!] –dports port[,port|,port:port]…:指定多個目標端口;

[!] –ports port[,port|,port:port]…:匹配此處指定的源或目標端口;

 

 示例:

   只開放本機防火墻的2223、80端口給本地網絡訪問:

   iptables -A INPUT -j DROP

iptables -A OUTPUT -j DROP

iptables -I INPUT -d 192.168.3.5 -p tcp -m multiport –dports 22,23,80,9000.3306 -j ACCEPT

    iptables -I OUTPUT -s 192.168.3.5 -p tcp -m multiport –sports 22,23,80,9000.3306 -j ACCEPT

2iprange

   以連續的ip地址范圍指明多地址匹配條件;

[!] –src-range from[-to]

[!] –dst-range from[-to]

   示例:

   -m iprange –src-range 192.168.3.10-192.168.3.20

   -m iprange –dst-range 192.168.3.10-192.168.3.20

3string

  對報文中的應用層數據做字符串匹配檢測;

[!] –string pattern

[!] –hex-string pattern

–algo {bm|kmp}:字符串匹配檢查算法;

–from offset

–to offset

示例:

  屏蔽掉網站中帶有sex”的敏感字符串的響應:

  iptables -A INPUT -j DROP

  iptables -A OUTPUT -j DROP

      iptables -I INPUT -d 192.168.3.5 -p tcp -m multiport –dports 22,23,80 -j ACCEPT

      iptables -I OUTPUT -s 192.168.3.5 -p tcp -m multiport –sports 22,23,80 -j ACCEPT

      iptables -I OUTPUT -p tcp –sport 80 -m string –string "sex" –algo bm -j REJECT    

   4、time

   根據報文到達的時間與指定的時間范圍進行匹配度檢測;

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

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

 

 –timestart hh:mm[:ss]

 –timestop hh:mm[:ss]

 

  [!] –monthdays day[,day…]

  [!] –weekdays day[,day…]

     示例:

       禁止在非工作時間登錄防火墻本機telnet服務。

   iptables -A INPUT -j DROP

   iptables -A OUTPUT -j DROP

       iptables -I INPUT  -d 192.168.3.5 -p tcp –dport 23 -m time –weekdays 6,7  -j DROP

       iptables -I INPUT -d 192.168.3.5 -p tcp –dport 23 -m time –timestart 18:00 –timestop 9:00  -j DROP

       iptables -I INPUT -d 192.168.3.5 -p tcp -m multiport –dports 22,23,80 -j ACCEPT

       iptables -I OUTPUT -s 192.168.3.5 -p tcp -m multiport –sports 22,23,80 -j ACCEPT

注意:ntpdate 時間服務器地址,同步時間。

 

  5connlimit

   根據每客戶端IP做并發連接數限制,即限制單IP可同時發起連接請求;

–connlimit-upto n:連接數小于等于閾值;

–connlimit-above n:連接數超出閾值;

 

     示例:

       防火墻本機限制ssh服務單ip主機并發連接不能超過3個:

   iptables -A INPUT -j DROP

   iptables -A OUTPUT -j DROP

       Iptables -I INPUT -d 192.168.3.5 -p tcp –dport 22 -m connlimit –connlimit-above 3 -j RJECT

       iptables -I INPUT -d 192.168.3.5 -p tcp -m multiport –dports 22,23,80 -j ACCEPT

       iptables -I OUTPUT -s 192.168.3.5 -p tcp -m multiport –sports 22,23,80 -j ACCEPT

    

      

  ~]# iptables -I INPUT -d 10.1.0.6 -p tcp –dport 22 -m connlimit –connlimit-above 2 -j REJECT

  6、limit

 基于收發報文的速率進行匹配;

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

     –limit-burst number

 

     示例:

      限制ping防火墻本機為6秒一次:

   iptables -A INPUT -j DROP

   iptables -A OUTPUT -j DROP

       iptables -I INPUT  -d 192.168.3.5 -p icmp –icmp-type 8 -m limit  –limit-burst 5  –limit 10/minute  -j ACCEPT

       iptables -I OUTPUT -s 192.168.3.5 -p icmp –icmp-type 0 -j ACCEPT

     ~]# iptables -A INPUT -d 10.1.0.6 -p icmp –icmp-type 8 -m limit –limit-burst 3 –limit 20/minute -j ACCEPT

 

 7、state

狀態檢測:連接追蹤機制(conntrack

NEW:新連接

ESTABLISHED:已建立的連接

RELATED:相關聯的連接

INVALID:無法識別的連接,拒絕放行;

UNTRACKED:未被追蹤連接;

相關的內核模塊:

nf_conntrack

nf_conntrack_ipv4

nf_conntrack_ftp

追蹤到的連接:/proc/net/nf_conntrack文件中;

能追蹤的最大連接數量定義在:/proc/sys/net/nf_conntrack_max

建議調整至足夠大;

不同的協議的連接追蹤時長:

/proc/sys/net/netfilter/

 

[!] –state state

如何開放被動模式的ftp服務:

(1) 裝載追蹤ftp協議的模塊;

  # modprobe nf_conntrack_ftp

(2) 放行入站命令連接

# iptables -A INPUT -d SERVER_IP -p tcp –dport 21 -m state –state NEW,ESTABLISHED -j ACCEPT

   (3) 放行入站數據連接

# iptables -A INPUT -d SERVER_IP -p tcp -m state –state RELATED,ESTABLISHED -j ACCEPT

   (4) 放行出站的ESTABLISHED連接

# iptabls -A OUTPUT -s SERVER_IP -m state –state NEW,ESTABLISHED -j ACCEPT

 

 示例:

   在本機防火墻上開放21、22、23、80端口服務的訪問:

   iptables -A INPUT -j DROP

   iptables -A OUTPUT -j DROP

   iptables -I INPUT -d 192.168.3.5 -m state –state ESTABLISHED,RELATED -j ACCEPT

   iptables -I INPUT 2 -d 192.168.3.5 -p tcp -m multiport –dports 21:23,80 -m state –state NEW  -j ACCEPT

   iptables -I INPUT 3 -d 192.168.3.5 -p icmp –icmp-type 8 -m state –state NEW,ESTABLISHED -j ACCEPT

   iptables -I OUTPUT -s 192.168.3.5 -m state –state NEW,ESTABLISHED -j ACCEPT

 

注意:ftp服務需要手動裝載nf_conntrack_ftp連接跟蹤ftp協議的模塊;

      modprobe  nf_conntrack_ftp

 

 8MAC地址匹配

主要用于檢查數據包源MAC地址在,在iptables命令中使用“–mac-source MAC地址”的形式。

例如:拒絕來自MAC地址00:0C:29:7C:0C:37的所有數據包,到本機防火墻。

iptables -I INPUT 4  -d 192.168.3.5 -m mac –mac-source 00:0C:29:7C:0C:37 -j REJECT

 

 

處理動作(跳轉目標):

  -j tagetname [per-target-options]

  簡單target

  ACCEPT,DROP

  擴展target

  REJECTLOG

  –reject-with type

  icmp-net-unreachable, icmp-host-unreachable, icmp-port-unreachable, icmp-proto-unreachable, icmp-net-prohibited, icmp-host-prohibited, or icmp-admin-prohibited,默認為icmp-port-unreachable;

  LOG

Turn  on  kernel  logging of matching packets.

–log-level level

     emerg,alert,crit,error, warning, notice, info or debug.

–log-prefix prefix:日志信息的前導信息;

 

示例:注意iptables規則添加的位置

   iptables -I INPUT 2  -d 192.168.3.5 -p tcp –dport 22 -j LOG  –log-prefix "openssh from kernel:"

    

保存和載入規則:

保存:iptables-save > /PATH/TO/SOME_RULE_FILE

重載:iptables-restore < /PATH/FROM/SOME_RULE_FILE

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

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

注意:重載文件中的規則,會清除已有規則;

CentOS 6

保存規則:service  iptables  save

保存規則于/etc/sysconfig/iptables,保存操作會清除文件中原有的內容;

重載規則:server iptables restart

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

腳本配置文件:/etc/sysconfig/iptables-config

         IPTABLES_MODULES=""用于指明要裝載的模塊;

CentOS 7開機自動生效規則:

(1) firewalld服務;

(2) shell腳本,直接記錄iptables命令;

(3) 自定義unit fileinit script;

規則優化的思路:

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

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

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

(4) 設置默認策略:白名單機制

(a) 可使用iptables -P設定默認策略;

(b) 建議在規則鏈的最后定義規則做為默認策

 

 Iptables本機防火墻作轉發:

   實驗環境目的:

   允許內網中的主機去訪問外網中的8021、22、23端口服務;

  iptables  -A  FORWARD  -j DROP

  iptables  -I   FORWARD  -m state –state ESTABLISHED,RELATED  -j ACCEPT

  iptables  -I   FORWARD  -s 192.168.3.0/24 -p tcp  -m multiport –dports 21:23 80 -m state –state  NEW  -j ACCEPT

 

 注意:開啟本機防火墻上的路由轉發功能:

      echo "1" >  /proc/sys/net/ipv4/ip_forward   

      手動裝載nf_conntrack_ftp連接跟蹤ftp協議的模塊;

      modprobe  nf_conntrack_ftp

 

SNAT的配置及應用:

  SNAT只能用于nat表的POSTROUTING鏈和INPUT鏈。使用iptables命令設置SNAT策略時,需要結合“SNAT  –to-source  IP地址”選項指定修改后的IP地址。(例如:-j SNAT –to-source 218.29.30.31

 

示例:

iptables -t nat -I POSTROUTING  -s 192.168.3.0/24 -j SNAT –to-source 10.1.0.6-10.1.0.9

 

DNAT的配置及應用:

  DNAT只能用于nat表的PREROUTING鏈和OUTPUT鏈,使用iptables命令設置DNAT策略時,需要結合“DNAT  –to-destionation  IP地址”選項指定修改后的IP地址。(例如:-j SNAT –to-destionation 192.168.3.5

 

 示例:

 iptables -t nat -I PREROUTING -d 10.1.0.6  -p tcp –dport 80 -j DNAT –to-destination 192.168.3.5:8080

 

 iptables -t nat -I PREROUTING -d 10.1.0.6  -p tcp –dport 22 -j DNAT –to-destination 192.168.3.6:22

 

REDIRECT端口映射:

  web網站服務器上啟用端口映射:

  例如:web網站服務器上監聽的是8080端口,IP192.168.3.6;

  iptables  -t nat -I PREROUTING -d 192.168.3.6 -p tcp –dport 80 -j REDIRECT  –to-ports 8080

 

MASQUERADE:動態地址轉換

  masquerade作用是從服務器的網卡上自動獲得當前IP地址做SNAT源地址轉換。

  適用于動態獲取ip+ADSL撥號則使用

  示例:

   iptables -t nat -A PORTROUTING -s 192.168.3.0/24 -O ppp0 -j MASQUERADE

 

  如此配置的話,不用指定SNAT的目標ip了,不管現在ppp0的出口獲得了怎樣的動態ip,MASQUERADE會自動讀取ppp0現在的ip地址然后做SNAT出去,這樣就實現了很好的動態SNAT地址轉換。

 

用戶自定義鏈:

  iptables -t filter -N icmp_in

  iptables  -I icmp_in -p icmp -j DROP

  Iptables  -I  FORWARD  -s 192.168.3.0/24  -p icmp  -j  icmp_in

 

 刪除自定義鏈:

  1)先刪除被引用的鏈;iptables -D FORWARD 1

  2)清空自定義鏈中的規則;iptables -F icmp_in

  3)刪除自定義鏈; iptables  -X icmp_in

  

  

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

(0)
zhengyibozhengyibo
上一篇 2016-11-18
下一篇 2016-11-18

相關推薦

  • 硬盤分區及掛載

    標簽:文件系統、分區、掛載 一、Linux的基本原則    1、一切皆文件(包括硬件);這個原則會會在很多方面得到體現; 磁盤在Linux中也表現為文件,即/dev目錄下:IDE,ATA:/dev/hd[a-z]    SATA,SCSI,USB,SAS:sd[a-z]。    &nbsp…

    Linux干貨 2015-05-18
  • 函數式編程

    當我們說起函數式編程來說,我們會看到如下函數式編程的長相: 函數式編程的三大特性: immutable data 不可變數據:像Clojure一樣,默認上變量是不可變的,如果你要改變變量,你需要把變量copy出去修改。這樣一來,可以讓你的程序少很多Bug。因為,程序中的狀態不好維護,在并發的時候更不好維護。(你可以試想一下如果你的程序有個復雜的狀態,當以后別…

    Linux干貨 2016-08-15
  • shell腳本之條件測試

    組合條件測試:在多個條件間實現邏輯運算     與:[ condition1 -a condition2 ]、condition1 && condition2     或:[ condition…

    Linux干貨 2015-08-24
  • 練習正則表達式

        正則表達式可以通過元字符(規則)來匹配查找相關的的字符集合。他與通配符是有區別的。而且相關的使用工具對正則表示的元字符的是有區別的。     首先我們先來了解下常用的元字符及含義(并不是所有的元字符) 字符匹配       &nbs…

    Linux干貨 2015-04-15
  • Linux文本處理工具之grep

    簡介     grep:Global search regular expression and print out the line.     grep是一種文本搜索處理工具,根據用戶指定的文本模式或搜索條件對目標文件進行逐行搜索,并顯示能匹配到的行。   …

    Linux干貨 2015-05-12
  • httpd服務歸納:httpd基本配置(周邊常用工具,httpd 編譯安裝)

    一、 服務器status頁     內生的status信息,可以通過web予以顯示, 可以映射為url地址進行訪問     1. 配置路徑有幾種不同方式          如果URL可以映射…

    Linux干貨 2015-05-27
欧美性久久久久