tcp_wrapper
只提供过滤功能的库文件,具体过滤什么要由管理员定义限制。在
/etc/hosts.allow
和
/etc/hosts.deny
里定义。如果两个文件中都定义了同一个网段,那么按照检查次序,当用户来访问主机时,
tcp_wrapper
首先访问
/etc/hosts.allow
,若有明确定义,就允许访问,若没有明确定义,就访问
/etc/hosts.deny
文件,若此文件中有明确定义则拒绝访问,若没有明确定义就允许访问。所以,如果两个文件中都没有明确定义,则默认为允许访问。
eg.
如果只想允许某网段访问,就在
allow
中明确定义,再在
deny
中
deny all
eg.
如果只想拒绝某网段,则在
allow
中不定义,在
deny
中明确写出该网段即可。
如何写规则?参照如下:
daemon_list: client_list [:options]
daemon_list
进程列表,表示控制哪些进程服务
client_list
用户列表,表示控制哪些用户
到底哪些进程可受
tcp_wrapper
控制,可以通过一个命令查看,这里举例查看
xinetd
是否可受
tcp_wrapper
的控制。
#ldd `which xinetd`
则会显示如下
(
显示的红色为笔者加注!
)
:
linux-gate.so.1 => (0x004ae000)
libselinux.so.1 => /lib/libselinux.so.1 (0x00164000)
libwrap.so.0 => /lib/libwrap.so.0 (0x00110000)
libnsl.so.1 => /lib/libnsl.so.1 (0x00880000)
libm.so.6 => /lib/libm.so.6 (0x00302000)
libcrypt.so.1 => /lib/libcrypt.so.1 (0x001d3000)
libc.so.6 => /lib/libc.so.6 (0x0055e000)
libdl.so.2 => /lib/libdl.so.2 (0x00ed6000)
libsepol.so.1 => /lib/libsepol.so.1 (0x00118000)
/lib/ld-linux.so.2 (0x003df000)
如果该命令进程链接到上面红色显示的库文件上,则说明其接受
tcp_wrapper
控制。
例如
httpd
,
smbd
,
squid
等都有自己的控制机制,都是不受
tcp_wrapper
控制的。但也有很多都是受
tcp_wrapper
控制的,如
xinetd
,
vsftpd
,
ssh
等等都是受
tcp_wrapper
控制的。但是,到底受不受
tcp_wrapper
控制还取决于编译时的选项,如果链接到
/lib/libwrap.so.0 (0x00110000)
这个库文件上,才能受
tcp_wrapper
的控制。
当我们知道一个进程是否能够接受
tcp_wrapper
控制之后,如果能,我们就要自己定义规则了。
假如说想同时控制多个进程的话,进程之间用逗号隔开,如下
daemon1
,
daemon2:client1
,
client2
此条语句可以实现同时控制多个进程允许或拒绝多个用户列表访问。
如果主机上有多个网卡多个
IP
地址,又只想控制其中的一块网卡,则可用以下语句实现:
daemon_list@host:client
其中,
@host
表示对于哪个
IP
地址而言是允许或拒绝用户列表访问的。
要注意的是,编辑
/etc/hosts.allow
或
/etc/hosts.deny
文件后,
tcp_wrapper
的规则会立即生效!
本文出自 “兜兜转转” 博客,转载请与作者联系!