使用 TCP-Wrapper 管理服務

設定檔

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

參考文件

  • man hosts.allow
  • man hosts.deny

Linux 的安全設定中,安全設定大制分為三個類別,Kernel Filter、應用程式本身安全設定以及 TCP-Wrapper。

TCP-Wrapper 就像一個服務總管一樣,所有使用(支援)TCP-Wrapper 的程式,都可以透過他來限制一些安全的控管,比如只允許那些地方可以連入,那些地方無法連入等等。如果連線是允許的,才讓該連線和相關的服務接洽。

現行常見使用 TCP-Wrapper 的服務有 pop3、sshd、vsftpd、telnet、imap ... .... 等常見的服務。

流程

當封包到達主機之後,使用 TCP-Wrapper 會先參考 hosts.allow,若是該服務在 hosts.allow 裡面,就會先被通過,如果不在 hosts.allow 裡面,就會繼續往下,參考 hosts.deny,如果該服務在 hosts.deny 在該項目裡面,那麼就無法使用;最後,萬一該服務在 hosts.allow 或 hosts.deny 裡被沒有被描述的話,就可以使用。

實例:允許使用者只能從 eic.com.tw 網段連進來。

# vi /etc/hosts.deny
___________________________
sshd:ALL EXCEPT .eic.com.tw
:__________________________
 

如此就馬上生效,也不用重新啟動。

安全政策:

實作中,都是先 deny 所有的 service,再一一打開。因此,都會在 hosts.deny 裡會設定 ALL:ALL,再到 hosts.allow 開啟必要的設定,以本例來說,只允許 ssh 服務啟動。

# vi /etc/hosts.deny
_____________________
ALL:ALL
:____________________



# vi /etc/hosts.allow
_____________________
sshd:.eic.com.tw
:____________________
 

如此就可以達到稍微安全的機制。

指定正確的服務名稱:

現在知道了 TCP-Wrapper 的大致用法,那我們如何指定服務名稱呢?其實這個問題不難,一般來說,只要是被 xinetd 所控制的服務,大約都是使用 TCP-Wrapper 機制;其它的服務像是 vsftpd、ssh 等,也是使用 TCP-Wrapper 的機制。

如果是被 xinetd 所控制的服務,可以到 /etc/xinetd.d 看看真正的服務名稱。

[root@xml root]# cd /etc/xinetd.d
[root@xml xinetd.d]# ls
chargen daytime-udp finger ipop2 pop3s rsh services telnet
chargen-udp echo imap ipop3 rexec rsync sgi_fam time
daytime echo-udp imaps ntalk rlogin servers talk time-udp
[root@xml xinetd.d]#

假設現在要設定 ipop3,那麼我們知道這個服務是被 xinetd 所控制,所以就來看看 ipop3 這個真正的服務者是誰!

[root@xml xinetd.d]# cat ipop3
# default: off
# description: The POP3 service allows remote users to access their mail \
# using an POP3 client such as Netscape Communicator, mutt, \
# or fetchmail.
service pop3
{
disable = no
socket_type = stream
wait = no
user = root
server = /usr/sbin/ipop3d
log_on_success += HOST DURATION
log_on_failure += HOST
}
[root@xml xinetd.d]#

在上面有 server = /usr/sbin/ipop3d 這個字樣,所以我們就可以知道,真正付責 ipop3 是由 ipop3d 這個程式來跑的,所以我們在 hosts.allow 或 hosts.deny 設定服務名稱時,請記得要寫成 ipop3d,而不是 ipop3 喔!

[root@xml xinetd.d]# vi /etc/hosts.deny
______________________________________________________________________
#
# hosts.deny This file describes the names of the hosts which are
# *not* allowed to use the local INET services, as decided
# by the '/usr/sbin/tcpd' server.
#
# The portmap line is redundant, but it is left to remind you that
# the new secure portmap uses hosts.deny and hosts.allow. In particular
# you should know that NFS uses portmap!
ipop3d:ALL EXCEPT .eic.com.tw
:______________________________________________________________________
 

如果是非由 xinetd 所控制的服務,如 ssh 或是 vsftpd 等,就直接指定他們的服務名稱就可以了!

Index