TCP Wrappers防火墻介紹與封鎖IP地址的方法
Tcp_Wrappers是一個用來分析TCP/IP封包的軟件,類似的IP封包軟件還有iptables,linux默認都安裝了此軟件,作為一個安全的系統,Linux本身有兩層安全防火墻,通過IP過濾機制的iptables實現第一層防護,iptables防火墻通過直觀地監(jiān)視系統的運行狀況,阻擋網絡中的一些惡意攻擊,保護整個系統正常運行,免遭攻擊和破壞。如果通過了第一層防護,那么下一層防護就是tcp_wrappers了,通過Tcp_Wrappers可以實現對系統中提供的某些服務的開放與關閉、允許和禁止,從而更有效地保證系統安全運行。
Tcp_Wrappers的使用很簡單,僅僅兩個配置文件:/etc/hosts.allow和/etc/hosts.deny
1. 查看系統是否安裝了Tcp_Wrappers
[root@localhost ~]#rpm -q tcp_wrappers
tcp_wrappers-7.6-40.7.el5
或者
[root@localhost ~]#rpm -qa | grep tcp
tcpdump-3.9.4-15.el5
tcp_wrappers-7.6-40.7.el5
如果有上面的類似輸出,表示系統已經安裝了tcp_wrappers模塊。如果沒有顯示,可能是沒有安裝,可以從linux系統安裝盤找到對應RPM包進行安裝。
2. tcp_wrappers設定的規(guī)則
tcp_wrappers防火墻的實現是通過/etc/hosts.allow和/etc/hosts.deny兩個文件來完成的
文件格式是:
服務列表 : 主機列表 : 選項
1.服務列表是要支持的服務的名,例如:telnet、vsftpd等等。
2.主機列表設定受控制的機器。這可以是機器名、主機IP,也可以使用通配符(*或?)或ALL及EXCEPT。
3.選項是我們所要控制的動作。在服務與client都符合之后,那么真正所要進行的動作,就是選項在作。
1)ALLOW 接受連接請求。2)DENY 拒絕連接請求。
舉例:只允許118.126.3.222中vsftp登錄
(這里要注意的是關于vsftp的配置文件vsftpd.conf中的
tcp_wrappers=YES
這樣vsftp才允許通過tcp_wrappers的機制對vsftp服務器進行訪問控制。)
輸入vim /etc/hosts.allow
編輯 vsftpd:118.126.3.222:allow
表示允許118.126.3.222vsftp連接
輸入vim /etc/hosts.deny
編輯 vsftpd:all
表示拒絕所有vsftp連接
一般情況下,linux會首先判斷/etc/hosts.allow這個文件,如果遠程登錄的計算機滿足文件/etc/hosts.allow設定的話,就不會去使用/etc/hosts.deny文件了,相反,如果不滿足hosts.allow文件設定的規(guī)則的話,就會去使用hosts.deny文件了,如果滿足hosts.deny的規(guī)則,此主機就被限制為不可訪問linux服務器,如果也不滿足hosts.deny的設定,此主機默認是可以訪問 linux服務器的.
TCP Wrappers 封鎖IP地址的方法
1. Tcp Wapper基礎知識介紹
Tcp_Wapper是在 Solaris, HP_UX以及 Linux中廣泛流行的免費軟件。它被設計為一個介于外來服務請求和系統服務回應的中間處理軟件。最常見的用法是與inetd一起使用。當Inetd接收到一個外來服務請求的時候,并不是直接調用,而是調用TCP Wrapper(可執(zhí)行文件tcpd),TCP Wrapper根據這個所請求的服務和針對這個服務所定制的存取控制規(guī)則來判斷對方是否有使用這個服務的權限,如果有,TCP Wrapper將該請求按照配置文件定義的規(guī)則轉交給相應的守護進程去處理同時記錄這個請求動作,然后自己就等待下一個請求的處理。
TCP Wrapper機制的主要目的在于,來自客戶端的請求只被允許同一個獨立的守護進程(xinetd)直接通信,而它請求的目標服務被TCP Wrapper包裹起來,這樣就提高了系統的安全性和系統管理的方便性。Tcp wrapper隨著應用逐漸成為一種標準的Unix安全工具,成為unix守護程序inetd的一個插件。通過Tcp wrapper,管理員可以設置對inetd提供的各種服務進行監(jiān)控和過濾,以保證系統的安全性。
2. Tcp Wapper源碼獲取、編譯與安裝
由于它已經在Solaris, HP_UX以及 Linux中泛使用,而在Tru 64上使用的很少,所以在這里給大家做一個詳細介紹,我機器的操作系統版本為:tru 64 4.0F
(1)下載源碼地址:(附件1)
(2)解壓縮
#gunzip tcp_wrappers_7.6.tar.gz
#tar xvf tcp_wrappers_7.6.tar
(3)編譯源碼程序
# make REAL_DAEMON_DIR=/usr/sbin hpux
最后一個參數是hpux,你可以根據你的操作系統來做調整,這里由于沒有DEC的我就使用這個替代了。接著將生成的幾個主要文件拷貝到相應的系統目錄下。
#cp tcpd /usr/sbin
#cp safe_finger /usr/sbin
#cp tcpdchk /usr/sbin
#cp tcpdmatch /usr/sbin
#cp try-from /usr/sbin
#cp hosts_access.3 /usr/man/man3
#cp hosts_access.5 /usr/man/man5
#cp hosts_options.5 /usr/man/man5
#cp tcpd.8 /usr/man/man8
#cp tcpdchk.8 /usr/man/man8
#cp tcpdmatch.8 /usr/man/man8
#cp libwrap.a /usr/lib
#cp tcpd.h /usr/include
其中:
(1)tcpd是所有internet服務的主要訪問控制守護進程,運行 inetd 或 xinetd 而不是運行單獨的服務守護進程時要用到它。
(2)tcpdchk 一個檢查 tcpd wrapper 設置和提供錯誤信息。
(3)tcpdmatch 用來預知 tcp wrapper 如何控制一個服務的特殊請求。
(4)try-from可以通過遠程shell命令找出主機名字和地址是不是正確的。
(5)safe_finger 是finger工具的 wrapper ,提供自動的主機名反向查找。
3、如何將服務納入管控狀態(tài)
大家知道inetd,也叫作“超級服務器”,就是監(jiān)視一些網絡請求的守護進程,其根據網絡請求來調用相應的服務進程來處理連接請求。inetd.conf則是inetd的配置文件。inetd.conf文件告訴inetd監(jiān)聽哪些網絡端口,為每個端口啟動哪個服務。如果我們要想將telnet、ftp 交由tcpd管控,需要修改/etc/inetd.conf。
修改前為:
ftp stream tcp nowait root /usr/sbin/ftpd ftpd
telnet stream tcp nowait root /usr/sbin/telnetd telnetd
修改后為:
ftp stream tcp nowait root /usr/sbin/tcpd ftpd
telnet stream tcp nowait root /usr/sbin/tcpd telnetd
請記著修改完后要重新啟動process
# vi /etc/inetd.conf
# ps -ef|grep inetd
root 53872 1 0.0 10:37:52 ?? 0:00.00 /usr/sbin/inetd
root 53873 53872 0.0 10:37:52 ?? 0:00.01 -child (inetd)
root 54243 53896 0.3 11:04:58 pts/0 0:00.02 grep inetd
# kill 53872 53873
# /usr/sbin/inetd4、使用TCP Wrappers限制訪問的配置
為了配置TCP wrappers,用戶需要在兩個文件里接受或拒絕連接的標準:/etc/hosts.allow和/etc/hosts.deny。前一個文件定義計算機允許的訪問,后一個文件指定應該拒絕的連接。如果某個系統同時出現在兩個文件里,hosts.allow是優(yōu)先的。如果某個系統沒有出現在任何一個文件里,TCP Wrappers會允許它進行連接。另外,如果運行最嚴格的TCP Wrappers安全,用戶可以在/etc/hosts.deny文件力包含一行“ALL:ALL”,它會禁止所有由TCP Wrappers處理的輸入訪問。然后用戶就可以在/etc/hosts.allow里為特定客戶程序打開服務程序的端口。
/etc/hosts.allow和/etc/hosts.deny的格式是完全一樣的,當然同樣的項目在兩個文件中具有相反的作用。這些項目的基本格式是:
Service-names :client-list [:shell-command]
請看如下兩個文件
# vi /etc/hosts.deny
all:all
(注:禁止所有TCP Wrappers處理的輸入訪問)
# vi /etc/hosts.allow
telnetd:10.65.69.157 10.65.70.
ftpd: 10.65.69. EXCEPT 10.65.69.1
(注: Telnet telnetd行告訴TCP wrappers接受來自于10.65.69.157機器及10.65.70 網段的telnet連接.
Ftp ftpd告訴TCP wrappers接受來自于10.65.69 網段中除10.65.69.1之外的所有計算機的FTP連接。也許10.65.69.1是路游器或其他不應該做FTP客戶端的主機),修改這兩個文件不用重新啟動xinetd進程的,會直接生效的。)
5、檢測的方法
檢測tcp_wrapper 是否正常work
----我自己的設置----# tcpdchk -v
Using network configuration file: /etc/inetd.conf>>> Rule /etc/hosts.allow line 1:
daemons: ftpd
clients: 10.1.20.76
access: granted>>> Rule /etc/hosts.allow line 2:
daemons: telnetd
clients: 10.1.20.76 10.1.20.
access: granted>>> Rule /etc/hosts.deny line 1:
daemons: telnetd
clients: 10.1.20.100
warning: /etc/hosts.deny, line 1: host address 135.129.24.100->name lookup failed
access: denied>>> Rule /etc/hosts.deny line 2:
daemons: ftpd
clients: 10.1.20.100
warning: /etc/hosts.deny, line 2: host address 135.129.24.100->name lookup failed
access: denied>>> Rule /etc/hosts.deny line 3:
daemons: all
clients: all
access: denied
6、結束語
上面介紹只是TCP Wrapper一些簡單功能,它還提供了有許多其它特性,有些特性能夠實現十分精細的效果,因此,有這方面需求的網友,應該仔細查看關于TCP Wappers控制文件格式的官方文檔來實現自己的功能,以保證系統的安全。