linux 防火牆操做

1、Linux防火牆概述

  Linux防火牆實際指的是Linux下的Netfilter/Iptables。Netfilter/Iptables是2.4.x/2.6.x版本Linux內核集成的IP信息包過濾系統。html

查看Linux內核版本linux

  

  Netfilter/Iptables 信息包過濾系統能夠當成一個總體,netfilter是內核的模塊實現,iptables是對上層操做工具。web

  Netfilter是Linux核心中的一個通用架構,工做於內核空間,而且支持一下方式對數據包進行分類:瀏覽器

 源IP地址
 目標IP地址
 使用接口
 使用協議
 端口號
 鏈接狀態

  其提供了一系列的表(tables),每一個表由若干個鏈(chains)組成,每條鏈能夠由一條或若干條規則(rules)組成,其規則由一些信息包過濾表組成,這些表包含內核用來控制信息包過濾處理的規則集。安全

chain的本質是Netfilter定義的不一樣過濾點。總共定義了5個過濾點:INPUT,FORWARDING,OUTPUT,PREROUTING,POSTROUTIONG;服務器

Table的本質是Netfilter定義的不一樣功能的劃分;網絡

filter用於執行基本過濾;架構

nat是對數據IP進行修改;app

mangle是對數據包進行高級修改;ssh

  不一樣的Table只能用於特定的Chain,Iptables 是一個管理內核包過濾的工具,能夠用來配置核心包過濾表格中的規則,運行於用戶空間。

1.1 Linux防火牆的應用

Linux防火牆在企業應用中很是有用,舉例以下:

    • 中小企業與網吧裏有iptables做爲企業的NAT路由器,能夠用來代替傳統路由器,而節約成本。
    • IDC機房通常沒有硬件防火牆,IDC機房的服務器能夠用Linux防火牆代替硬件防火牆。
    • iptables能夠結合squid做爲企業內部上網的透明代理。傳統代理須要在瀏覽器裏配置代理服務器信息,而iptables+squid的透明代理則能夠把客戶端的請求重定向到代理服務器的端口。客戶端不要做任何設置,而感受不到代理的存在。
    • 將iptables做爲企業NAT路由器時,可使用iptables的擴展模塊屏蔽P2P流量,還能夠禁止非法網頁。
    • iptables能夠用於外網IP向內網IP映射。
    • iptables能夠輕鬆防止輕量級DOS攻擊,好比ping攻擊及SYN洪水攻擊。

綜述,Iptables有兩種應用模式:主機防火牆,NAT路由器。 

1.2 iptables的基本組件

1.2.1 規則

  規則(rules)是管理員預約義的條件,規則通常的定義爲「若是數據包頭符合這樣的條件,就這樣處理這個數據包」。規則存儲在內核空間的信息包過濾表中,這些規則分別指定了源地址、目的地址、傳輸協議(如TCP、UDP、ICMP)和服務類型(如HTTP、FTP和SMTP)等。當數據包與規則匹配時,iptables就根據規則所定義的方法來處理這些數據包,如放行(accept)、拒絕(reject)和丟棄(drop)等。配置防火牆的主要工做就是添加、修改和刪除這些規則。

1.2.2 鏈

  鏈(chains)是數據包傳播的路徑,每一條鏈其實就是衆多規則中的一個檢查清單,每一條鏈中能夠有一條或數條規則。當一個數據包到達一個鏈時,iptables就會從鏈中第一條規則開始檢查,看該數據包是否知足規則所定義的條件。若是知足,系統就會根據該條規則所定義的方法處理該數據包;不然iptables將繼續檢查下一條規則,若是該數據包不符合鏈中任一條規則,iptables就會根據該鏈預先定義的默認策略來處理數據包。

每一個鏈上都有默認的規則。

PREROUTING:數據包進入本機,進入路由器以前。能夠用於目標地址轉換(DNAT)。
INPUT:經過路由表後目的地爲本機。
FORWARDING:經過路由表後,目的地不爲本機。能夠用於轉發數據。
OUTPUT:由本機產生,向外轉發。
POSTROUTIONG:經過路由表後,發送到網卡接口以前。能夠用於轉發數據(SNAT,MASQUERADE)

1.2.3 表

  表(tables)提供特定的功能,iptables有4個表,即raw表、filter表、nat表和mangle表,分別用於實現包過濾,網絡地址轉換和包重構的功能。表中的規則寫在鏈上。

filter表

主要用於數據報文過濾。該表根據系統管理員預約義的一組規則過濾符合條件的數據包。對於防火牆而言,主要利用在filter表中指定的規則來實現對數據包的過濾。filter表是默認的表,若是沒有指定哪一個表,iptables 就默認使用filter表來執行全部命令,filter表包含了INPUT鏈,RORWARD鏈,OUTPUT鏈。在filter表中只能容許對數據包進行接受,丟棄的操做,而沒法對數據包進行更改。

nat表

主要用於網絡地址轉換NAT,該表能夠實現一對一,一對多,多對多等NAT工做(SNAT,DNAT,PNAT),iptables就是使用該表實現共享上網的,NAT表包含了PREROUTING鏈,POSTROUTING鏈,OUTPUT鏈。nat規則表擁有 prerouting 和 postrouting 兩個規則鏈,主要功能爲進行一對1、一對多、多對多等網址轉換工做(SNAT,DNAT),因爲轉換的特性,需進行目的地網址轉換的數據包,就不須要進行來源網址轉換,反之亦然,所以爲了提高改寫封包的效率,在防火牆運做時,每一個封包只會通過這個規則表一次。若是咱們把數據包過濾的規則定義在這個數據表裏,將會形成沒法對同一包進行屢次比對,所以這個規則表除了做網址轉換外,請不要作其它用途。

mangle表

主要用做功能修改數據報文的屬性。好比TCP報文的6個標誌位。在內核版本2.4.18 後的linux版本中該表包含的鏈爲:INPUT鏈(處理進入的數據包),RORWARD鏈(處理轉發的數據包),OUTPUT鏈(處理本地生成的數據包)POSTROUTING鏈(修改即將出去的數據包),PREROUTING鏈(修改即將到來的數據包)。mangle表主要用於對指定數據包進行更改,在內核版本2.4.18 後的linux版本中該表包含的鏈爲:INPUT鏈(處理進入的數據包),RORWARD鏈(處理轉發的數據包),OUTPUT鏈(處理本地生成的數據包)POSTROUTING鏈(修改即將出去的數據包),PREROUTING鏈(修改即將到來的數據包)。

raw表

只使用在PREROUTING鏈和OUTPUT鏈上,優先級最高,能夠對收到的數據包在鏈接跟蹤前進行處理。一但用戶使用了RAW表,在某個鏈上RAW表處理完後,將跳過NAT表和 ip_conntrack處理,即再也不作地址轉換和數據包的連接跟蹤處理了。

 

規則表之間的優先順序:raw > mangle > nat > filter

      

1.3 Linux防火牆基本原理

Linux防火牆的原理主要是對數據包的控制,看下圖(如下圖片均來自互聯網):netfilter五條鏈相互關係,即iptables數據包轉發流程圖。

 

 基本步驟以下(此部分文字以及上圖摘自:http://www.ha97.com/4093.html):

1. 數據包到達網絡接口,好比 eth0。
2. 進入 raw 表的 PREROUTING 鏈,這個鏈的做用是趕在鏈接跟蹤以前處理數據包。
3. 若是進行了鏈接跟蹤,在此處理。
4. 進入 mangle 表的 PREROUTING 鏈,在此能夠修改數據包,好比 TOS 等。
5. 進入 nat 表的 PREROUTING 鏈,能夠在此作DNAT,但不要作過濾。
6. 決定路由,看是交給本地主機仍是轉發給其它主機。
到了這裏咱們就得分兩種不一樣的狀況進行討論了,一種狀況就是數據包要轉發給其它主機,這時候它會依次通過:
7. 進入 mangle 表的 FORWARD 鏈,這裏也比較特殊,這是在第一次路由決定以後,在進行最後的路由決定以前,咱們仍然能夠對數據包進行某些修改。
8. 進入 filter 表的 FORWARD 鏈,在這裏咱們能夠對全部轉發的數據包進行過濾。須要注意的是:通過這裏的數據包是轉發的,方向是雙向的。
9. 進入 mangle 表的 POSTROUTING 鏈,到這裏已經作完了全部的路由決定,但數據包仍然在本地主機,咱們還能夠進行某些修改。
10. 進入 nat 表的 POSTROUTING 鏈,在這裏通常都是用來作 SNAT ,不要在這裏進行過濾。
11. 進入出去的網絡接口。完畢。

另外一種狀況是,數據包就是發給本地主機的,那麼它會依次穿過:
7. 進入 mangle 表的 INPUT 鏈,這裏是在路由以後,交由本地主機以前,咱們也能夠進行一些相應的修改。
8. 進入 filter 表的 INPUT 鏈,在這裏咱們能夠對流入的全部數據包進行過濾,不管它來自哪一個網絡接口。
9. 交給本地主機的應用程序進行處理。
10. 處理完畢後進行路由決定,看該往那裏發出。
11. 進入 raw 表的 OUTPUT 鏈,這裏是在鏈接跟蹤處理本地的數據包以前。
12. 鏈接跟蹤對本地的數據包進行處理。
13. 進入 mangle 表的 OUTPUT 鏈,在這裏咱們能夠修改數據包,但不要作過濾。
14. 進入 nat 表的 OUTPUT 鏈,能夠對防火牆本身發出的數據作 NAT 。
15. 再次進行路由決定。
16. 進入 filter 表的 OUTPUT 鏈,能夠對本地出去的數據包進行過濾。
17. 進入 mangle 表的 POSTROUTING 鏈,同上一種狀況的第9步。注意,這裏不光對通過防火牆的數據包進行處理,還對防火牆本身產生的數據包進行處理。
18. 進入 nat 表的 POSTROUTING 鏈,同上一種狀況的第10步。
19. 進入出去的網絡接口。完畢。

1.4 iptables規則執行

iptables執行規則時,是從規則表中從上至下順序執行的。

若沒遇到匹配的規則,就一條一條往下匹配;

若徹底沒有匹配的規則,則執行該鏈上的默認規則;

若遇到匹配的規則,則執行規則,執行後根據本規則的動做(accept,reject,log,drop等),決定下一步執行的狀況,後續執行通常有三種狀況:

    • 繼續執行當前規則隊列內的下一條規則。好比執行過Filter隊列內的LOG後,還會執行Filter隊列內的下一條規則。
    • 停止當前規則隊列的執行,轉到下一條規則隊列。好比從執行過accept後就中斷Filter隊列內其它規則,跳到nat隊列規則去執行。
    • 停止全部規則隊列的執行。

image

透過這種機制所帶來的好處是,能夠進行復雜、多重的封包過濾,簡單的說,iptables能夠進行縱橫交錯式的過濾(tables)而非鏈狀過濾(chains)。

1.5 數據包的狀態

包的狀態依據IP所包含的協議不一樣而不一樣,但在內核外部,也就是用戶空間裏,只有4種 狀態:NEW,ESTABLISHED,RELATED 和INVALID。它們主要是和狀態匹配一塊兒使用。

數據包在用戶空間的狀態:

    • NEW:表示信息包已經或將啓動新的鏈接,或者它與還沒有用於發送和接收信息包的鏈接相關聯。若主機向遠程機器發送一個鏈接請求,這個數據包的狀態是NEW。
    • ESTABLISHED:狀態指出該信息包屬於已創建的鏈接,該鏈接一直用於發送和接收信息包而且徹底有效。在鏈接創建以後(完成TCP的三次握手以後),遠程主機和主機通訊數據狀態爲ESTABLISHED。
    • RELATED:和現有聯機相關的新聯機封包。像FTP這樣的服務,用21端口傳送命令,而用20端口(port模式)或其餘端口(PASV模式)傳送數據。在已有的21端口上創建好鏈接後發送命令,用20或其餘端口傳送的數據(FTP-DATA),其狀態是RELATED。
    • INVALID:狀態指出該信息包與任何已知的流或鏈接都不相關聯,它可能包含錯誤的數據或頭。即無效的數據包,不能被識別屬於哪一個鏈接或沒有任何狀態,一般這種狀態的數據包會被丟棄。

這些狀態能夠一塊兒使用,以便匹配數據包。這可使防火牆很是強壯和有效。 

2、iptables實戰概述

  iptables的實驗請儘可能在虛擬機或非遠程的系統中操做,避免不當心的誤操做可能致使ssh沒法使用。通常來說,iptables防火牆已經內置於CentOS 6及其餘Linux版本中,並且iptables服務默認都是啓動的。  iptables應用於IPv4, 若是要用IPv6,須要使用ip6tables。

  iptables和ip6_tables、arp_tables一同都是建構在Xtables的架構下,這個方案讓系統管理員定義「表(tables)」、「鏈(chain)」、「規則(rules)」三個數據來處理數據包的運送。每個「表」都和不一樣的數據包處理有關、決定數據包是否能夠穿越的是「鏈」、而一條「規則」在鍵裏面則能夠決定是否送往下一條鏈(或其它的動做),這個處理能夠在嵌套的結構裏面重複使用。每個網絡數據包從抵達到離開該計算機至少會通過一個鏈(亦即轉送或本機路由)。

查看有沒有安裝iptables:rpm -qa | grep iptables

wps_clip_image-23702

若機器上安裝了man命令。則使用man iptables查看iptables的幫助文檔。

2.1 iptables服務相關

2.1.1 開啓iptables服務

service iptables start
#或
/etc/init.d/iptables start

2.1.2 關閉iptables服務

service iptables stop
#或
/etc/init.d/iptables stop

2.1.3 設置iptables開機時默認啓動

#啓動時開啓
chkconfig iptables on

#啓動時關閉
chkconfig iptables off

2.1.4 使用setup設置防火牆

在終端運行 setup,選擇 firewall 回車。

wps_clip_image-29038

按Tab鍵切換到Enablede項,而後按空格鍵選擇。而後再按Tab鍵切換到OK,按空格鍵或回車鍵選擇。按Tab鍵切換到quit,退出setup。

wps_clip_image-29243

3、iptables命令

3.1 iptables命令基本語法

iptables [-t table] command [match] [target/jump]

-t table

用來指明使用的表,有三種選項: filter,nat,mangle。若未指定,則默認使用filter表。

command

指定iptables 對咱們提交的規則要作什麼樣的操做。命令都都須要以chain做爲參數。

-P (--policy) 定義默認策略。
-L (--list) 查看規則列表。
-A (--append) 在規則列表的最後增長規則。
-I (--insert) 在指定的位置插入規則。
-D (--delete) 從規則列表中刪除規則。
-R (--replace) 替換規則列表中的某條規則。
-F (--flush) 清楚指定的規則。
-Z (--zero) 將指定鏈(如未指定,則認爲是全部鏈)的全部計數器歸零。
-X (--delete-chain) 刪除指定用戶自定義鏈。

command 選項

-v, --verbose(詳細的)

可用此選項的命令:--list, --append, --insert, --delete, --replace

說明:該選項使輸出更詳細,常與--list 連用。與--list連用時,輸出中包括網絡接口的地址、規則的選項、TOS掩碼、 字節和包計數器,其中計數器是以K、M、G(這裏用的是10的冪而不是2的冪)爲單位的。若-v 和--append、--insert、--delete 或--replace連用,iptables會輸出詳細的信息告訴你規則是如何被解釋的、是否正確地插入等等。

-x, --exact(精確的)

可用此選項的命令:--list

說明:使--list輸出中的計數器顯示準確的數值,而不用K、M、G等估值。

-n, --numeric(數值)

可用此選項的命令:--list

說明:使輸出中的IP地址和端口以數值的形式顯示,而不是默認的名字,好比主機名、網絡名、程序名等。

--line-numbers

可用此選項的命令:--list

說明:該選項的做用是顯示出每條規則在相應鏈中的序號。對插入新規則頗有用。

-c, --set-counters

可用此選項的命令:--insert, --append, --replace

說明:在建立或更改規則時設置計數器,語法以下:--set-counters 20 4000,意思是讓內核把包計數器設爲20,把字節計數器設爲4000。

--modprobe

可用此選項的命令:All

說明:此選項告訴iptables探測並裝載要使用的模塊。這是很是有用的一個選項,若modprobe命令不在搜索路徑中,就要用到了。有了這個選項, 在裝載模塊時,即便有一個須要用到的模塊沒裝載上,iptables也知道要去搜索。

matches 匹配

匹配選項指定數據包與規則匹配所具備的特徵,包括源地址,目的地址,傳輸協議和端口號,以下所示:

[-i|o 網卡名稱]

說明:

-i --in-interface    網絡接口名     指定數據包從哪一個網絡接口進入。

-o --out-interface   網絡接口名     指定數據包從哪一個網絡接口輸出。

[-p 協議類型]

-p ---proto          協議類型        指定數據包匹配的協議,如TCP、UDP和ICMP等

[-s 源IP地址|源子網]

-s --source          源地址或子網   指定數據包匹配的源地址

[--sport 源端口號]

--sport           源端口號       指定數據包匹配的源端口號

[-d 目標IP地址|目標子網]

-s --source          目標地址或子網   指定數據包匹配的目標地址

[--dport 目標端口號]

--dport           目的端口號    指定數據包匹配的目的端口號

[-m 模塊]

-m --match           匹配的模塊      指定數據包規則所使用的過濾模塊

Targets/Jumps

target/jump決定符合條件的包到何處去,語法是--jump target或-j target。

target能夠被細分爲兩類,Target和Jump。

    • jump的目標是一個在同一個表內的鏈。
    • target的目標是具體的操做。

target指定要對包作的操做,好比DROP和ACCEPT。不一樣的target有不一樣的結果。一些target會使包中止前進,也就是再也不繼續比較當前鏈中的其餘規則或父鏈中的其餘規則。而另一些target在對包作完操做以後,包還會繼續和其餘的規則比較,如LOG,ULOG和TOS。它們會對包進行記錄,而後讓包經過,以便匹配這條鏈中的其餘規則。有了這樣的target,就能夠對同一個包既改變它的TTL又改變它的TOS。有些target必需要有準確的參數(如TOS須要肯定的數值),有些就不是必須的,但若是咱們想指定也能夠(如日誌的前綴,假裝使用的端口,等等)。

經常使用Target簡述

ACCEPT

當包知足了指定的匹配條件,就會被ACCEPT,容許包前往下一個目的地。不會再去匹配當前鏈中的其餘規則或同一個表內的其餘規則,但包還要經過其餘表中的鏈,可能會被DROP。

DROP

當信息包與具備DROP目標的規則徹底匹配時,會阻塞該信息包,而且不對它作進一步處理。該目標被指定爲-j DROP。

若包符合條件,該target就會將target丟掉,也就是說包的生命到此結束,效果就是包被阻塞了。

在某些狀況下,這個target會引發意外的結果,由於它不會向發送者返回任何信 息,也不會向路由器返回信息,這就可能會使鏈接的另外一方的sockets因苦等迴音而亡:) 解決這個問題的較 好的辦法是使用REJECT target,(譯者注:由於它在丟棄包的同時還會向發送者返 回一個錯誤信息,這樣另外一方就能正常結束),尤爲是在阻止端口掃描工具得到更多的信息時,能夠隱蔽被 過濾掉的端口等等(譯者注:由於掃描工具掃描一個端口時,若是沒有返回信息,通常會認爲端口未打開或 被防火牆等設備過濾掉了)。還要注意若是包在子鏈中被DROP了,那麼它在主鏈裏也不會再繼續前進,無論 是在當前的表仍是在其餘表裏。總之,包死翹翹了。

REJECT

REJECT和DROP基本同樣,區別在於它除了阻塞包以外, 還向發送者返回錯誤信息。target還只能用在INPUT、FORWARD、OUTPUT和它們的子鏈裏,並且包含 REJECT的鏈也只能被它們調用,不然不能發揮做用。它只有一個選項,是用來控制 返回的錯誤信息的種類的。雖然有不少種類,但若是你有TCP/IP方面的基礎知識,就很容易理解它們。

攔阻該數據包,並返回數據包通知對方,能夠返回的數據包有幾個選擇:ICMP port-unreachable、ICMP echo-reply 或是tcp-reset(這個數據包包會要求對方關閉聯機),進行完此處理動做後,將再也不比對其它規則,直接中斷過濾程序。 範例以下:
iptables -A  INPUT -p TCP --dport 22 -j REJECT --reject-with ICMP echo-reply

RETURN

在規則中設置的RETURN目標讓與該規則匹配的信息包中止遍歷包含該規則的鏈。若是鏈是如INPUT之類的主鏈,則使用該鏈的默認策略處理信息包。它被指定爲-jump RETURN。

結束在目前規則鏈中的過濾程序,返回主規則鏈繼續過濾,若是把自訂規則煉當作是一個子程序,那麼這個動做,就至關於提前結束子程序並返回到主程序中。

REDIRECT

將封包從新導向到另外一個端口(PNAT),進行完此處理動做後,將會繼續比對其它規則。這個功能能夠用來實做透明代理或用來保護web服務器。

例如:iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT--to-ports 8081

LOG

將數據包相關信息紀錄在 /var/log 中,詳細位置請查閱 /etc/syslog.conf 配置文件,進行完此處理動做後,將會繼續比對其它規則。

例如:

iptables -A INPUT -p tcp -j LOG --log-prefix "input packet"

MASQUERADE

改寫封包來源IP爲防火牆的IP,能夠指定port 對應的範圍,進行完此處理動做後,直接跳往下一個規則鏈(mangle:postrouting)。這個功能與 SNAT 略有不一樣,當進行IP 假裝時,不需指定要假裝成哪一個 IP,IP 會從網卡直接讀取,當使用撥接連線時,IP 一般是由 ISP 公司的 DHCP服務器指派的,這個時候 MASQUERADE 特別有用。

例如:iptables -t nat -A POSTROUTING -p TCP -j MASQUERADE --to-ports 21000-31000

SNAT

改寫封包來源 IP 爲某特定 IP 或 IP 範圍,能夠指定 port 對應的範圍,進行完此處理動做後,將直接跳往下一個規則煉(mangle:postrouting)。

例如:iptables -t nat -A POSTROUTING -p tcp-o eth0 -j SNAT --to-source 192.168.10.15-192.168.10.160:2100-3200

DNAT

改寫數據包包目的地 IP 爲某特定 IP 或 IP 範圍,能夠指定 port 對應的範圍,進行完此處理動做後,將會直接跳往下一個規則鏈(filter:input 或 filter:forward)。

例如:iptables -t nat -A PREROUTING -p tcp -d 15.45.23.67 --dport 80 -j DNAT --to-destination 192.168.10.1-192.168.10.10:80-100

MIRROR

鏡像數據包,也就是未來源 IP與目的地IP對調後,將數據包返回,進行完此處理動做後,將會中斷過濾程序。

QUEUE

中斷過濾程序,將封包放入隊列,交給其它程序處理。透過自行開發的處理程序,能夠進行其它應用,例如:計算聯機費用.......等。

MARK

將封包標上某個代號,以便提供做爲後續過濾的條件判斷依據,進行完此處理動做後,將會繼續比對其它規則。

例如:iptables -t mangle -A PREROUTING -p tcp --dport 22 -j MARK --set-mark 22

3.2 iptables服務與保存的永久生效

iptables做爲Linux的基礎服務,默認啓動。

查看iptables服務的狀態

命令:service iptables status

 

重啓iptables狀態

命令:service iptables restart

 

使用iptables命令只能使規則臨時生效。

若是須要永久生效,則要保存.寫入到/etc/sysconfig/iptables文件裏.

/etc/rc.d/init.d/iptables save

iptables規則文件保存在/etc/sysconfig/iptables中。

寫入後記得把防火牆重起一下,才能起做用。

4、Linux下iptables配置

4.1 清除原有規則

無論你在安裝linux時是否啓動了防火牆,若是你想配置屬於本身的防火牆,那就清除如今filter的全部規則.

iptables -F       #清除預設表filter中的全部規則鏈的規則。 
iptables -X       #清除預設表filter中使用者自定鏈中的規則。
iptables –Z       #數據包計數器歸零。

 

例:查看本機關於IPTABLES的設置狀況:iptables -L -n

wps_clip_image-26566

默認顯示filter表的狀況,因此顯示了INPUT,FORWARD,OUTPUT鏈上的規則情形。

 

例:查看nat表上的規則:iptables -t nat -L

image

4.2 配置默認策略

設置默認策略:關閉filter表的INPUT鏈、FORWARD鏈,開啓OUTPUT鏈。

iptables -P INPUT DROP
iptables –P OUTPUT ACCEPT
iptables –P FORWARD DROP

4.3 針對IP,網絡接口,協議的過濾規則

遠程SSH登錄。容許tcp協議,開啓22端口。

iptables -A INPUT -p tcp --dport 22 -j ACCEPT

若把OUTPUT設置成DROP,則須要使用以下規則:

iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT

 WEB服務器,開啓80端口

iptables -A INPUT -p tcp --dport 80 -j ACCEPT

若OUTPUT設置成DROP的話,則須要使用以下規則,其餘同理。

iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT

 郵件服務器端口配置

smtp:  
iptables -A FORWARD -p tcp --dport 25 -j ACCEPT


#pop3: 
iptables -A FORWARD -p tcp --dport 110 -j ACCEPT  
iptables -A FORWARD -p udp --dport 110 -j ACCEPT


#imap: 
iptables -A FORWARD -p tcp --dport 143 -j ACCEPT
iptables -A FORWARD -p udp --dport 143 -j ACCEPT


imaps:  
iptables -A FORWARD -p tcp --dport 993 -j ACCEPT  
iptables -A FORWARD -p udp --dport 993 -j ACCEPT


pop3s:
iptables -A FORWARD -p tcp --dport 995 -j ACCEPT
iptables -A FORWARD -p udp --dport 995 -j ACCEPT

 FTP服務器,開啓21端口

iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 20 -j ACCEPT

DNS服務器,開啓53端口

iptables -A INPUT -p tcp --dport 53 -j ACCEPT

容許ping,即容許icmp包經過

iptables -A INPUT -p icmp -j ACCEPT     #若INPUT設置成DROP
iptables -A OUTPUT -p icmp -j ACCEPT  #若OUTPUT設置成DROP

容許loopback,通常系統都須要容許迴環。不然可能致使一些問題。如DNS沒法正常關閉。

IPTABLES -A INPUT -i lo -p all -j ACCEPT

若把OUTPUT設置成DROP,則須要使用以下規則:

IPTABLES -A OUTPUT -o lo -p all -j ACCEPT

減小不安全的端口鏈接

iptables -A OUTPUT -p tcp --sport 31337 -j DROP
iptables -A OUTPUT -p tcp --dport 31337 -j DROP 

有些木馬會掃描端口31337到31340(即黑客語言中的 elite 端口)上的服務。既然合法服務都不使用這些非標準端口來通訊,阻塞這些端口可以有效地減小網絡上可能被感染的機器和它們的遠程主服務器進行獨立通訊的機會。

sshd的端口爲22,若系統直接開放22端口,那麼Internet上全部主機均可以鏈接Linux,這樣不安全。更好的方法是,僅容許某個範圍的IP或某個指定ip,且某範圍的端口的主機能夠鏈接主機,其餘IP所有拒絕:

iptables –A INPUT –i ppp0 –p tcp –s 222.91.99.0/28 –-sport 1024:65536 –dport 22 –j ACCEPT
iptables –A INPUT –i ppp0 –p tcp –dport 22 –j DROP

說明:1024:65535 表示端口範圍是1024至65535,包括兩端的端口在內。

以上作法保證了必定的安全性。但因爲非法的數據包會被阻塞,所以某些端口掃描工具會提示「該計算機處於防火牆保護狀態「,這也是不安全的。要欺騙這些工具,可使用以下規則:

iptables –A INPUT –i ppp0 –p tcp –s 222.91.99.0/28 –-sport 1024:65536 –dport 22 –j ACCEPT
iptables –A INPUT –i ppp0 –p tcp –dport 22 –j REJECT –reject-with tcp-reset

這樣的規則,當非法鏈接服務器時,會發出tcp-reset的請求,這個封包會要求對方關閉鏈接。這樣,服務器會更加安全。

只容許192.168.0.3的機器進行SSH鏈接

iptables -A INPUT -s 192.168.0.3 -p tcp --dport 22 -j ACCEPT

若要容許,或限制一段IP地址可用 192.168.0.0/24 表示192.168.0.1-255端的全部IP。

要記得把 /etc/sysconfig/iptables 裏的這一行刪了.

-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT

這一行表示全部地址均可以登錄。

或採用命令方式:

iptables -D INPUT -p tcp --dport 22 -j ACCEPT
說明:
192.168.0.1/24
24的意思就是說子網掩碼中表示網絡的二進制位數是24位。
即: 11111111.11111111.11111111.00000000
也就是24個1。變成十進制就是:255.255.255.0

子網掩碼的意義
把IP(192.168.0.1)轉換爲二進制數,即:11000000.10101000.00000000.00000001
將IP和子網掩碼作與運算得:11000000.10101000.00000000.00000000
再變成十進制數得:192.168.0.0
這個就是192.168.0.1這個IP所屬的網絡地址,也能夠說192.168.0.1在192.168.0.0這個網段內。
技巧:!表示not。
例:!192.168.0.3 表示除了192.168.0.3的ip地址
其餘的規則鏈接也同樣這麼設置.

 

例:某Linux系統,做爲ADSL上網的代理服務器,同時運行WWW服務,有兩個網絡接口,eth0鏈接局域網,ppp0是ADSL上網的Internet網絡接口,添加以下規則。

容許局域網內192.168.60.24/24的全部主機訪問代理服務器,除了192.168.60.3這臺主機:

iptables –A INPUT –i eth0 –s 192.168.60.3 –j DROP
iptables –A INPUT –i eth0 –s 192.168.0/24 –j ACCEPT

注意:兩個規則的順序不能反。

例:讓Linux代理服務器接受全部的來源不是網絡接口ppp0的數據,即僅容許了局域網的訪問,局域網的全部主機不能訪問Internet

iptables –A input –i !ppp0 –j ACCEPT

4.4 根據數據狀態模塊的修改

容許全部已經創建的和相關的鏈接 

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

DROP非法鏈接

iptables -A INPUT     -m state --state INVALID -j DROP  
iptables -A OUTPUT    -m state --state INVALID -j DROP  
iptables-A FORWARD -m state --state INVALID -j DROP

丟棄壞的TCP包

iptables -A FORWARD -p TCP ! --syn -m state --state NEW -j DROP

處理IP碎片數量,防止攻擊,容許每秒100個

iptables -A FORWARD -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT

設置ICMP包過濾,容許每秒1個包,限制觸發條件是10個包.

iptables -A FORWARD -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT

4.5 設置NAT表

如圖顯示外網映射原理:

wps_clip_image-32437

清除nat表中的規則

iptables -F -t nat
iptables -X -t nat
iptables -Z -t nat

例:將代理服務器80端口重定向到8009端口,設置規則以下:

iptable –t nat –A PREROUTING –p tcp –dport 80 –j REDIRECT –to-ports 8009

例:內網機器對外發布WEB網站 

內網WEB服務器IP地址爲192.168.0.3,當公網客戶端訪問服務器時,防火牆將請求映射到內網的192.168.0.3的80端口

iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 80 -j DNAT --to-destination 192.168.0.3:80

例:禁止與211.101.46.253的全部鏈接

iptables -t nat -A PREROUTING   -d 211.101.46.253 -j DROP

例:禁用FTP端口

iptables -t nat -A PREROUTING -p tcp --dport 21 -j DROP

只禁用211.101.46.253地址的FTP鏈接,其餘鏈接還能夠.如web(80端口)鏈接。

iptables -t nat -A PREROUTING   -p tcp --dport 21 -d 211.101.46.253 -j DROP

 5、相關參數彙總

6、轉載及摘錄說明

http://www.cnblogs.com/shijiaqi1066/p/3812510.html

http://www.ha97.com/4093.html

相關文章
相關標籤/搜索