tcp_wrapper過濾,
1.1 wrap簡介
wrap工作在核心空間和應用程式中間的庫層次中。在核心接受到資料包準備傳送到使用者空間時都會經過庫層次,對於部分(只是部分)應用程式會在經過庫層次時會被wrap庫檔案阻擋下來檢查一番,如果允許通過則交給應用程式。
1.2 查看是否支援wrapper
wrap只會檢查tcp資料包,所以稱為tcpwrapper。但還不是檢查所有類型的tcp資料包,例如httpd就不支援。是否支援,可以通過查看應用程式是否依賴於libwrap.so庫檔案。(路徑/lib64/libwrap.so)
[root@mail ~]# ldd $(which sshd) | grep wrap libwrap.so.0 => /lib64/libwrap.so.0 (0x00007f110efb7000)
[root@mail ~]# ldd $(which vsftpd) | grep wrap libwrap.so.0 => /lib64/libwrap.so.0 (0x00007f1e73185000)
[root@mail ~]# ldd $(which httpd) | grep wrap
說明sshd和vsftpd都支援wrap機制,而apache的httpd不支援。
當然上面grep不出結果只能說明不支援這樣的動態連結的方式,有些應用程式可能靜態編譯進程式中了,如舊版本的rpc應用程式portmap。
是否將wrap功能靜態編譯到應用程式中,可以通過以下方式查看。
strings $(which portmap) | grep hosts
如果篩選出的結果中有hosts_access或者/etc/hosts.allow和/etc/hosts.deny這兩個檔案,則說明是支援的。後兩個檔案正是wrap存取控制的檔案。
要注意的是,如果超級守護進程xinetd被wrap控制了,則其下的瞬時守護進程都受wrap控制。
1.3 設定檔格式
hosts.allow和hosts.deny兩個檔案的文法格式是一樣的,如下:
daemon_list: client_list [:options]
【"daemon_list:"的表示方法】:程式名必須是which查出來同名的名稱,例如此處的in.telnetd
sshd:sshd,vsftpd,in.telnetd:ALLdaemon@host:
最後一項daemon@host指定串連IP地址,針對多個IP的情況。如本機有192.168.100.8和172.16.100.1兩個地址,但是只想控制從其中一個ip串連的vsftpd服務,可以寫"vsftpd@192.168.100.8:"。
【"client_list"的表示方法】
單IP:192.168.100.8網段:兩種寫法:"172.16."和10.0.0.0/255.0.0.0主機名稱或域匹配:fqdn或".a.com"宏:ALL、KNOWN、UNKNOWN、PARANOID、EXCEPT
ALL表示所有主機;LOCAL表示和主機在同一網段的主機;(UN)KNOWN表示DNS是否可以解析成功的;PARANOID表示正解反解不匹配的;EXCEPT表示“除了”。
它們的文法可以man hosts_access。
tcpwrapper的檢查順序:hosts.allow --> hosts.deny --> 允許(預設規則)
例如sshd僅允許172.16網段主機訪問。
hosts.allow:sshd: 172.16.hosts.deny:sshd: ALL
telnet服務不允許172.16網段訪問但允許172.16.100.200訪問。有幾種表達方式:
表達方式一:
hosts.allow:in.telnetd: 172.16.100.200hosts.deny:in.telnetd: 172.16.
表達方式二:
hosts.deny: in.telnetd: 172.16. EXCEPT 172.16.100.200
此法不能寫入hosts.allow:"in.telnetd: 172.16.100.200 EXCEPT 172.16."
表達方式三:
hosts.allow: in.telnetd: ALL EXCEPT 172.16. EXCEPT 172.16.100.200hosts.deny: in.telnetd: ALL
EXCEPT的最形象描述是“在其前面的範圍內挖一個洞,在洞範圍內的都不匹配”。所以hosts.allow中,ALL內有一個172.16的洞是不被allow的,在172.16中又有小洞172.16.100.200是被排除在172.16洞外的,所以172.16.100.200是被allow的。
注意:被EXCEPT匹配到的表示不經過此條規則的檢查,而不是反意。例如在allows中指明一個EXCEPT,當有except中的主機被匹配到,表示的不是該主機被拒絕。而是跳過allow檢測進入deny的檢測。
【:options的表達方式】
:ALLOW:DENY:spawn
ALLOW和DENY可以分別寫入deny檔案和allow檔案,表示在allow檔案中拒絕在deny檔案中接受。如allow檔案中:
in.telnetd: 172.16. :DENY
spawn表示啟動某程式的意思(/etc/inittab中的respawn表示重啟指定程式)。例如啟動一個echo程式。
in.telnetd: 172.16 :spawn echo "we are good $(date) >> /var/log/telnetd.log"
回到系列文章大綱:http://www.cnblogs.com/f-ck-need-u/p/7048359.html
轉載請註明出處:http://www.cnblogs.com/f-ck-need-u/p/7347987.html註:若您覺得這篇文章還不錯請點擊下右下角的推薦,有了您的支援才能激發作者更大的寫作熱情,非常感謝!