iptables之xtables_addons浅度解析
生活随笔
收集整理的這篇文章主要介紹了
iptables之xtables_addons浅度解析
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
xtables_addons 1.46的幾個(gè)特性是比較有意思,本文不會(huì)列出所有的特性,僅僅針對(duì)少數(shù)幾個(gè)來(lái)分析。也不會(huì)給出太具體的配置,因?yàn)檫@些配置都可以從manual上得到或者被google到,以下所寫的都是自己的一些想法。
SYSRQ target:
機(jī)器死了,特別是置于機(jī)架上的網(wǎng)關(guān)死了,搬來(lái)一個(gè)顯示器和USB鍵盤趕緊插上,看看發(fā)生了什么,悲劇的是,什么也沒(méi)有顯示。畢竟此時(shí)可能已經(jīng)kernel panic了,USB鍵盤識(shí)別早就失效了,按下什么鍵都不會(huì)觸發(fā)顯示器顯示信息。像個(gè)刑偵人員丟了犯罪現(xiàn)場(chǎng)一樣的苦悶!記住,即使kernel panic了,中斷還是可以響應(yīng)的,且網(wǎng)絡(luò)處理中斷處在softirq上下文中,因此如果此時(shí)網(wǎng)卡收到了數(shù)據(jù)包,還是會(huì)執(zhí)行諸如PREROUTING上的HOOK function的(如果kernel不是panic得很嚴(yán)重的話,大多數(shù)情況是這樣~~)。xtables_addons支持了SYSRQ target,可以遠(yuǎn)程觸發(fā)sysrq,這樣只要有網(wǎng)線插著,并且設(shè)置了SYSRQ規(guī)則,80%的情況下,插上顯示器就能看到犯罪現(xiàn)場(chǎng)。
??????? 然而SYSRQ target是很危險(xiǎn)的,如果有人遠(yuǎn)程發(fā)送了一個(gè)reboot或者shutdown命令,你就哭吧!因此SYSRQ target設(shè)置了很多安全參數(shù),比如密碼,摘要等;由于Linux不建議內(nèi)核偵聽(tīng)珍貴的TCP端口資源,所以這個(gè)target的執(zhí)行不能依賴任何用戶態(tài)執(zhí)行的服務(wù),故而僅僅可以使用UDP來(lái)發(fā)送sysrq鍵。
Stateless NAT target
以前,在Linux上配置一個(gè)Stateless NAT要累死人,70%人都搞不定這個(gè),因?yàn)樾枰褂胻c工具進(jìn)行超級(jí)繁瑣的配置,而Stateful NAT僅僅轉(zhuǎn)換一個(gè)IP地址卻需要?jiǎng)佑煤馁Y的ip_conntrack,使得Linux一直不能像Cisco那樣工作。如今xtables_addons支持了Stateless NAT,Linux也可以配置輕量級(jí)的NAT了。雖然說(shuō)是類似Cisco的配置,卻還不一樣。Cisco的ip nat命令可以配置出兩類NAT,一類是基于pool的,另一類是static的,然而它倆并不是并列的關(guān)系,區(qū)別在于:
pool nat:和inside/outside接口有關(guān),也就是和一個(gè)流的方向有關(guān),類似Linux的ip_conntrack,系統(tǒng)中的映射表只有碰到流頭時(shí)才開(kāi)始創(chuàng)建,因此反方向的連接將不會(huì)匹配到acl;
static nat:系統(tǒng)直接建立一個(gè)映射,因此在兩個(gè)方向均可以匹配,類似下面的規(guī)則:
ip nat outside source static 1.1.1.1 2.2.2.2
如果有數(shù)據(jù)包從inside到outside方向,且destination為2.2.2.2(而非規(guī)則中指定的source 1.1.1.1),它也會(huì)將數(shù)據(jù)包的destination轉(zhuǎn)為1.1.1.1,上述規(guī)則實(shí)際上建立了以下兩個(gè)映射:
1>目標(biāo)為2.2.2.2的,目標(biāo)轉(zhuǎn)為1.1.1.1
2>源為1.1.1.1的,源轉(zhuǎn)為2.2.2.2
對(duì)于pool nat則不會(huì)這么轉(zhuǎn),因?yàn)樗ヅ洳坏筋愃葡旅娴腶cl:
access-list 100 permit 1.1.1.1 0.0.0.0,
系統(tǒng)中既然沒(méi)有建立映射,因此反向進(jìn)來(lái)的數(shù)據(jù)包將不會(huì)查找到需要轉(zhuǎn)換的映射條目。
IPMARK target
該target可以基于進(jìn)入包的IP地址動(dòng)態(tài)的計(jì)算需要打上的mark,而無(wú)需在數(shù)據(jù)包進(jìn)來(lái)之前顯式配置一大堆的mark規(guī)則,如果算法精妙的話(無(wú)非就是對(duì)IP地址,掩碼進(jìn)行位運(yùn)算),一條規(guī)則可以替代數(shù)百條規(guī)則。
condition match
condition是一個(gè)match,初看它無(wú)非就是一個(gè)match,一個(gè)布爾值,實(shí)際上,其精妙之處在于該值可以在procfs中動(dòng)態(tài)配置,比如以下的需求:擁有兩個(gè)默認(rèn)網(wǎng)關(guān),GW1,GW2,如果GW1掉電了,就走GW2,GW1又恢復(fù)了,搶占。我們可以配置如下的Policy routing:
ip rule add fwmark 100 tab G1
ip rule add fwmark 200 tab G2
ip route add 0.0.0.0/0 via G1_addr tab G1
ip route add 0.0.0.0/0 via G2_addr tab G2
iptables -t mangle -A PREROUTING -m condition --condition GW1 -j MARK --set-mark 100
iptables -t mangle -A PREROUTING -m condition --condition GW2 -j MARK --set-mark 200
規(guī)則以上就完全確定了,接下來(lái)就根據(jù)GW1/2的狀態(tài)來(lái)操作/proc/net/nf_condition/GW1和/proc/net/nf_condition/GW2兩個(gè)文件了,如果文件中寫入1,那么match匹配,寫入0則不匹配。cron腳本(或者不用cron這種輪詢機(jī)制,某種notify機(jī)制可能更好,網(wǎng)絡(luò)層的監(jiān)控手段太多了!)可以如下:
if GW1斷電; then
??? ech0 0>/proc/net/nf_condition/GW1;
fi
...
另外如果和GWX是直連的話,還可以通過(guò)iface這個(gè)新的match來(lái)匹配端口狀態(tài)。condition技術(shù)結(jié)合iptables的statistic match,可以很酷的實(shí)現(xiàn)基于流的或者基于包的路由負(fù)載均衡功能。
SYSRQ target:
機(jī)器死了,特別是置于機(jī)架上的網(wǎng)關(guān)死了,搬來(lái)一個(gè)顯示器和USB鍵盤趕緊插上,看看發(fā)生了什么,悲劇的是,什么也沒(méi)有顯示。畢竟此時(shí)可能已經(jīng)kernel panic了,USB鍵盤識(shí)別早就失效了,按下什么鍵都不會(huì)觸發(fā)顯示器顯示信息。像個(gè)刑偵人員丟了犯罪現(xiàn)場(chǎng)一樣的苦悶!記住,即使kernel panic了,中斷還是可以響應(yīng)的,且網(wǎng)絡(luò)處理中斷處在softirq上下文中,因此如果此時(shí)網(wǎng)卡收到了數(shù)據(jù)包,還是會(huì)執(zhí)行諸如PREROUTING上的HOOK function的(如果kernel不是panic得很嚴(yán)重的話,大多數(shù)情況是這樣~~)。xtables_addons支持了SYSRQ target,可以遠(yuǎn)程觸發(fā)sysrq,這樣只要有網(wǎng)線插著,并且設(shè)置了SYSRQ規(guī)則,80%的情況下,插上顯示器就能看到犯罪現(xiàn)場(chǎng)。
??????? 然而SYSRQ target是很危險(xiǎn)的,如果有人遠(yuǎn)程發(fā)送了一個(gè)reboot或者shutdown命令,你就哭吧!因此SYSRQ target設(shè)置了很多安全參數(shù),比如密碼,摘要等;由于Linux不建議內(nèi)核偵聽(tīng)珍貴的TCP端口資源,所以這個(gè)target的執(zhí)行不能依賴任何用戶態(tài)執(zhí)行的服務(wù),故而僅僅可以使用UDP來(lái)發(fā)送sysrq鍵。
Stateless NAT target
以前,在Linux上配置一個(gè)Stateless NAT要累死人,70%人都搞不定這個(gè),因?yàn)樾枰褂胻c工具進(jìn)行超級(jí)繁瑣的配置,而Stateful NAT僅僅轉(zhuǎn)換一個(gè)IP地址卻需要?jiǎng)佑煤馁Y的ip_conntrack,使得Linux一直不能像Cisco那樣工作。如今xtables_addons支持了Stateless NAT,Linux也可以配置輕量級(jí)的NAT了。雖然說(shuō)是類似Cisco的配置,卻還不一樣。Cisco的ip nat命令可以配置出兩類NAT,一類是基于pool的,另一類是static的,然而它倆并不是并列的關(guān)系,區(qū)別在于:
pool nat:和inside/outside接口有關(guān),也就是和一個(gè)流的方向有關(guān),類似Linux的ip_conntrack,系統(tǒng)中的映射表只有碰到流頭時(shí)才開(kāi)始創(chuàng)建,因此反方向的連接將不會(huì)匹配到acl;
static nat:系統(tǒng)直接建立一個(gè)映射,因此在兩個(gè)方向均可以匹配,類似下面的規(guī)則:
ip nat outside source static 1.1.1.1 2.2.2.2
如果有數(shù)據(jù)包從inside到outside方向,且destination為2.2.2.2(而非規(guī)則中指定的source 1.1.1.1),它也會(huì)將數(shù)據(jù)包的destination轉(zhuǎn)為1.1.1.1,上述規(guī)則實(shí)際上建立了以下兩個(gè)映射:
1>目標(biāo)為2.2.2.2的,目標(biāo)轉(zhuǎn)為1.1.1.1
2>源為1.1.1.1的,源轉(zhuǎn)為2.2.2.2
對(duì)于pool nat則不會(huì)這么轉(zhuǎn),因?yàn)樗ヅ洳坏筋愃葡旅娴腶cl:
access-list 100 permit 1.1.1.1 0.0.0.0,
系統(tǒng)中既然沒(méi)有建立映射,因此反向進(jìn)來(lái)的數(shù)據(jù)包將不會(huì)查找到需要轉(zhuǎn)換的映射條目。
IPMARK target
該target可以基于進(jìn)入包的IP地址動(dòng)態(tài)的計(jì)算需要打上的mark,而無(wú)需在數(shù)據(jù)包進(jìn)來(lái)之前顯式配置一大堆的mark規(guī)則,如果算法精妙的話(無(wú)非就是對(duì)IP地址,掩碼進(jìn)行位運(yùn)算),一條規(guī)則可以替代數(shù)百條規(guī)則。
condition match
condition是一個(gè)match,初看它無(wú)非就是一個(gè)match,一個(gè)布爾值,實(shí)際上,其精妙之處在于該值可以在procfs中動(dòng)態(tài)配置,比如以下的需求:擁有兩個(gè)默認(rèn)網(wǎng)關(guān),GW1,GW2,如果GW1掉電了,就走GW2,GW1又恢復(fù)了,搶占。我們可以配置如下的Policy routing:
ip rule add fwmark 100 tab G1
ip rule add fwmark 200 tab G2
ip route add 0.0.0.0/0 via G1_addr tab G1
ip route add 0.0.0.0/0 via G2_addr tab G2
iptables -t mangle -A PREROUTING -m condition --condition GW1 -j MARK --set-mark 100
iptables -t mangle -A PREROUTING -m condition --condition GW2 -j MARK --set-mark 200
規(guī)則以上就完全確定了,接下來(lái)就根據(jù)GW1/2的狀態(tài)來(lái)操作/proc/net/nf_condition/GW1和/proc/net/nf_condition/GW2兩個(gè)文件了,如果文件中寫入1,那么match匹配,寫入0則不匹配。cron腳本(或者不用cron這種輪詢機(jī)制,某種notify機(jī)制可能更好,網(wǎng)絡(luò)層的監(jiān)控手段太多了!)可以如下:
if GW1斷電; then
??? ech0 0>/proc/net/nf_condition/GW1;
fi
...
另外如果和GWX是直連的話,還可以通過(guò)iface這個(gè)新的match來(lái)匹配端口狀態(tài)。condition技術(shù)結(jié)合iptables的statistic match,可以很酷的實(shí)現(xiàn)基于流的或者基于包的路由負(fù)載均衡功能。
總結(jié):iptables非常強(qiáng)大,幾乎可以實(shí)現(xiàn)任何功能,你只需要在PREROUTING上掛一個(gè)function,就可以實(shí)現(xiàn)你自己的協(xié)議棧,最后該function返回一個(gè)STOLEN即可。iptables強(qiáng)大的表象背后是Netfilter設(shè)計(jì)的精妙,好像一座城市5個(gè)城門,任何數(shù)據(jù)包進(jìn)出協(xié)議棧都要接受檢查,進(jìn)來(lái)需要檢查,出去也要檢查,協(xié)議棧外面就兩條路,一條是鏈路層,另一條是用戶態(tài),在這些關(guān)卡上,被哨位劫持是很正常的,他會(huì)安排另一條路讓你通過(guò)協(xié)議棧,或者發(fā)現(xiàn)你比較可疑直接扣押或者干掉...NF_STOLEN改為NF_HIJACK豈不更好!
?本文轉(zhuǎn)自 dog250 51CTO博客,原文鏈接:http://blog.51cto.com/dog250/1268886
總結(jié)
以上是生活随笔為你收集整理的iptables之xtables_addons浅度解析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python综合练习1-- 用户登录
- 下一篇: IIS 7.5 Express概况