iptables filter表淺析

即使iptables filter表的資料已經爛大街了,但是我還是決定拿他作爲我的一篇。至於爲什麼不用其他的?不會。並且標題的淺析並不是低調,是因爲真的不深:)

我想我還是直接說 -m參數吧:

> 1. -m state 檢查狀態,四中狀態值

    • NEW:新建的連接是這種狀態
    • ESTABLISHED:已經聯機成功的聯機狀態
      RELATED:
      INVALID:
      是的,有兩個爲空,我實在不知道怎麼測試他們,如果有想法,可以看一下這一篇: http://blog.51cto.com/waringid/517656
      那其實第一個和第二個都很好測試的,我還是直接拿出例子吧:
      拿個也被玩爛的例子,自己可以ping通別人,但是別人ping不通你。
      因爲沒有連接,所以只使用ESTABLISHED就好了,那麼代碼大概是:
      iptables -A INPUT -p icmp -m state --state ESTABLISHED -j ACCEPT
      (當然其實我也不明白爲什麼沒有連接狀態,他依然判斷的到)
      哦~還有一種方法可以實現:你ping的通別人,別人ping不通你:
      因爲icmp包是有type的,type大概是:
      0:ping應答
      8:ping請求
      所以,實現各個的功能的代碼大概是:
      iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT
      關於這個例子有個有趣的東西。
      如果有個人在你設置前ping通了你,並且不斷開。大概這樣:
      iptables filter表淺析
      那即使你設置完:iptables -A INPUT -p icmp -m state --state ESTABLISHED -j ACCEPT
      這句話後,他依然ping的通,在centos下,如果他斷開後再ping,就不行了,但是在win10短時間內似乎都可以ping的通

還有一個new狀態,當然就是有連接的時候啦,比如,http和ssh。
那就再舉個例子。你可以ssh別人但是別人ssh不了你
建議先想一下,比如可能是這樣的:
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT
-p 指定tcp協議 --dport 指定默認的ssh端口 NEW表示新建的連接,嘗試一下連接。你可能等到死也等不到結果了
試一下,抓個包就知道爲什麼了。iptables filter表淺析
注意看返回包22是源端口啊,所以當然是改成
iptables -A INPUT -p tcp --sport 22 -m state --state NEW -j ACCEPT
你會發現,wc還是不行,於是你嘗試改成
iptables -A INPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
wc,可以了,你會想是不是加了NEW之後,纔可以的,錯了~
即使只有一個:iptables -A INPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT也可以ssh,不要問我爲什麼,不知道。。。


難道你沒有問題嗎,那NEW什麼時候用?
有一個很經常用到的協議,http,起碼NEW在HTTP協議裏,還是有一點存在感的~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章