linux下tcpwraper和xinetd超级守护进程访问控制详解
1.tcpwraper概念:不同于iptables防火墙网络访问控制,iptables可对于tcp/ip进行所有访问控制并且工作在内核中,而tcpwraper只对部分具有tcp协议的服务进行网络访问控制,方便那些对iptables不熟悉的人使用,也就是说,只有那些链接libwraper.so库文件的服务,才受tcpwraper控制
2.ldd命令查询服务是否加载动态libwrap.so库文件,如果加载,则受tcpwraper控制,否则不受控制
ldd `which 服务名称` | grep libwrap
例如:ldd `which sshd` | grep libwrap
ldd `which xinetd` | grep libwrap
3.strings命令查询是否加载静态hosts.allow和host.deny文件,如果加载,则受tcpwraper控制,否则不受控制
strings `which portmap` | grep hosts
4.tcpwraper控制机制:主要由/etc/hosts.allow和/etc/hosts.deny这两个文件进行控制
匹配顺序:首先查询/etc/hosts.allow,再查询/etc/hosts.deny,最后默认规则是允许所有通过
/etc/hosts.allow和/etc/hosts.deny文件格式:
服务列表: 客户端列表 [:选项]
服务列表有下几种类型写法:
sshd
vsftpd,sshd,in.telnetd #可以写多个服务
ALL
客户端列表有下几种类型写法:
IP
network/mask(如172.16.1.0/255.255.255.0)
172.16.1.
FQDN #完整合格域名,如mail.willow.com
.example.com #域名
ALL #所有主机
LOCAL,KNOWN,UNKNOWN,PARANOID
EXCEPT #意思是除了
选项有如下几种类型写法:
DENY #在host.allow文件中可以写DENY
ALLOW #在host.deny文件中可以写ALLOW
spawn #可以在后面执行一样命令
tcp_wraper宏定义:
%c:代表客户端信息(user@host)
%s:代表服务器信息(server@host)
%h:客户端主机名(hostname)
%p:服务ID(server PID)
tcp_wraper宏定义查询方法: man 5 hosts_access
5.实例:不允许1.1.1.0/24访问本机telnet服务,但允许1.1.1.100访问,其他客户端不受控制
5.1.方法1:
vim /etc/hosts.allow
in.telnetd: 1.1.1.100
vim /etc/hosts.deny
in.telnetd: 1.1.1.0/255.255.255.0
5.2.方法2:
in.telnetd: 1.1.1. EXCEPT 1.1.1.100
5.3.方法3
in.telnetd: ALL EXCEPT 1.1.1. EXCEPT 1.1.1.100
in.telnetd: ALL
6.在hosts.allow文件中,拒绝1.1.1.0/24访问本机sshd服务,这是一种不常见写法
vim /etc/host.allow
sshd: 1.1.1. :DENY
7.允许1.1.1.0/24访问本机sshd服务,但必须将其登入日志进行记录
sshd: 1.1.1. :spawn echo "`date`, Login attempt from %c to %s" >> /var/log/tcpwarper.log
8.xinetd超级守护进程
守护进程分为独立守护进程和瞬时或短暂守护进程
而xinetd属于独立守护进程,但xinetd控制多个瞬时或短暂守护进程,所以叫做超级守护进程
xinetd超级守护进程:有多个非独立守护进程,也是瞬时或短暂守护进程
主要配置文件:/etc/xinetd.conf,包含/etc/xinetd.d/*所有短暂守护进程配置文件
配置文件分为两部分:全局和服务配置
配置文件格式:
service <服务名称>
(
属性 操作符 值
..............
)
9.xinetd超级守护进程访问控制
man xinetd.conf #查询此文件的配置参数方法
匹配规则:only_from与no_access谁精确匹配用谁的条目
格式如下:
only_from = #仅允许访问的客户端,取值有如下常见几种
IP #如1.1.1.100
NETWORK #如1.1.1.0/24或1.1.1.0/255.255.255.0
HOSTNAME #如mail.willow.com
DOMAIN #如.mail.willow
no_access = #拒绝访问的客户端,取值格式与only_from一样
10.时间访问控制:
格式: access_times = hh:mm-hh:mm
例如: access_times = 08:00-17:00 #仅允许在上午8点至下午5点允许访问
11.侦听的地址访问控制
格式: bind =
interface = #不常见
例如:本机有3个IP,172.16.1.6,172.16.2.6,192.168.1.6,只想侦听172.16.2.6这个地址
bind = 172.16.2.6
12.资源访问控制
cps = 每秒连接的最大并发数 如超过最大并发数的禁用时长
per_source = 每个IP地址最多连接个数
instances = 最大连接数(实例)
banner = 自定义文件路径 #登入提示信息
13.实验对rsync服务进行如下访问控制:
(1).侦听在1.1.1.19地址并提供服务
(2).仅允许1.1.1.0/24网络内的主机访问,拒绝1.1.1.144主机访问
(3).仅允许同时运行最多3个实例,并且每个IP只能发起2个请求
(4).仅允许在上午10点至下午15点允许访问
vim /etc/xinetd.d/rsync
service rsync
{
disable = no
bind = 1.1.1.19
only_from = 1.1.1.0/24
no_access = 1.1.1.144
instances = 3
per_source = 2
access_times = 10:00-15:00
}
service xinetd restart
netstat -antlp | grep 873 #查看rsync服务是否启动且rsync工作在873/tcp端口
再使用rsync命令进行测试即可
14.xinetd超级守护进程也可以通过syslog和file进行记录日志,相关查看/etc/xinetd.conf文件
log_type = SYSLOG daemon info
log_type = FILE /var/log/xxx.log
15.总结:linux系统下的访问控制,常见有3种实现方式,iptables,tcp_wraper,xinetd方式
具体使用哪种方式控制访问,看个人使用习惯和技术特长,因人而异,只要达到目的即可,哈!