亚洲成精品动漫久久精久,九九在线精品视频播放,黄色成人免费观看,三级成人影院,久碰久,四虎成人欧美精品在永久在线

掃一掃
關注微信公眾號

用IPTables實現字符串模式匹配
2005-12-14   

自1995年ipfwadm開始進入1.2.1的核心,Linux的防火墻實現有很長的時間了。Ipfwadm實現了標準的tcp/ip包過濾功能,比如過濾源地址與目的地址以及端口過濾。早在1999年第一個穩定的2.2.0核心中防火墻的實現被ipchains替代了,ipchains的新功能包括支持規則鏈,碎片包控制,較好的網絡地址翻譯功能(NAT)以及其他一些有用的改進。我們需要明白Linux防火墻包括核心級代碼(通常是可加載核心模塊或者核心源程序的補?。┖陀脩艏壌a(一個配置的工具,比如 /usr/bin/ipchains,這是用來插入包規則到核心空間的)因此無論如何,只要新的linux防火墻代碼被引入,核心和用戶空間的有關代碼都要改寫。
2001年2.4的核心完成了,iptables出現了。它引入了很多重要的改進,比如基于狀態的防火墻,基于任何 TCP標記和MAC地址的包過濾,更靈活的配置和記錄功能,強大而且簡單的NAT功能和透明代理功能,通過速度限制實現DoS的阻止(更詳細的資料請參看 A Comparison of iptables Automation Tools一文)。
然而,最重要變化是引入了模塊化的架構方式。比如,ipchains和ipfwadm兼容模式是通過一個核心模塊的設置實現的,該模塊能夠在運行的核心中插入,以便提供相應的通訊功能。在附加的變化中,用戶自定義編碼功能已經成為了可能,比如過濾一定范圍的端口,根據TTL值和包的到達時間進行判斷,對自定義的協議進行狀態監視,對隨機的數據包進行監視等,這些目前都還不是iptable的一部分,但是在未來將被實現。很多很有趣的新模塊已經完成了。編寫一個可加載的核心模塊來創建核心級代碼,通過用戶級代碼實現控制過濾器的行為。參見Rusty Russell's Linux iptables HOWTO
本文主要關注字符串模式匹配的功能,(顯然,是通過模塊實現的),該功能可以限制和研究數據包的有效載荷。這是iptable技術的一個非常有意義的突破,它超越了傳統的包過濾防火墻的標準TCP/IP標志監視功能。傳統的防火墻可以分為包過濾和應用代理兩種類型,應用代理防火墻可以分別出應用層的協議比如 telnet,HTTP或者SMTP,能夠監視這些協議的有效載荷和檢查命令,但是應用代理防火墻帶來了巨大的性能缺陷:當通過網絡協議棧處理上層即應用層的數據包。同時我們需要為每一個要監控的協議編寫新的代理程序。包過濾防火墻通常只監視源地址和目的地址,源端口和目的端口,TCP/IP標志等,而完全忽略了高層協議的有效載荷。由于上述原因,包過濾防火墻通常比應用代理防火墻的速度快。應用代理提供了更加有力度的安全控制而包過濾可以用于更高的帶寬線路滿足更高的吞吐量。
基于以上的情況,iptables的新增功能提供了跨越兩種防火墻類型的優勢,避免了各自的缺陷,這個功能同時非常清晰的證明了新的模塊化的架構較之老的ipchains的優勢,它能夠使得iptables工作在網絡層(OSI模型的第三層)不必工作在高層協議,但是卻可以監視高層協議的有效載荷,而不必分析應用層的通信結構。
在2001年5月以前,還沒有提出字符串模式匹配模塊以前。有一個嘗試添加內容監控的能力給iptables防火墻的工程:Hogwash。該工程結合了Snort IDS規則模式匹配引擎,以便于iptable能夠響應帶有攻擊信號的數據包。

現在我們提供了一個Step-By-Step的指導,以便于在RedHat Linux上實現模式匹配的包監視功能。標準的RH7.2提供了iptables 1.2.3的版本以及1.2.4的可用RPM升級包。然而,模式匹配功能沒有被包含在標準的發行版中,因為開發人員將它標記為試驗。
如果你使用的是RH7.1-7.2,你就已經使用了2.4的核心。你至少需要2.4.4的核心以便能夠使用iptables 1.2.4的功能。通常推薦你從發行商那里下載最新的可用的核心。目前,有一個例外:iptables-1.2.4的字符串模式匹配補丁不能在2.4.9 的核心下工作。你應該安裝核心的源碼RPM包(通常被放在/usr/src/linux-2.4.x的源碼樹內)或者從別處下載的核心源程序(比如 www.kernel.org或者它的一個鏡像)。
在本文中,將采用最新的2.4.16核心作為例子。測試也能運行在使用2.4.7核心的RedHat 7.2上,但是2.4.7的核心并不推薦使用,因為2.4.7的核心有一些小的安全問題,比如SYN-cookie保護和iptables的保存/恢復功能。
接下來需要從http://netfilter.samba.org/iptables-1.2.4.tar.bz2下載iptables。當對壓縮文件進行解壓縮之后,需要對iptables進行配置,合并相關的核心源程序樹??梢允褂冒胱詣踊某绦騺硗瓿蛇@個目的。首先,可能需要運行程序以便包含已經考慮過的穩定的iptables補丁,但是這個補丁沒有被包含在kernel的發行版內。從iptables的解壓目錄(在本例中iptables在 /home/anton/iptables-1.2.4,核心源程序在/usr/src/linux-2.4.16)運行:
make pending-patches KERNEL_DIR=/usr/src/linux-2.4.16
這將開始運行交互式的補丁應用程序,雖然你可以安全應用所有的補丁,但是沒有一個補丁是iptables的字符串匹配所必需的。對任何你認為需要的補丁都回答y(yes)。如果你希望能夠安全的使用iptables,則選擇none。
現在我們將準備應用試驗部分的補丁,比如字符串模式匹配的支持。運行:
make patch-o-matic KERNEL_DIR=/usr/src/linux-2.4.16
在這個交互式的過程中,回答y(yes)以便應用string.patch。程序將遍歷所有的可用的補丁,包括那些穩定的。
Testing... string.patch NOT APPLIED ( 2 missing files)
The string patch:
Author: Emmanuel Roger <WINFIELD@FREEGATES.BE>
Status: Working, not with kernel 2.4.9
This patch adds CONFIG_IP_NF_MATCH_STRING which allows you to
match a string in a whole packet.
THIS PATCH DOES NOT WORK WITH KERNEL 2.4.9 !
Do you want to apply this patch [N/y/t/f/q/?] y
其余的補丁也許也讓你非常感興趣,不過它們與本文并不相關。如果你選擇安裝任何別的補丁,請注意開發者給出的警告信息,其中包括了補丁的功能(比如dropped表的補?。┐_定你沒有安裝MAC過濾的補丁,因為最近發現這個補丁包含一個漏洞。
現在我們開始編譯用戶空間程序和相關的Libraries:
make KERNEL_DIR=/usr/src/linux-2.4.16
然后我們安裝它們(iptables在/usr/local/user/sbin,libraries在/usr/local/lib/iptables)在root身份下執行以下內容:
make install KERNEL_DIR=/usr/src/linux-2.4.16

緊接著我們配置和編譯核心:
Now we are ready to compile the user-space code and the libraries:
make KERNEL_DIR=/usr/src/linux-2.4.16
and then install them (iptables program goes in /usr/local/user/sbin and libraries go into /usr/local/lib/iptables). As root:
cd /usr/src/linux-2.4.16
可以使用任何的核心配置方法。有關詳細的配置核心的方法,可以查閱Internet資源,Internet上有大量的這方面的文檔,比如kernel HOWTO等。以下簡要介紹一下:
make xconfig
在GUI界面下,選擇Netfilter配置選項,然后在Strings match support前選擇m(模塊支持)
然后執行通常的操作:
make dep;make bzImage;make modules;make modules_install
現在按照你喜歡的方式安裝核心,并重新啟動。重新啟動系統以后,測試一下iptables是否支持模式匹配功能,在root身份下執行:
/usr/local/sbin/iptables -m string -help
該命令將顯示如下標準的iptables幫助信息:
STRING match v1.2.4 options:
--string [!] string Match a string in a packet
該功能允許你對匹配數據包的內容,我們可以通過netcat或者telnet來測試這一功能,從而確定我們確實可以獲得數據包的內容。
運行:
iptables -A INPUT -m string --string "test" -j LOG --log-level
info --log-prefix "TEST"
然后啟動一個netcat的服務器:
nc -l -p 3456
然后連接該netcat服務器:
telnet localhost 3456
然后輸入:
test
whatevertestdoes
這樣將引起iptables產生一個簡單的記錄,我們在記錄文件中將會看到如下的信息(當然你需要設置了記錄信息的級別為info)
Nov 27 23:16:53 pua kernel:
TEST IN=lo OUT=MAC=00:00:00:00:00:00:00:00:00:00:00:00:08:00
SRC=127.0.0.1 DST=127.0.0.1 LEN=2154 TOS=0x00 PREC=0x00 TTL=64
ID=42880 DF PROTO=TCP SPT=3128 DPT=33018 WINDOW=32767 RES=0x00 ACK PSH URGP=0
Nov 27 23:16:53 pua kernel:
TEST IN=lo OUT=MAC=00:00:00:00:00:00:00:00:00:00:00:00:08:00
SRC=127.0.0.1 DST=127.0.0.1LEN=1830 TOS=0x00 PREC=0x00 TTL=64
ID=17451 DF PROTO=TCP SPT=8000 DPT=33017 WINDOW=32767 RES=0x00 ACK PSH URGP=0

在tcp/ip數據包中只要出現test字符串,以上的信息就會產生。這有什么好處呢?太多了。正如 Filtering packets based on string matching這篇文章所建議的那樣,該文章可以在linuxguru.net的sysctl內找到。它能夠用來阻止那些討厭的IIS蠕蟲造成得 Unix web服務器記錄文件記錄大量的對cmd.exe的請求,這些蠕蟲將不再干擾你,但是如果你的/var分區(通常是記錄文件存放的分區)不夠大,那么這一功能將有一定的幫助。只要靜靜地丟棄蠕蟲對80端口的請求或者使用記錄限制功能,對這些信息進行記錄,丟棄這些包的操作如下:
iptables -I INPUT -j DROP -p tcp -s 0.0.0.0/0 -m string --string "cmd.exe"
每小時只記錄一條這樣的信息:
iptables -I INPUT -j LOG -p tcp -s 0.0.0.0/0 -m string --string "cmd.exe" -m limit
--limit 1/hour
Bill Steams(Mason firewall building script的作者)提供了一個極好的建議----轉換網絡IDS Snort的規則成為iptables字符串模式匹配的規則。Snort的攻擊信號數據庫中包含了大約1200種信號and appears to be the biggest publicly available attack database suitable for instant deployment。在iptables上使用現成的信號是合理的一種方式。http: //www.strearns.org/snort2iptables 是Bill Stearm提供的試驗性的軟件。在這里你可以找到shell腳本以便將標準的Snort規則轉換為iptables的規則。下面是一個將snort關于 Linux下針對mountd的攻擊和bind的攻擊轉化為iptables的規則的例子:
Snort規則:
1、alert udp $EXTERNAL_NET any -> $HOME_NET 518
(msg:"EXPLOIT ntalkd x86 linux overflow";
content:"|0103 0000 000 0 0001 0002 02e8|";
reference:bugtraq,210; classtype:attempted-admin; sid:313; rev:2;)
2、alert tcp $EXTERNAL_NET any -> $HOME_NET 53
(msg:"EXPLOIT named tsig infoleak";
content: "|AB CD 09 80 00 00 00 01 00 00 00 00 00 00 01 00 01 20 20 20 20 02 61|";
reference:cve,CAN-2000-0010; reference:bugtraq,2302; reference:arachnids,482;
classtype:attempted-admin; sid:303; rev:3;)
3、alert udp $EXTERNAL_NET any -> $HOME_NET 635
(msg:"EXPLOIT x86 linux mountd overflow";
content:"|5eb0 0289 06fe c889 4604 b006 8946|";
reference:cve,CVE-1999-0002; classtype:attempted-admin; sid:315; rev:1;)
轉化的iptables規則:
1、iptables -A SnortRules -p udp -s $EXTERNAL_NET -d $HOME_NET --dport 518 -m
string --string " è" -j LOG --log-prefix "SID313 " # "EXPLOIT ntalkd x86
linux overflow" bugtraq,210 classtype:
attempted-admin sid:313
2、iptables -A SnortRules -p tcp -s $EXTERNAL_NET -d $HOME_NET --dport 53 -m
string --string "&laquo;&Iacute; .a" -j LOG --log-prefix "
SID303 " # "EXPLOIT named tsig infoleak" cve,CAN-2000-0010 bugtraq,2302
arachnids,482 classtype:attempted-admin sid:303
3、iptables -A SnortRules -p udp -s $EXTERNAL_NET -d $HOME_NET --dport 635 -m
string --string "^° ‰ &thorn;&Egrave;‰F ° ‰F" -j LOG --log-prefix " cve-CVE-1999-0002
" # "EXPLOIT x86 linux mountd overflow" classtype:attempted-admin sid:315
顯而易見,上面的轉化使用了針對漏洞所使用的緩沖區溢出字符串作為捕獲攻擊的方式,有些規則不便于轉化主要是因為在楨的控制方面snort比iptables要強大一點。
總之,iptables的字符串模式匹配功能能夠被用來保護那些開放了易受攻擊的而一般的包過濾又無法保護的網絡服務(如WWW服務,mail服務, DNS服務,FTP服務等)的組織的網絡(如果將它布置在組織的網關上)和單個的主機(使iptables成為主機的一部分),另外,iptables的字符串模式匹配功能還能夠幫助實現強制安全策略,即通過關鍵字來阻止訪問非法的內容。


熱詞搜索:

上一篇:iptables防火墻應用之動態DNS
下一篇:UTM引領安全潮流

分享到: 收藏