使用tcp_wrappers控制基於tcp的服務的訪問

  tcp_wrappers是一個由Wieste Venema開發,旨在爲Unix/Linux服務器提供防火牆服務的免費軟件,它能夠讓系統管理員記錄和控制 wrappers 支持的基於 TCP 的服務或守護進程的訪問。

  tcp_wrappers是用來輔助而非替代netfilter的,因tcp_wrappers工作在應用層,而netfilter工作在網絡層

wKiom1bIXZayz-1UAABksegOzj8635.png


1、判斷某服務是否能夠由tcp_wrappers控制

   ⑴動態編譯的程序:使用ldd命令查看其所依賴庫中是否有libwrap

   ⑵靜態編譯的程序:strings /path/to/program

      其顯示結果中若有如下內容,則能夠由tcp_wrappers控制:

        hosts.allow

        hosts.deny

[root@node2 ~]# rpm -q tcp_wrappers   #默認已安裝
tcp_wrappers-7.6-57.el6.x86_64
[root@node2 ~]# rpm -ql tcp_wrappers
/usr/sbin/safe_finger
/usr/sbin/tcpd
/usr/sbin/try-from
/usr/share/doc/tcp_wrappers-7.6
...
[root@node2 ~]# ldd `which xinetd` | grep 'libwrap'
	libwrap.so.0 => /lib64/libwrap.so.0 (0x00007fc77be0e000)
#wrappers支持xinetd進程,因此所有由xinetd管理的瞬時守護進程都能夠受tcp_wrappers控制


2、tcp_wrappers通過讀取配置文件中的規則來判定某服務是否可被訪問:

   /etc/hosts.allow/etc/hosts.deny

   文件中的規則是即時生效的;

   ⑴配置文件的語法:

      daemon_list: client_list [:options]  # man hosts_access

        ①daemon_list:應用程序程序名稱列表,使用逗號分隔,例如 sshd, in.telnetd;可使用ALL,表示所有受控進程

        ②client_list可以是:

           ip,主機名

           域名,如.inception.com

           網絡地址:可以是完整格式掩碼或簡短格式,如172.16.0.0/255.255.0.0或172.16. 但不能使用長度掩碼,如172.16.0.0/16

           ALL:所有客戶端地址

           KNOWN:能被解析的主機名

           UNKNOWN:無法解析的主機名

           PARANOID:主機名和IP地址的各自的正反解析結果不匹配

           EXCEPT:該參數還可嵌套使用

              例如 sshd: ALL EXCEPT 172.16. EXCEPT 172.16.100.71

        ③[:options]可以是:

           deny:通常用在hosts.allow文件中實現拒絕的規則;

           allow:通常用在hosts.deny文件中實現允許的規則;

           spawn:啓動一個額外命令

              例如 in.telnetd: ALL : spawn /bin/echo Warning\:`date` login attempt from %c to %s, %d >> /var/log/telnet.log(若要用echo輸出冒號,需要轉義,因冒號在此有特殊意義)

              在記錄日誌中常用的shell變量有:

                %a:客戶端 IP 地址

                %h:客戶端主機名

                %c:Client information: user@host, user@address, a host name, or just an address

                %s:Server information: daemon@host, daemon@address, or just a daemon name

                %d:守護進程名稱

   ⑵服務檢查邏輯

      client --> /etc/hosts.allow -->(Y) --> ALLOW

      client --> /etc/hosts.allow -->(N) --> /etc/hosts.deny -->(Y) --> DENY

                                          -->(N) --> ALLOW

3、示例

  控制vsftpd僅允許192.168.30.0網絡中的主機訪問,但192.168.30.13除外;對所有被拒絕的訪問嘗試都記錄在/var/log/tcp_wrappers.log日誌文件中;

[root@node3 ~]# ftp 192.168.30.20    #制定規則前node3可正常訪問node2上的vsftpd服務
Connected to 192.168.30.20 (192.168.30.20).
220 (vsFTPd 2.2.2)
Name (192.168.30.20:root): ftp
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (192,168,30,20,137,142).
150 Here comes the directory listing.
drwxr-xr-x    2 0        0            4096 Jul 24  2015 pub
drwxrwxr-x    2 0        0            4096 Nov 22 16:21 upload
[root@node2 ~]# vim /etc/hosts.allow
...
vsftpd: 192.168.30. EXCEPT 192.168.30.13
[root@node2 ~]# vim /etc/hosts.deny
...
vsftpd: ALL : spawn /bin/echo Warning\:`date` login attempt from %c to %s, %d >> /var/log/tcp_wrappers.log
[root@node3 ~]# ftp 192.168.30.20
Connected to 192.168.30.20 (192.168.30.20).
421 Service not available.   #提示無法訪問
[root@node1 ~]# ftp 192.168.30.20   #其它主機可正常訪問
Connected to 192.168.30.20 (192.168.30.20).
220 (vsFTPd 2.2.2)
Name (192.168.30.20:root): ftp
331 Please specify the password.
Password:
230 Login successful.
[root@node2 ~]# tail /var/log/tcp_wrappers.log 
Warning:Thu Feb 18 15:26:05 CST 2016 login attempt from 192.168.30.13 to [email protected], vsftpd


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章