Linux防火墻--iptables學(xué)習(xí)

iptables是Linux系統(tǒng)提供的一個強(qiáng)大的防火墻工具燎猛,可以實(shí)現(xiàn)包過濾、包重定向照皆、NAT轉(zhuǎn)換等功能重绷。iptables是免費(fèi)的,iptables是一個工具膜毁,實(shí)際的功能是通過netfilter模塊來實(shí)現(xiàn)的昭卓,在內(nèi)核2.4版本后默認(rèn)集成到了Linux內(nèi)核中。

一爽茴、 iptables的構(gòu)成

1. 規(guī)則(rules)

規(guī)則是iptables對數(shù)據(jù)包進(jìn)行操作的基本單元葬凳。即“當(dāng)數(shù)據(jù)包符合規(guī)則定義的條件時,就按照規(guī)則中定義的動作去處理”室奏。

規(guī)則中定義的條件一般包括源地址/端口火焰、目的地址/端口、傳輸協(xié)議(TCP/UDP/ICMP)等胧沫。而規(guī)則定義的動作一般有放行(ACCEPT)昌简、拒絕(REJECT)和丟棄(DROP)等。

配置iptables實(shí)際上就是增刪修改這些規(guī)則绒怨。

2. 鏈(chains)

鏈?zhǔn)菙?shù)據(jù)包傳播的路徑纯赎,每條鏈中都有若干個規(guī)則。當(dāng)一個數(shù)據(jù)包到達(dá)一條鏈時南蹂,iptables會按照規(guī)則的順序犬金,從該鏈的第一條規(guī)則開始往下檢查,如果有條件匹配的規(guī)則,則按照規(guī)則定義的動作執(zhí)行晚顷;否則繼續(xù)檢查下一條規(guī)則峰伙。如果該數(shù)據(jù)包和鏈中所有的規(guī)則都不匹配,則iptables會根據(jù)該鏈預(yù)先定義的默認(rèn)策略來處理數(shù)據(jù)包该默。

3. 表(tables)

iptables內(nèi)置了4個表瞳氓,即filter表、nat表栓袖、mangle表匣摘、raw表,分別用于實(shí)現(xiàn)包過濾裹刮、網(wǎng)絡(luò)地址轉(zhuǎn)換音榜、包修改和數(shù)據(jù)跟蹤處理等功能。每個表中含有若干條鏈必指,具體的規(guī)則就是根據(jù)實(shí)現(xiàn)目的的不同囊咏,添加到不同表的不同鏈中。

如下圖所示塔橡,各個表相關(guān)的鏈:

raw表有2條鏈:PREROUTING梅割、OUTPUT

mangle表有5條鏈:PREROUTING、POSTROUTING葛家、INPUT户辞、OUTPUT、FORWARD

nat表有3條鏈:PREROUTING癞谒、POSTROUTING底燎、OUTPUT

filter表有3條鏈:INPUT、FORWARD弹砚、OUTPUT

4個表的優(yōu)先級為:raw > mangle > nat > filter

二双仍、iptables的傳輸過程

當(dāng)數(shù)據(jù)包到達(dá)網(wǎng)卡時,首先會進(jìn)入PREROUTING鏈(注意桌吃,raw表處理完后就不會再進(jìn)入nat表了)朱沃,完成PREROUTING鏈中規(guī)則的匹配和執(zhí)行后(比如DNAT),iptables根據(jù)數(shù)據(jù)包的目的IP是否為本機(jī)地址茅诱,判斷是否需要將該數(shù)據(jù)包轉(zhuǎn)發(fā)出去逗物。

1.? 如果數(shù)據(jù)包的目的IP為本機(jī)地址,它就會進(jìn)入INPUT鏈瑟俭◆嶙浚可以在filter表的INPUT鏈中添加包過濾規(guī)則,限制哪些數(shù)據(jù)包可以訪問本機(jī)摆寄;經(jīng)過INPUT鏈中的規(guī)則處理后失暴,剩下的數(shù)據(jù)包在本機(jī)上任何進(jìn)程都可以收到坯门,并根據(jù)需要對它們進(jìn)行處理;當(dāng)進(jìn)程處理完后逗扒,需要發(fā)送出去的數(shù)據(jù)包會經(jīng)過OUTPUT鏈的處理田盈,然后到達(dá)POSTROUTING鏈,經(jīng)過處理(比如SNAT)后輸出缴阎。

2. 如果數(shù)據(jù)包的目的IP不是本機(jī)地址(比如做了DNAT、或者只是作為默認(rèn)網(wǎng)關(guān)時走過來的包)简软,并且系統(tǒng)內(nèi)核開啟了轉(zhuǎn)發(fā)功能(ip_forward參數(shù)為1)蛮拔,則數(shù)據(jù)包會進(jìn)入FORWARD鏈;此時可以在filter表的FORWARD鏈中設(shè)置相應(yīng)的規(guī)則進(jìn)行處理痹升;經(jīng)過FORWARD鏈的數(shù)據(jù)包再走到POSTROUTING鏈中處理(比如執(zhí)行SNAT)建炫,最后輸出。

綜上疼蛾,數(shù)據(jù)包在iptables中的傳輸鏈路有兩種情況:

第一種:PREROUTING -> FORWARD -> POSTROUTING

第二種:PREROUTING -> INPUT -> LOCALHOST -> OUTPUT -> PUSTROUTING

所以肛跌,要想對數(shù)據(jù)包進(jìn)行控制,主要可以在上面幾條鏈路中添加規(guī)則察郁。

(可以發(fā)現(xiàn)LVS的NAT模式下衍慎,會經(jīng)過PREROUTING鏈(nat表) -> FORWARD鏈 -> POSTROUTING鏈(nat表),請求的轉(zhuǎn)發(fā)在PREROUTING鏈中進(jìn)行DNAT皮钠,響應(yīng)在POSTROUTING鏈中進(jìn)行SNAT稳捆。無論時請求還是響應(yīng)都不會走到INPUT鏈和OUTPUT鏈中)

三、 iptables的使用

iptables對鏈的操作方法有:-I(插入)麦轰,-A(追加)乔夯,-R(替換),-D(刪除)款侵,-L(顯示)

注意末荐,-I是將規(guī)則插入到第一行,-A是將規(guī)則追加到鏈的最后一行新锈。

iptables -F:清除所有的規(guī)則

iptables -F -t nat:清除nat表的規(guī)則

iptables -P INPUT DROP:配置INPUT鏈的默認(rèn)規(guī)則為DROP

示例:

iptables -t filter -A INPUT -s 192.168.1.10 -j ACCEPT

這是一條簡單的規(guī)則甲脏,表示在filter表的INPUT鏈中追加一條規(guī)則,規(guī)則的匹配條件是數(shù)據(jù)包的源IP為192.168.1.10壕鹉,執(zhí)行動作為允許(ACCEPT)剃幌,即允許源IP為192.168.1.10地址的消息訪問本機(jī)。

iptables中晾浴,默認(rèn)表名就是filter负乡,所以上面的規(guī)則也可以寫成:

iptables -A INPUT -s 192.168.1.10 -j ACCEPT

iptables規(guī)則的匹配條件中常用的參數(shù)有:

-s匹配源地址

-d匹配目的地址

--sport匹配源端口

--dport匹配目的端口

-p匹配協(xié)議

-i匹配輸入的網(wǎng)卡

-o匹配輸出的網(wǎng)卡

!取反

-j規(guī)則的執(zhí)行動作

示例:配置NAT轉(zhuǎn)發(fā)實(shí)現(xiàn)內(nèi)網(wǎng)節(jié)點(diǎn)訪問公網(wǎng)

環(huán)境假設(shè):

路由節(jié)點(diǎn):

Lan口:192.168.1.10/24 eth0

Wan口:50.75.153.98/24 eth1

內(nèi)網(wǎng)節(jié)點(diǎn):192.168.1.92

1. 在內(nèi)網(wǎng)節(jié)點(diǎn)上配置默認(rèn)網(wǎng)關(guān)為路由節(jié)點(diǎn)的Lan口脊凰,確保內(nèi)網(wǎng)節(jié)點(diǎn)的包都能走到路由節(jié)點(diǎn)抖棘。

route add default gw 192.168.1.10

2. 在路由節(jié)點(diǎn)上打開linux的路由轉(zhuǎn)發(fā)功能茂腥。

sysctl -w net.ipv4.ip_forward=1

3. 將FORWARD鏈的默認(rèn)策略設(shè)置為DROP

iptables -P FORWARD DROP

這樣確保對內(nèi)網(wǎng)的控制,只把允許訪問公網(wǎng)的IP添加到規(guī)則中切省。

4. 允許任意地址之間的確認(rèn)包和關(guān)聯(lián)包通過最岗。

iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

這條規(guī)則很關(guān)鍵,否則即使后面添加了允許IP訪問的規(guī)則也沒用朝捆。

5. 允許指定IP地址訪問公網(wǎng)

iptables -A FORWARD -s 192.168.1.92/24 -j ACCEPT

6. 配置一條SNAT規(guī)則般渡,將內(nèi)網(wǎng)節(jié)點(diǎn)的源IP轉(zhuǎn)換為公網(wǎng)IP后,再將消息發(fā)出芙盘。

iptables -t nat -A POSTROUTING -s 192.168.1.92 -j SNAT --to 50.75.153.98

示例:配置NAT轉(zhuǎn)發(fā)實(shí)現(xiàn)公網(wǎng)用戶訪問內(nèi)網(wǎng)節(jié)點(diǎn)

環(huán)境假設(shè):

路由節(jié)點(diǎn):

Lan口:192.168.1.10/24 eth0

Wan口:50.75.153.98/24 eth1

內(nèi)網(wǎng)節(jié)點(diǎn):192.168.1.92

1.? 在路由節(jié)點(diǎn)上打開linux的路由轉(zhuǎn)發(fā)功能驯用。

sysctl -w net.ipv4.ip_forward=1

2. 將FORWARD鏈的默認(rèn)策略設(shè)置為DROP

iptables -P FORWARD DROP

這樣確保對內(nèi)網(wǎng)的控制,只把允許訪問的IP添加到規(guī)則中儒老。

3. 允許任意地址之間的確認(rèn)包和關(guān)聯(lián)包通過蝴乔。

iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

這條規(guī)則很關(guān)鍵,否則即使后面添加了允許IP訪問的規(guī)則也沒用驮樊。

4. 允許訪問指定的IP地址

iptables -A FORWARD -d 192.168.1.92 -j ACCEPT

5. 配置一條DNAT規(guī)則薇正,將訪問路由節(jié)點(diǎn)的公網(wǎng)地址轉(zhuǎn)換為訪問內(nèi)網(wǎng)節(jié)點(diǎn)的私網(wǎng)地址。

iptables -t nat -A PREROUTING -d 50.75.153.98 -j DNAT --to 192.168.1.92

PS:用iptables的raw表解決ip_conntrack:table full, dropping packet的問題

raw表中包含PREROUTING鏈和OUTPUT鏈囚衔,優(yōu)先級最高挖腰,可以對數(shù)據(jù)包在進(jìn)入NAT表的PREROUTING鏈之前對消息進(jìn)行處理。當(dāng)用戶啟用了RAW表练湿,消息在經(jīng)過RAW表的PREROUTING鏈處理后曙聂,將跳過NAT表和ip_conntrack處理,不再做地址轉(zhuǎn)換和數(shù)據(jù)包的鏈接跟蹤處理鞠鲜。

所以raw表可以用在那些不需要做nat和鏈接跟蹤的情況宁脊,提升系統(tǒng)性能。因?yàn)閱⒂面溄痈檿r贤姆,系統(tǒng)會建立一個鏈接跟蹤表榆苞,每個消息進(jìn)來時,都會去查詢鏈接跟蹤表霞捡,當(dāng)系統(tǒng)業(yè)務(wù)量過大時坐漏,可能會引發(fā)系統(tǒng)CPU消耗過高。

可以通過在RAW表的PREROUTING鏈中配置NOTRACK標(biāo)記碧信,使數(shù)據(jù)包不再進(jìn)入nat表赊琳,達(dá)到不做鏈接跟蹤的目的,如:

iptables -t raw -A PREROUTING -p tcp -d 192.168.1.10 --dport 80 -j NOTRACK

iptables -A FORWARD -m state --state UNTRACKED -j ACCEPT

表示對訪問192.168.1.10:80服務(wù)的消息在raw表的PREROUTING鏈中添加NORTRACK標(biāo)記砰碴,以后訪問這個服務(wù)的消息都不會再進(jìn)行鏈接跟蹤躏筏。

另外,再附上鳥哥的iptables流程圖呈枉,可以看到各個鏈也是根據(jù)不同的表區(qū)分優(yōu)先級的趁尼。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末埃碱,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子酥泞,更是在濱河造成了極大的恐慌砚殿,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件芝囤,死亡現(xiàn)場離奇詭異似炎,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)悯姊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進(jìn)店門名党,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人挠轴,你說我怎么就攤上這事《保” “怎么了岸晦?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長睛藻。 經(jīng)常有香客問我启上,道長,這世上最難降的妖魔是什么店印? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任冈在,我火速辦了婚禮,結(jié)果婚禮上按摘,老公的妹妹穿的比我還像新娘包券。我一直安慰自己,他們只是感情好炫贤,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布溅固。 她就那樣靜靜地躺著,像睡著了一般兰珍。 火紅的嫁衣襯著肌膚如雪侍郭。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天掠河,我揣著相機(jī)與錄音亮元,去河邊找鬼。 笑死唠摹,一個胖子當(dāng)著我的面吹牛爆捞,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播勾拉,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼嵌削,長吁一口氣:“原來是場噩夢啊……” “哼毛好!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起苛秕,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤肌访,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后艇劫,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體吼驶,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年店煞,在試婚紗的時候發(fā)現(xiàn)自己被綠了蟹演。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡顷蟀,死狀恐怖酒请,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情鸣个,我是刑警寧澤羞反,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站囤萤,受9級特大地震影響昼窗,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜涛舍,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一澄惊、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧富雅,春花似錦掸驱、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至图筹,卻和暖如春帅刀,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背远剩。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工扣溺, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人瓜晤。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓锥余,卻偏偏與公主長得像,于是被迫代替她去往敵國和親痢掠。 傳聞我的和親對象是個殘疾皇子驱犹,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評論 2 345

推薦閱讀更多精彩內(nèi)容

  • Linux 網(wǎng)絡(luò)數(shù)據(jù)包處理流程 iptables 用法 注意事項(xiàng)iptables 設(shè)置是有順序的嘲恍,如果數(shù)據(jù)包滿足前...
    ALvin_l閱讀 3,450評論 0 6
  • iptabels是與Linux內(nèi)核集成的包過濾防火墻系統(tǒng),幾乎所有的linux發(fā)行版本都會包含iptables的功...
    隨風(fēng)化作雨閱讀 4,745評論 1 16
  • 目錄 iptables命令及參數(shù)介紹 配置Filter表防火墻 配置NAT表防火墻 1. iptables命令及參...
    garyond閱讀 85,317評論 1 43
  • 小時候雄驹,我們總是盼望著趕緊長大佃牛。小學(xué)的時候盼著自己上初中,上了初中盼著上高中医舆,上了高中盼著上大學(xué)俘侠,上了大學(xué)盼著工作...
    柒姑娘說故事閱讀 328評論 0 1