TCP_Wrappers

工作在第四层(传输层)的TCP协议
对有状态连接的特定服务进行安全检测并实现访问控制
以库文件形式实现
某进程是否接受libwrap的控制取决于发起此进程的程序在编译时是否针对libwrap进行编译的

1
2
$ ldd /PATH/TO/PROGRAM|grep libwrap.so
$ strings PATH/TO/PROGRAM|grep libwrap.so

配置文件

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

检查顺序

1
2
hosts.allow,hosts.deny(默认允许)
注意:一旦前面的规则匹配,直接生效,将不再继续

基本语法

daemon_list@hosts:client_list [:options:option…]

[:options]选项

1
2
3
4
5
6
deny:主要用来在/etc/hosts.allow文件中定义"拒绝"规则
如:vsftpd:172.16. :deny
aloow:主要用来在/etc/hosts.deny文件中定义"允许"规则
如:vsftpd:172.16. :aloow
spawn:启动一个外部程序完成指定的操作;在允许或拒绝的同时触发一个动作
twist:实际动作是拒绝访问,使用指定操作替换当前服务,标准输出和ERROR发送到客户端,默认至/dev/null

spawn使用示例

1
2
$ cat /etc/hosts.allow 
sshd:ALL :spawn echo "$(date +%%F)login attempt from %c to %s,%d" >> /var/log/tcpwrapper.log

说明:
在/etc/hosts.allow中添加,允许登录并记录日志
在/etc/hosts.deny中添加,拒绝登陆并记录日志
%c 客户端信息
%s 服务器端信息
%d 服务名
%p 守护进程的PID
%% 表示%

twist使用示例

1
2
$ [root@node01 ~]#sed -n '/^[^#]/p' /etc/hosts.allow 
sshd:172.18. :twist /bin/echo "不让你连!"

daemon_list@host格式

1
2
3
4
5
单个应用程序的二进制文件名,而非服务名,例如vsftpd
以逗号或空格分割的应用程序文件名列表,如:sshd,vsftpd
ALL表示所有接受tcp_wrapper控制的服务程序
主机有多个IP,可用@hostIP来实现控制
如:in.telnetd@192.168.0.254

client_list选项

1
对哪些主机生效定义的规则,可以是地址段

测试工具

1
tcpdmatch [-d] daemon[@host] client

-d 测试当前目录下的hosts.allow和hosts.deny规则是否生效