溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

iptables的學習

發(fā)布時間:2020-08-11 15:07:46 來源:ITPUB博客 閱讀:223 作者:595117995 欄目:建站服務器

1 Linux防火墻概述

Linux防火墻實際指的是Linux下的Netfilter/Iptables。Netfilter/Iptables是2.4.x/2.6.x版本Linux內核集成的IP信息包過濾系統(tǒng)。

查看Linux內核版本

iptables的學習

 

 

Netfilter/Iptables 信息包過濾系統(tǒng)可以當成一個整體,netfilter是內核的模塊實現,iptables是對上層操作工具。

Netfilter是Linux核心中的一個通用架構,工作于內核空間。

Netfilter支持一下方式對數據包進行分類:

  • 源IP地址
  • 目標IP地址
  • 使用接口
  • 使用協(xié)議
  • 端口號
  • 連接狀態(tài)

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

chain的本質是Netfilter定義的不同過濾點??偣捕x了5個過濾點。INPUT,FORWARDING,OUTPUT,PREROUTING,POSTROUTIONG。

Table的本質是Netfilter定義的不同功能的劃分。

filter用于執(zhí)行基本過濾。

nat是對數據IP進行修改。

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

不同的Table只能用于特定的Chain。

 

Iptables 是一個管理內核包過濾的工具,可以用來配置核心包過濾表格中的規(guī)則。運行于用戶空間。

 

 

1.1 Linux防火墻的應用

Linux防火墻在企業(yè)應用中非常有用,舉例如下:

  • 中小企業(yè)與網吧里有iptables作為企業(yè)的NAT路由器,可以用來代替?zhèn)鹘y(tǒng)路由器,而節(jié)約成本。
  • IDC機房一般沒有硬件防火墻,IDC機房的服務器可以用Linux防火墻代替硬件防火墻。
  • iptables可以結合squid作為企業(yè)內部上網的透明代理。傳統(tǒng)代理需要在瀏覽器里配置代理服務器信息,而iptables+squid的透明代理則可以把客戶端的請求重定向到代理服務器的端口。客戶端不要作任何設置,而感覺不到代理的存在。
  • 將iptables作為企業(yè)NAT路由器時,可以使用iptables的擴展模塊屏蔽P2P流量,還可以禁止非法網頁。
  • iptables可以用于外網IP向內網IP映射。
  • iptables可以輕松防止輕量級DOS攻擊,比如ping攻擊及SYN洪水攻擊。

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

 

 

1.2 iptables的基本組件

1.2.1 規(guī)則

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

 

1.2.2 鏈

鏈(chains)是數據包傳播的路徑,每一條鏈其實就是眾多規(guī)則中的一個檢查清單,每一條鏈中可以有一條或數條規(guī)則。當一個數據包到達一個鏈時,iptables就會從鏈中第一條規(guī)則開始檢查,看該數據包是否滿足規(guī)則所定義的條件。如果滿足,系統(tǒng)就會根據該條規(guī)則所定義的方法處理該數據包;否則iptables將繼續(xù)檢查下一條規(guī)則,如果該數據包不符合鏈中任一條規(guī)則,iptables就會根據該鏈預先定義的默認策略來處理數據包。

每個鏈上都有默認的規(guī)則。

  • PREROUTING:數據包進入本機,進入路由器之前。可以用于目標地址轉換(DNAT)。
  • INPUT:通過路由表后目的地為本機。
  • FORWARDING:通過路由表后,目的地不為本機??梢杂糜谵D發(fā)數據。
  • OUTPUT:由本機產生,向外轉發(fā)。
  • POSTROUTIONG:通過路由表后,發(fā)送到網卡接口之前??梢杂糜谵D發(fā)數據(SNAT,MASQUERADE)

 

1.2.3 表

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

filter表

主要用于數據報文過濾。該表根據系統(tǒng)管理員預定義的一組規(guī)則過濾符合條件的數據包。對于防火墻而言,主要利用在filter表中指定的規(guī)則來實現對數據包的過濾。filter表是默認的表,如果沒有指定哪個表,iptables 就默認使用filter表來執(zhí)行所有命令,filter表包含了INPUT鏈,RORWARD鏈,OUTPUT鏈。在filter表中只能允許對數據包進行接受,丟棄的操作,而無法對數據包進行更改。

 

nat表

主要用于網絡地址轉換NAT,該表可以實現一對一,一對多,多對多等NAT工作(SNAT,DNAT,PNAT),iptables就是使用該表實現共享上網的,NAT表包含了PREROUTING鏈,POSTROUTING鏈,OUTPUT鏈。

nat規(guī)則表擁有 prerouting 和 postrouting 兩個規(guī)則鏈,主要功能為進行一對一、一對多、多對多等網址轉換工作(SNAT,DNAT),由于轉換的特性,需進行目的地網址轉換的數據包,就不需要進行來源網址轉換,反之亦然,因此為了提升改寫封包的效率,在防火墻運作時,每個封包只會經過這個規(guī)則表一次。如果我們把數據包過濾的規(guī)則定義在這個數據表里,將會造成無法對同一包進行多次比對,因此這個規(guī)則表除了作網址轉換外,請不要做其它用途。

 

mangle表

主要用作功能修改數據報文的屬性。比如TCP報文的6個標志位。在內核版本2.4.18 后的linux版本中該表包含的鏈為:INPUT鏈(處理進入的數據包),RORWARD鏈(處理轉發(fā)的數據包),OUTPUT鏈(處理本地生成的數據包)POSTROUTING鏈(修改即將出去的數據包),PREROUTING鏈(修改即將到來的數據包)

mangle表主要用于對指定數據包進行更改,在內核版本2.4.18 后的linux版本中該表包含的鏈為:INPUT鏈(處理進入的數據包),RORWARD鏈(處理轉發(fā)的數據包),OUTPUT鏈(處理本地生成的數據包)POSTROUTING鏈(修改即將出去的數據包),PREROUTING鏈(修改即將到來的數據包)。

 

raw表

只使用在PREROUTING鏈和OUTPUT鏈上,優(yōu)先級最高,可以對收到的數據包在連接跟蹤前進行處理。一但用戶使用了RAW表,在某個鏈上RAW表處理完后,將跳過NAT表和 ip_conntrack處理,即不再做地址轉換和數據包的鏈接跟蹤處理了。

 

規(guī)則表之間的優(yōu)先順序:

raw > mangle > nat > filter

iptables的學習

 

 

 

 

1.3 Linux防火墻基本原理

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

 iptables的學習

iptables的學習

(1)數據包進入網卡時,先進入PREROUTING(路由前)鏈,之后做路由判斷數據包應發(fā)往何處,本機或其他機器。

(2)若數據包原目標地址是本機的,數據包會前往INPUT鏈。到達INPUT鏈后,任何進程都會收到它。

(3)本機程序發(fā)送出數據包,數據包會經過OUTPUT鏈,然后到達POSTROUTING鏈輸出。

(4)若數據包原目標地址非本機,則需要轉發(fā)出去的,且內核允許轉發(fā),數據包前往 FORWARD鏈,然后到達POSTROUTING(路由后)鏈輸出。

 

Netfilter在五個鏈上,使用HOOK技術做規(guī)則檢查。

 

 

1.4 iptables規(guī)則執(zhí)行

iptables執(zhí)行規(guī)則時,是從規(guī)則表中從上至下順序執(zhí)行的。

沒遇到匹配的規(guī)則,就一條一條往下匹配;

完全沒有匹配的規(guī)則,則執(zhí)行該鏈上的默認規(guī)則;

遇到匹配的規(guī)則,則執(zhí)行規(guī)則,執(zhí)行后根據本規(guī)則的動作(accept,reject,log,drop等),決定下一步執(zhí)行的情況,后續(xù)執(zhí)行一般有三種情況:

  • 繼續(xù)執(zhí)行當前規(guī)則隊列內的下一條規(guī)則。比如執(zhí)行過Filter隊列內的LOG后,還會執(zhí)行Filter隊列內的下一條規(guī)則。
  • 中止當前規(guī)則隊列的執(zhí)行,轉到下一條規(guī)則隊列。比如從執(zhí)行過accept后就中斷Filter隊列內其它規(guī)則,跳到nat隊列規(guī)則去執(zhí)行。
  • 中止所有規(guī)則隊列的執(zhí)行。

iptables的學習

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

 

 

1.5 數據包的狀態(tài)

包的狀態(tài)依據IP所包含的協(xié)議不同而不同,但在內核外部,也就是用戶空間里,只有4種 狀態(tài):NEW,ESTABLISHED,RELATED 和INVALID。它們主要是和狀態(tài)匹配一起使用。

數據包在用戶空間的狀態(tài):

  • NEW:表示信息包已經或將啟動新的連接,或者它與尚未用于發(fā)送和接收信息包的連接相關聯。若主機向遠程機器發(fā)送一個連接請求,這個數據包的狀態(tài)是NEW。
  • ESTABLISHED:狀態(tài)指出該信息包屬于已建立的連接,該連接一直用于發(fā)送和接收信息包并且完全有效。在連接建立之后(完成TCP的三次握手之后),遠程主機和主機通信數據狀態(tài)為ESTABLISHED。
  • RELATED:和現有聯機相關的新聯機封包。像FTP這樣的服務,用21端口傳送命令,而用20端口(port模式)或其他端口(PASV模式)傳送數據。在已有的21端口上建立好連接后發(fā)送命令,用20或其他端口傳送的數據(FTP-DATA),其狀態(tài)是RELATED。
  • INVALID:狀態(tài)指出該信息包與任何已知的流或連接都不相關聯,它可能包含錯誤的數據或頭。即無效的數據包,不能被識別屬于哪個連接或沒有任何狀態(tài),通常這種狀態(tài)的數據包會被丟棄。

這些狀態(tài)可以一起使用,以便匹配數據包。這可以使防火墻非常強壯和有效。

 

 

 

2 iptables實戰(zhàn)概述

iptables的實驗請盡量在虛擬機或非遠程的系統(tǒng)中操作,避免不小心的誤操作可能導致ssh無法使用。

一般來講,iptables防火墻已經內置于CentOS 6及其他Linux版本中,而且iptables服務默認都是啟動的。  iptables應用于IPv4, 如果要用IPv6,需要使用ip6tables。

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

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

iptables的學習

若機器上安裝了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開機時默認啟動

iptables的學習
#啟動時開啟
chkconfig iptables on

#啟動時關閉
chkconfig iptables off
iptables的學習

 

2.1.4 使用setup設置防火墻

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

iptables的學習

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

iptables的學習

 

 

 

3 iptables命令

3.1 iptables命令基本語法

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

 

-t table

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

 

command

指定iptables 對我們提交的規(guī)則要做什么樣的操作。命令都都需要以chain作為參數。

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

 

command 選項

-v, --verbose(詳細的)

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

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

-x, --exact(精確的)

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

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

-n, --numeric(數值)

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

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

--line-numbers

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

說明:該選項的作用是顯示出每條規(guī)則在相應鏈中的序號。對插入新規(guī)則很有用。

-c, --set-counters

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

說明:在創(chuàng)建或更改規(guī)則時設置計數器,語法如下:--set-counters 20 4000,意思是讓內核把包計數器設為20,把字節(jié)計數器設為4000。

--modprobe

可用此選項的命令:All

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

 

matches 匹配

匹配選項指定數據包與規(guī)則匹配所具有的特征,包括源地址,目的地址,傳輸協(xié)議和端口號,如下所示:

[-i|o 網卡名稱]

說明:

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

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

[-p 協(xié)議類型]

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

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

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

[--sport 源端口號]

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

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

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

[--dport 目標端口號]

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

[-m 模塊]

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

 

Targets/Jumps

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

target可以被細分為兩類,Target和Jump。

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

target指定要對包做的操作,比如DROP和ACCEPT。不同的target有不同的結果。一些target會使包停止前進,也就是不再繼續(xù)比較當前鏈中的其他規(guī)則或父鏈中的其他規(guī)則。而另外一些target在對包做完操作之后,包還會繼續(xù)和其他的規(guī)則比較,如LOG,ULOG和TOS。它們會對包進行記錄,然后讓包通過,以便匹配這條鏈中的其他規(guī)則。有了這樣的target,就可以對同一個包既改變它的TTL又改變它的TOS。有些target必須要有準確的參數(如TOS需要確定的數值),有些就不是必須的,但如果我們想指定也可以(如日志的前綴,偽裝使用的端口,等等)。

 

常用Target簡述

ACCEPT

當包滿足了指定的匹配條件,就會被ACCEPT,允許包前往下一個目的地。不會再去匹配當前鏈中的其他規(guī)則或同一個表內的其他規(guī)則,但包還要通過其他表中的鏈,可能會被DROP。

DROP

當信息包與具有DROP目標的規(guī)則完全匹配時,會阻塞該信息包,并且不對它做進一步處理。該目標被指定為-j DROP。

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

在某些情況下,這個target會引起意外的結果,因為它不會向發(fā)送者返回任何信 息,也不會向路由器返回信息,這就可能會使連接的另一方的sockets因苦等回音而亡:) 解決這個問題的較 好的辦法是使用REJECT target,(譯者注:因為它在丟棄包的同時還會向發(fā)送者返 回一個錯誤信息,這樣另一方就能正常結束),尤其是在阻止端口掃描工具獲得更多的信息時,可以隱蔽被 過濾掉的端口等等(譯者注:因為掃描工具掃描一個端口時,如果沒有返回信息,一般會認為端口未打開或 被防火墻等設備過濾掉了)。還要注意如果包在子鏈中被DROP了,那么它在主鏈里也不會再繼續(xù)前進,不管 是在當前的表還是在其他表里??傊?,包死翹翹了。

REJECT

REJECT和DROP基本一樣,區(qū)別在于它除了阻塞包之外, 還向發(fā)送者返回錯誤信息。target還只能用在INPUT、FORWARD、OUTPUT和它們的子鏈里,而且包含 REJECT的鏈也只能被它們調用,否則不能發(fā)揮作用。它只有一個選項,是用來控制 返回的錯誤信息的種類的。雖然有很多種類,但如果你有TCP/IP方面的基礎知識,就很容易理解它們。

攔阻該數據包,并返回數據包通知對方,可以返回的數據包有幾個選擇:ICMP port-unreachable、ICMP echo-reply 或是tcp-reset(這個數據包包會要求對方關閉聯機),進行完此處理動作后,將不再比對其它規(guī)則,直接中斷過濾程序。 范例如下:

iptables -A  INPUT -p TCP --dport 22 -j REJECT --reject-with ICMP echo-reply

RETURN

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

結束在目前規(guī)則鏈中的過濾程序,返回主規(guī)則鏈繼續(xù)過濾,如果把自訂規(guī)則煉看成是一個子程序,那么這個動作,就相當于提早結束子程序并返回到主程序中。

REDIRECT

將封包重新導向到另一個端口(PNAT),進行完此處理動作后,將會繼續(xù)比對其它規(guī)則。這個功能可以用來實作透明代理或用來保護web服務器。

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

LOG

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

例如:

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

MASQUERADE

改寫封包來源IP為防火墻的IP,可以指定port 對應的范圍,進行完此處理動作后,直接跳往下一個規(guī)則鏈(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 對應的范圍,進行完此處理動作后,將直接跳往下一個規(guī)則煉(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 對應的范圍,進行完此處理動作后,將會直接跳往下一個規(guī)則鏈(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

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

MARK

將封包標上某個代號,以便提供作為后續(xù)過濾的條件判斷依據,進行完此處理動作后,將會繼續(xù)比對其它規(guī)則。

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

 

 

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

iptables作為Linux的基礎服務,默認啟動。

查看iptables服務的狀態(tài)

命令:service iptables status

 

重啟iptables狀態(tài)

命令:service iptables restart

 

使用iptables命令只能使規(guī)則臨時生效。

如果需要永久生效,則要保存.寫入到/etc/sysconfig/iptables文件里.

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

iptables規(guī)則文件保存在/etc/sysconfig/iptables中。

寫入后記得把防火墻重起一下,才能起作用。

 

 

 

 

 

 

 

4 Linux下iptables配置

4.1 清除原有規(guī)則

不管你在安裝linux時是否啟動了防火墻,如果你想配置屬于自己的防火墻,那就清除現在filter的所有規(guī)則.

iptables -F       #清除預設表filter中的所有規(guī)則鏈的規(guī)則。 
iptables -X       #清除預設表filter中使用者自定鏈中的規(guī)則。
iptables –Z       #數據包計數器歸零。

 

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

iptables的學習

默認顯示filter表的情況,所以顯示了INPUT,FORWARD,OUTPUT鏈上的規(guī)則情形。

 

例:查看nat表上的規(guī)則:iptables -t nat -L

iptables的學習

 

 

4.2 配置默認策略

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

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

 

 

4.3 針對IP,網絡接口,協(xié)議的過濾規(guī)則

遠程SSH登陸。允許tcp協(xié)議,開啟22端口。

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

若把OUTPUT設置成DROP,則需要使用如下規(guī)則:

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

 

WEB服務器,開啟80端口

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

 

若OUTPUT設置成DROP的話,則需要使用如下規(guī)則,其他同理。

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

 

郵件服務器端口配置

iptables的學習
iptables的學習
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
iptables的學習
iptables的學習

 

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,一般系統(tǒng)都需要允許回環(huán)。否則可能導致一些問題。如DNS無法正常關閉。

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

 

若把OUTPUT設置成DROP,則需要使用如下規(guī)則:

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,若系統(tǒng)直接開放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,包括兩端的端口在內。

 

以上做法保證了一定的安全性。但由于非法的數據包會被阻塞,因此某些端口掃描工具會提示“該計算機處于防火墻保護狀態(tài)“,這也是不安全的。要欺騙這些工具,可以使用如下規(guī)則:

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

 

這樣的規(guī)則,當非法連接服務器時,會發(fā)出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
iptables的學習
iptables的學習
說明: 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這個網段內。
iptables的學習
iptables的學習
技巧:!表示not。
例:!192.168.0.3 表示除了192.168.0.3的ip地址
其他的規(guī)則連接也一樣這么設置.

 

 

例:某Linux系統(tǒng),作為ADSL上網的代理服務器,同時運行WWW服務,有兩個網絡接口,eth0連接局域網,ppp0是ADSL上網的Internet網絡接口,添加如下規(guī)則。

允許局域網內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

注意:兩個規(guī)則的順序不能反。

 

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

iptables –A input –i !ppp0 –j ACCEPT

 

 

4.4 根據數據狀態(tài)模塊的修改

允許所有已經建立的和相關的連接 

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個包,限制觸發(fā)條件是10個包.

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

 

 

 

4.5 設置NAT表

如圖顯示外網映射原理:

iptables的學習

清除nat表中的規(guī)則

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

 

例:將代理服務器80端口重定向到8009端口,設置規(guī)則如下:

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

 

例:內網機器對外發(fā)布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
向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI