如何保障企業系統服務安全
目前企業開源系統的運行保障是業界關注的熱點,如何保證開源系統高效、可靠的運行是非常重要的技術問題。本文將詳細介紹如何使用TCP wrappers來保障企業系統服務安全。
使用TCP Wrappers進行保障
1、主要功能
TCP wrappers作為客戶端/服務器模型的一部分,以/etc/hosts.allow和/etc/hosts.deny文件作為其簡單訪問控制列表(ACL)的基礎,可用于與libwrap掛鉤的任何守護進程。此訪問控制語言定義的規則為:基于客戶端的地址和客戶端嘗試訪問的守護進程,選擇性地允許客戶端訪問服務器守護程序。ldd的輸出顯示sshd依賴的共享庫之一是libwrap:
$ ldd /usr/sbin/sshd | grep libwrap
libwrap.so.0 => /lib/libwrap.so.0 (0×00e7c000)
2、使用hosts.allow和hosts.deny
hosts.allow和hosts.deny文件中的每一行的格式如下:
daemon_list : client_list [: command]
其中daemon_list是一個以逗號分隔的一個或多個服務器守護進程(如rpcbind、vsftpd、sshd)的列表,client_list是一個以逗號分隔的一個或多個客戶端的列表,可選的command是當client_list中的一個客戶端試圖訪問daemon_lis t中的一個服務器守護進程時,要執行的命令。
當客戶端請求連接到服務器時,按照下面的順序查閱服務器系統上的hosts.allow和hosts.deny文件,直到找到一個匹配項:
如果守護進程/客戶端對匹配hosts.allow中的一行,授予訪問權限。
如果守護進程/客戶端對匹配hosts. deny中的一行,訪問被拒絕。
如果在hosts.allow或hosts.deny中都沒有匹配項,授予訪問權限。
第一個匹配決定是否允許客戶端訪問服務器。當hosts.allow或hosts.deny中都不存在時,該文件好像是空的。通過刪除這兩個文件,可以允許所有客戶端訪問所有守護進程,但不建議這樣做。
要開放一個本地系統以從遠程系統訪問時,請遵循這些準則:
只對你要允許訪問它的系統開放本地系統。
只允許每個遠程系統訪問你要它訪問的數據。
只允許每個遠程系統以適當的方式(只讀、讀/寫、只寫)訪問數據。
3、具體例子
為了一個更安全的系統,把以下行放入hosts.deny中以阻止所有訪問:
$ cat /etc/hosts.deny
...
ALL : ALL : echo '%c tried to connect to %d and was blocked' >> /var/log/tcpwrappers.log
此行可以防止任何客戶端連接到任何服務,除非在hosts.allow中專門允許的連接。當匹配這條規則時,它向/var/log/tcpwrappers.log文件中添加一行。%c擴展到客戶端信息,以及%d擴展到客戶端試圖連接的守護進程名稱。
也可以在hosts.allow中包括行,以明確允許訪問某些服務和系統。例如,下面的hosts.allow文件允許任何客戶端連接到OpenSSH守護進程(ssh、scp、sftp),但只允許來自本地系統網絡和192.168. 子網用戶的telnet連接:
$ cat /etc/hosts.allow
sshd: ALL
in.telnet: LOCAL
in.telnet: 192.168.* 127.0.0.1
...
第一行允許從任何系統(ALL)連接到sshd。第二行允許與該服務器(LOCAL)在同一個域的任何系統的連接。第三行匹配其IP地址始自192.168.的任何系統以及本地系統。