linux之iptables詳解

來源:互聯網
上載者:User

標籤:iptables input output forward 自訂鏈 filter nat mangle

防火牆(iptables)

第一季

-----------------------瞭解防火牆

netfilter 和iptables

什麼是netfilter,其實它是防火牆的模組,而iptables是管理netfilter的軟體,這裡要弄清楚netfilter和iptables的關係;

   防火牆裡面有很多策略,裡面可以定義,主要是為了安全,當防火牆開啟的時候,是預設阻止很多服務的,下面可以用system-config-firewall來開啟圖形介面

從這裡可以看到,我的防火牆是開啟的,然後下面有很多關於服務的選項,預設情況下都沒有打鉤,也就是說,當你設定管理員後,預設是被防火牆擋住的,別人是無法訪問你的服務的!

這裡我們可以通過圖形介面來“關閉“防火牆。

這裡可以點disable,然後點apply裡“關閉”,一定要點apply(應用)才生效的

注意:這裡要注意了,上面的關閉是有引號的,為什麼要加引號,是因為這裡的關閉並不是像其他服務樣的關閉,一般關閉某個服務後,這個服務就完全停止了,但是關閉防火牆其實只是清空了裡面的所有策略,是防火牆變成允許所有了,但是防火牆的功能是沒有關閉的!!因為iptables是基於核心的

第二季

---------------------進入iptables

下面來說iptables的組成,它是由3個表filter,nat,mangle組成的,當然 在每個表裡面還有一些鏈,注意了表是包含鏈的,也就是說我們是在表裡面來寫鏈定義策略的。

filter

  先說filter表,它是用來過濾資料包的

這個表中有3個鏈INPUT ,OUTPUT ,FORWARD(當然還有自訂鏈)

INPUT鏈:過濾資料包目的地是自己的。就是說當有發給自己的資料包時,我們可以通過定義INPUT鏈來寫一些策略來對這些資料包採取一些動作。

OUTPUT鏈:過濾資料包源地址是自己的。就是說當有資料包從自己出去的時候,我們可以通過編寫策略來對這些資料包採取一些動作。

FORWARD鏈:過濾通過自己的資料包。就是說對一些通過自己的資料包(資料包 源和目的都不是自己)來採取一些動作。

這裡我們可以通過iptables –t filter –L來查看

注意這裡查看時並沒有指定表是filter,因為預設不指定表的時候就當做是filter表。

第三季

--------------------------理解3條鏈的關係

我們可以看到,資料包過來的時候先經骨幹菱形框,通過判斷如果是FORWAD則走FORAD鏈,如果是INPUT則走INPUT鏈,這裡圖能說明很多問題就不詳細說了,

這裡主要要注意一個問題,這3條鏈就像3個門,如果一條鏈拒絕了就不能通過;但是有人對forwad和INPUT鏈有點困惑,他們會問如果我INPUT 都拒絕了,然後FORWAD是允許通過的,那麼通過我的資料包還怎麼能通過了?那不是在通過前就被INPUT 拒絕了嗎?其實並不是這樣的,就像上面說的那樣,3條鏈是3個獨立的3個門,我關掉了INPUT 的門,但是FORWAD門沒關啊,資料包如果匹配我的動作,那麼資料包還是會經過FORWAD鏈的!

第四季

----------------------------鏈後的動作

這裡對於我們每個策略的後面都會有動作的,比如走INPUT鏈的資料包,如果匹配上了,我們是把資料包丟棄還是允許存取了?這就是我們說的策略動作

這裡有這樣幾個動作:ACCEPT,DROP,REJECT,LOG,自訂鏈

ACCEPT:對滿足策略的資料包允許通過

DROP:丟棄資料包,且不返回任何資訊

REJECT:丟棄資料包,但是會返回拒絕的資訊

LOG:把通過的資料包寫到日誌中(相當於一個門衛對進去的人進行登記)

這裡,我們先理解一下LOG這個動作吧,其實這個動作對資料包是沒有任何影響的,只是記錄到日誌裡面(/var/log/messages),如果在一個有LOG動作的鏈後還有另一個鏈,那麼資料包通過有LOG鏈後還是會經過後面的鏈的,記住這裡僅僅是為了記錄到日誌中。

第五季

----------------------------防火牆的配置命令

配置防火牆:

這裡是有固定格式的

Iptables 表名 鏈名 匹配條件 動作

參數介紹:

-t (table) 指定表

對於鏈的參數

-A(append)追加,這裡用這個參數後,會將寫的策略添加到表中最後面

-I (insert)插入鏈,如果不加數字,預設是將寫的策略添加到表中所有策略的前面,但是我們要指定插入到相應的行,我們可以這樣

Iptables –t filter –I INPUT 2 …… 這裡就是插到第二個

注意:這裡要注意,資料包通過防火牆的時候是要順序匹配策略的,從上往下依次匹配,

如果我們第一條策略就寫了拒絕192.168.0.0訪問ftp的策略後,然後再寫192.168.0.1可以訪問ftp,則這時192.168.0.1是不能訪問的,因為在前面這個網段的ip就已經被拒絕了,所以一定要注意策略的順序。

-L (list)查看策略:如果查看filter的策略,則可以:iptables –t filter –L,當然這裡為了看得更詳細,可以加上參數-v和-n,對於v和n的理解用圖來說明效果:

-----加vn後

-F(flush)清楚所有策略,注意了,這裡只是清除相應表中的所有策略,但是不能刪除一個鏈的預設策略,什麼是鏈的預設策略呢?

我們可以看到

這個後面的就是鏈的預設策略,這裡它預設是允許的,對於預設策略它總是在最後執行 的,也就是說當資料包補匹配前面所有策略時,就採用這個鏈的預設策略,當然這個鏈的預設策略是可以更改的。

-P 鏈 動作 用這個參數就可以改變一個鏈的預設策略

如:iptables –t filter –P INPUT DROP

這裡我們就更改了INPUT鏈的預設策略。

那麼如果我們要清除(還原)鏈的預設策略應該用什麼命令呢?

這裡用service iptables stop 是可以的,它可以清楚所有策略和鏈的預設策略。

-Z 計數器歸零,上面我們可以看到每個條目的最左右有個pkts和bytes,這個就是用來清零這個計數器的

-D(delete)刪除某個策略,這裡刪除時需要指定你要刪除的是第幾個策略,一般一個表裡面的策略都是從上到下一1開始排列的

我們在刪除時可以這樣來指定:iptables –t filter –D INPUT 1 這個就是刪除第一個策略

可以看到我們參看時,在後面添加參數—line-numbers 就可以以數字排序的方式查看了

匹配條件參數

-i 網卡 資料包進入的網卡

-o 網卡 出去的

-s ip 源ip

-d ip 目的ip

-p 協議

--dport 連接埠號碼 目的連接埠號碼

--sport 連接埠號碼 源連接埠號碼

下面就用一些執行個體來瞭解各個參數吧:

拒絕192.168.0.0網段的pc訪問自己的http服務

Iptables -t filter -A INPUT –s 192.168.0.0/24 -p tcp --dport 80 –j REJECT

這裡寫的時候一定要注意要用什麼鏈,因為別人是訪問我,所以是INPUT

允許192.168.1.1 可以訪問我的ftp服務

Iptables –t filter -A INPUT –s 192.168.1.1 -p tcp –dport 21 -j ACCEPT

   3,對自己所有允許,因為自己訪問自己都是用過介面迴環的,所以

      Iptables  -A INPUT -i lo -j ACCEPT

     Iptabls -A OUTPUT -o lo -j ACCEPT

這裡要特別注意了,因為iptables配置是寫在記憶體中的,如果你重啟以後,iptables的一些策略都會消失,所以需要service iptables save ,這樣就講你所寫的策略都儲存到了/etc/sysconfig/iptables裡面了

第五季

----------------------------iptabes中的一些細節和參數的使用

 1, !的使用,這裡!是取反的意思

Iptables –A INPUT ‘!’ -s 192.168.0.1 -p tcp –dport 21 -j REJECT

這裡的意思就是除了192.168.0.1可以訪問本地ftp服務,其他都拒絕

連接埠,注意了,要指定連接埠,那麼前面必須要有協議,不然指定連接埠時會報錯,也就是說協議和連接埠是綁定使用的

Iptables -A INPUT -s 192.168.0.1 -p tcp --dport 20:80 -j ACCEPT

這裡的意思就是允許tcp協議中從20到80之間的連接埠的訪問

Iptables –A INPUT -s 192.168.0.1 -m multiport –p tcp --dport 20,21 -j REJECT

這裡意思 是拒絕訪問連接埠為20和21

如果要拒絕ping,這裡要注意了,與其他的有點不一樣

Iptables –A INPUT –s 192.168.0.1 -p icmp –icmp-type 8 –j REJECT

第七季

-----------------使用iptables進行流量控制,這個很酷!!

這裡要使用一些參數,當然這些參數可以使用man iptables 來查看

這裡我就實驗來講解吧

這裡我們用192.168.0.254這台機器的http來共用出一個100M檔案,然後讓另一個pc去下載,通過限速和不限速來比較一下效果

在http伺服器的html目錄下有個100M的檔案test

然後用192.168.0.1這個機器來下載

這裡我們可以看到下載的速度為15M左右

下面在254機器上通過iptables來限速

這裡的-m 是match匹配的意思,然後—limit 10/s 是限制每秒只能通過10個資料包

然後打0.1 這個機器上下載

這裡可以看到下載速度只有7kb左右了

第八季

------------自訂鏈的使用

什麼時候用到自訂鏈呢?一般到企業後,會發現防火牆下面會寫 了很多策略,但是為了再加策略時不影響到以前已經寫好的策略,我們就可以用自訂策略;

-N 自訂鏈名 添加自訂鏈

-X 自訂聯名 刪除自訂鏈

下面我們可以自己定義鏈:

Iptables –N RHCE

Iptables -A RHCE -s 192.168.0.1 -p tcp –dport 80 –j REJECT

當然這樣寫以後,是沒有理由讓資料包從RHCE這個自訂的鏈走的

但是不要忘記了,在前面的的動作中,我們不僅可以用ACCEPT也可以用到自訂鏈的,所以我們可以這樣讓資料包走我們的自訂鏈

Iptables –A INPUT –j RHCE

這樣資料包就先走我們的自訂鏈了

不過問題來了

如果我們讓資料包走自訂鏈後,那麼走過自訂鏈,資料包還會回來繼續走我們的INPUT鏈嗎?

答案是肯定的,資料如果走完自訂鏈如果不匹配,那麼他還是會回到INPUT 鏈來繼續往下匹配的!

下面來做個實驗,添加自訂鏈RHCE 然後讓允許192.168.0.1可以訪問ftp服務,然後用INPUT來拒絕192.168.0.1ping254

這裡可以看到是可以訪問ftp的

這裡看到拒絕了訪問http的服務,這就證明了上面的結論!!

第九季

-------------防火牆的狀態跟蹤

什麼將狀態跟蹤,這裡我們就用tcp的三向交握串連來說明吧,當建立三向交握的時候,會發串連,然後協商建立三向交握後就會建立成功,這時就是ESTABLISH狀態。這個三向交握和一些其他的串連問題就不多說了。

首先介紹一下這裡可以跟蹤的4個狀態

NEW:第一次發起串連的資料包狀態

ESTABLISH:建立串連的資料包的狀態

RELATED:回應資料包的狀態

INVALID:無效資料包的狀態

這裡為什麼要用到資料包狀態跟蹤呢?

我們就拿ftp這個服務作為執行個體來說明吧,大家都知道ftp有2個模式,主動模式和被動模式;(首先要注意了,不管說明服務,一般用戶端去串連伺服器端時候,都會用一個大於1024 的連接埠去串連,而且是隨機的,你是無法知道的,除非串連後你用網路監測netstat可以看到)

主動模式(port):在通過與伺服器端的21連接埠建立起命令通道後,ftp用戶端告訴伺服器端,我開啟了一個連接埠1234,你可以連我,然後ftp伺服器端就用20連接埠主動去連用戶端的1234連接埠,建立起資料通道

被動模式(passive):通過與伺服器端的21連接埠建立命令通道後,伺服器端就會告訴用戶端我開啟了2222連接埠,你來串連我的2222連接埠,這樣用戶端就會用大於1024的一個隨機連接埠去串連伺服器2222連接埠,建立起資料通道

瞭解ftp的2個模式後,我們就要考慮了,如果用的是主動模式,那麼我們可以通過控制20和21 連接埠來過濾ftp的一些串連,但是如果是被動模式呢?我們根本不曉得建立資料通道的連接埠,就無法來過濾了,但是在建立串連的過程中,他們是始終會有串連狀態的,所以這裡我們就可以用資料包狀態跟蹤來解決ftp的被動模式問題。

注意了,一般ftp服務的串連都用的是被動模式(passive),下面我們來用實驗證明

首先在254上搭建ftp伺服器,然後運行0.1這個機器能通過20和21連接埠來訪問ftp伺服器,但是拒絕其他一切

254端

用戶端來訪問:

注意了,這裡我們開始登陸進去成功是因為我防火牆策略中開啟了21連接埠,但是我把20連接埠也開啟了,進去後為什麼連ls都不行,這是因為預設的模式為被動模式,這

裡我們輸入passive進去主動模式,這樣就可以ls或者下載了;

這時我們利用資料包狀態跟蹤來處理,如果狀態追蹤成功,那麼開始登陸進去就是可以下載資料的:

這裡可以看到追蹤的是tcp串連成功時資料包的狀態:established,related

然後一定不要忘記了載入ip_conntrack_ftp這個模組!!!

測試:

這裡已經可以證明成功了;

ROUTIP為防火牆


本文出自 “pincer” 部落格,請務必保留此出處http://pincer.blog.51cto.com/5759011/1617391

linux之iptables詳解

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.