iptables/netfilter進階

  在上一章當中我們介紹了iptables的介紹以及它的基本使用,下面我們開始介紹iptables的命令用法以及iptables是如何工作的。

1、回顧

  我們回顧一下上一章節的內容,在上一章節中我們講述的是iptables的基本概念以及命令格式,同時講述規則鏈與表的概念,那么現在我們就要說一下iptables的相關命令。

2、iptables的相關命令

  其實使用iptables命令,都要遵從"四表五鏈",那么在前一章我們說過,iptables的格式如下

# iptables [-t table] COMMAND [chain] [PARAMETERS] [-m matchname [per-match-options]] [-j targetname [per-target-options]]

  那么下面我們依據這個命令的格式,來用實例熟悉iptables命令。
  (1) 開放本機為192.168.1.16的80端口,然后我們拒絕3306端口進行響應。

# iptables -A INPUT -d 192.168.1.16 -p tcp --dport 80 -j ACCEPT# iptables -A INPUT -d 192.168.1.16 -p tcp --dport 3306 -j DROP

  以上的命令是很簡單的,那么為什么在INPUT上將80,3306端口寫上去呢?這是因為別人發請求的時候,我響應給客戶端時,我變成了"目標",而我并不知道源地址,更別說客戶端用那個端口給我進行響應了,但是我知道目標IP和目標端口是誰,只要在入棧報文處進行處理給它實施攔截,就可以得到有效的控制。
不過以上的規則當中,我們可以使用顯式擴展-m當中的multiport以離散或連續的方式指定多個端口,最多達到15個,不過必須要統一起來,要么就放行,要么就攔截。

[!] --source-ports, --sports port[,port|,port:port]...  指定多個端口
[!] --destination-ports, --ports port[,port|,port:port]...  指定多個目標端口

  示例如下:

# iptables -A INPUT -d 192.168.1.16 -p tcp -m multiport --dports 80,3306 -j ACCEPT

  同樣,在OUTPUT鏈上,我們可以不允許放行,即使在INPUT鏈中能進來,但不響應也是不行···的。

# iptables -A OUTPUT -s 192.168.1.15 -p tcp -m multiport --sports 22,80 -j DROP

  注意:這樣的實驗還是并不推薦,因為這樣會把遠程回話給拒絕掉,如果說要做這個實驗的話,還是把22號端口放行,如果真的做了這個事情,需要在實體機上執行清空規則命令

# iptables -F

  (2) 拒絕從192.168.1.20-30范圍的IP地址拒絕訪問192.168.1.15的80端口

# iptables -A INPUT -d 192.168.1.15 -p tcp --dport 80 -m iprange --src-range 192.168.1.20-192.168.1.30 -j DROP

  在顯示擴展中,iprange是匹配ip的范圍,是以連續的方式來指明多個ip地址的匹配條件,一般有兩種方式:

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

  (3) 在周六周日的兩點半到六點半期間,所有來源于192.168.24.0/24的范圍網段禁止訪問192.168.1.15的80端口。

# iptables -A INPUT -s 192.168.24.0/24 -d 192.168.1.15 -p tcp --dport 80 -m time --timestart 14:30 --timestop 18:30 --weekdays 6,7 -j DROP# iptables -A INPUT -s 192.168.24.0/24 -d 192.168.1.15 -p tcp --dport 80 -m time --timestart 14:30 --timestop 18:30 --weekdays 6,7 --kerneltz -j DROP

  以上這兩種命令的意思大致是一樣的,time就是顯示擴展之一的選項,--timestart是開始的時間,那么--timestop是停止的時間,--weekdays表示日期,可以用數字表示或者是單詞,與眾不同的是第二個是多個--kerneltz,那么這個意思是轉換成內核所設置的時間,也就是說,第一段命令使用的是UTC時間。
  (4) 帶有凡事從192.168.1.15響應為"gay"字符串,從80端口響應出去的全部屏蔽掉。

# iptables -A OUTPUT -s 192.168.1.15 -p tcp --sport 80 -m string --algo bm --string "gay" -j DROP

  顯示擴展string是報文中的應用層數據作為字符串模式的匹配檢測,以上的命令中如果匹配到的話就丟棄掉,其中--algo是指明算法的,算法共有兩個,一個是bm,另一個是kmp;檢測的模式也有兩種,一個是檢測字符串的模式,另一個是要檢測字符串的模式,但是是16進制的,如下以此顯示:

[!] --string pattern    要檢測的字符串模式[!] 
--hex-string pattern    要檢測字符串模式,16進制

  (5) ping請求最少達到3個,最多不能達到5個。

# iptables -A INPUT -d 192.168.1.15 -p icmp --icmp-type 8 -m limit --limit 3/minute --limute-burst 5 -j ACCEPT

  這是limit擴展,基于收發報文的速率匹配,在這里面,還有令牌桶過濾器,有了這個過濾器,我們可以限制它的數量,以這段命令為例,從iptables的角度看,就是開始的時候,有五個通行證,用完之后每20秒增加一個,以用戶的角度看,就是每一分鐘增加三個或每分鐘只能過三個,要是想20分鐘過一個,只能寫成–limit 3/hour –limit-burst 5。所以,以下子命令的顯示為:

--limit rate[/second|/minute|/hour|/day]
--limit-burst number

  (6) 訪問192.168.1.15的22號端口和80端口的NEW狀態以及ESTABLISHED狀態進入,之后只能允許ESTABLISHED放行。

# iptables -A INPUT -d 192.168.1.26 -p tcp -m multiport --dports 22,80 -m state --state NEW,ESTABLISHED -j ACCEPT# iptables -A OUTPUT -s 192.168.1.26 -p tcp -m multiport --sports 22,80 -m state --state ESTABLISHED -j ACCEPT# iptables -P INPUT DROP# iptables -P FORWARD DROP# iptables -P OUTPUT DROP

  這屬于是state擴展,這才使得讓iptables擁有帶狀態控制的防火墻功能,它是根據"連接追蹤機制"去檢查防火墻的狀態,我們稱之為conntrack機制,它是去檢查連接狀態,去追蹤本機上的請求和響應之間的關系,狀態有如下幾種:

NEW 發出新請求,連接追蹤模版中不存在此連接的相關信息條目;因此,將其識別為第一次發出請求(新連接請求)
ESTABLISHED 這是NEW狀態之后,連接追蹤模版中為其建立的條目失敗之前期間內所進行的通信狀態(已建立的連接)
INVALID 無法識別的連接
RELATED 相關聯的連接,當前是一個新請求,但附屬于某個已存在的連接
UNTRACKED   未追蹤的連接

原創文章,作者:劉 祥宇,如若轉載,請注明出處:http://www.www58058.com/67487

(0)
劉 祥宇劉 祥宇
上一篇 2017-02-03 20:52
下一篇 2017-02-04 11:43

相關推薦

  • 文本處理(1)

    文本處理工具最全整理上半部

    Linux干貨 2018-03-15
  • BIND的編譯安裝\DNS的搭建及測試

    編譯安裝bind          1、下載bind: isc.org: bind-9.10 bind-9.11 bind-10          2、 #tar xvf bind-9.10.5.tar.gz       &nbs…

    2017-07-31
  • 面向對象簡單介紹

    面向對象簡單介紹

    Linux干貨 2017-11-12
  • 往死里苦練腳本啊啊啊啊啊啊啊~~~~~~~~~~~~~~~~

    1、寫一個腳本,判斷當前系統上所有用戶的shell是否為可登錄shell(即用戶的shell不是/sbin/nologin);分別這兩類用戶的個數;通過字符串比較來實現; #腳本內容 [root@centos script]# cat week9_title1.sh  #!/bin/bash #Author …

    Linux干貨 2017-02-16
  • 系統服務之LVS 集群

    Linux集群(Cluster) 一.概論 1.定義     Cluster:計算機集合;     linux集群,多臺Linux主機為解決某個特定問題組合起來形成的單個系統;     由于現代化業務上線的需求, 單服務器已經不能…

    Linux干貨 2016-10-28
  • sed的詳細用法

    sed(Stream EDitor)是一款流編輯器,用來對文本進行過濾與替換操作。其原理是:通過文件或管道讀取文件內容,但是sed默認并不直接修改源文件,而是一次僅讀取文件的一行至模式空間(pattern space)根據sed指令進行編輯并輸出結果后清除模式空間,即所有的操作都是在模式空間中進行的。 語法格式 sed [option]…&nb…

    Linux干貨 2016-11-14
欧美性久久久久