tcp_wrapper 是一种主机访问控制的工具 配置简单 易用 收敛速度极快。你懂的!
tcp_wrapper :配置简易, 配置文件:/etc/hosts.allow deny
tcp_wrapper:能够实现授权访问,非独立守护进程,工作在linux内核中的tcp协议栈上
1、并非所有的服务均能由tcp_wrapper
2、判断:某服务程序是否能够由tcp_wrapper
动态编译
# ldd `which xinetd` | grep wrapper
libwrap.so.0 => /lib64/libwrap.so.0 (0x00007f9f62cf9000)
命令进行检查其是否连接至libwrap.so.0 => lib64/libwrapper.so.0
如果某一个程序被连接到这个库上就能被tcp_wrapper控制
静态编译:
命令:strings /path/to/program
实例:
yum -y install telnet # 注释 telnet 由 xinetd 代为监听
# chkconfig xinetd on
# netstat -tnlpa | grep 23
tcp 0 0 :::23 :::* LISTEN 65117/xinetd
# cat /etc/hosts.allow
in.telnetd: 192.168.0. # 只允许
# cat /etc/hosts.deny
in.telnetd: ALL
实例参考:进行匹配:单个IP的匹配
cat /etc/hosts.allow
in.telnetd: 172.16. EXCEPT 172.16.251.105 # 进行排除 允许172.16.0.0/16,这个网段的主机访问,但惟独拒绝172.16.251.105 这台主句访问
# cat /etc/hosts.deny
in.telnetd: ALL
配置文件语法格式:
daemon_list: client_list [:options]
daemon_list:
应用程序名称;
应用程序列表:如果有多个,用逗号分隔即可;
ALL:匹配所有进程
client_list:
IP地址:172.16.100.100
主机名:www.firefox.com
网络地址/子网掩码:掩码仅允许使用长格式,不允许使用CIDR格式
172.16. 表示 172.16.0.0/255.255.0.0
tcp_wrapper有几个内置的Macro
用于client_list的有:ALL, KNOWN, UNKNOWN, PARANOID
用于daemon_list的有:ALL
EXCEPT: 可以用于client或daemon之中,起到排除功能
[:options]
在hosts.allow文件使用deny选项: 在hosts.allow文件定义拒绝规则
在hosts.deny文件使用allow选项:在hosts.deny文件定义放行规则
spawn
echo
%c: user@host
%s: server@host
%h: 客户端主机名
%p: 服务器上的进程的PID
应用实例:
deny:在hosts.allow文件定义拒绝规则
cat /etc/hosts.allow
in.telnetd: 172.16. : deny
同样:allow : 在hosts.deny文件中使用allow选项:在hosts.deny文件定义放行规则
cat /etc/hosts.allow
in.telnetd: 172.16. : allow
in.telnetd: ALL EXCEPT 172.16.251.105 : deny
# 在hosts.allow 文件中定义拒绝所有的用户仅允许172.16.251.105
spawn:
记录某一用户尝试登录此主机保存日志文件中并加上date,宏记录客户端主机的
#in.telnetd: ALL : spawn echo `date` login attempt from %c to %s >> /var/log/tcp_wrapper.log
#cat /var/log/tcp_wrapper
Mon Mar 31 10:24:14 CST 2014 login attempt from 172.16.251.105 to in.telnetd@172.16.100.7
Mon Mar 31 10:24:15 CST 2014 login attempt from 172.16.251.105 to in.telnetd@172.16.100.7
echo 的信息无须加引号,否则,命令替换可能不会进行
%c :user@host
%s : server@host
%h : 客户端主机名
%p : 服务器上的进程的PID
TCP_WRAPPER 匹配机制:
1、先检查/etc/host.allow ,如果被允许,则直接放行
2、如果被上列表没有匹配到则检查/etc/hosts.deny 如果被拒绝,则禁止访问
3、如果二者均无匹配,则放行
详情请参考: man5 hosts_access