标签:主机 tcp 主机名 hosts wrapper 规则 com example
一、tcp wrapper简介
tcp wrapper是一种访问控制工具,类似于iptables可以作访问控制。
tcp wrapper只能对基于tcp协议的服务作访问控制,但并不是所有基于tcp协议的服务都能实现用tcp wraper作访问控制。
tcp wrapper实现访问控制主要依靠两个文件,
一个是/etc.hosts.allow文件
另一个是/etc/hosts.deny文件
从文件的名字上可以理解:一个是定义允许的,一个是定义拒绝的。那这两个文件生效的次序是怎样的呢?
首先检查hosts.allow文件中是否有匹配的规则。如果有匹配的规则,则允许访问,如果没有匹配的规则,则检查hosts.deny文件中是否有匹配的规则,如果有匹配的规则,则拒绝访问,如果没有匹配的规则,则视为默认规则,默认规则则为允许,所以允许访问
二、访问顺序
数据报先经过iptables,因为iptables是内核模块,数据包先经过内核请求以后,在经过xinetd,最后交给tcpwrapper。
xinetd:超级守护进程管理器,管理用户经常用,但是频率不是很频繁的服务,如telent、ftp、pxe等,这种进程用户请求的时候就放到内存里面,一旦用户不用,就不会放在内存里面。
还有一种进程叫独立守护进程(standalone),是通过service来控制的,这种进程不管用户用不用,都一直用留在内存里面。
三、检测可用性
基本上只要受到xinetd管理的服务,一般情况下就能够用TcpWrapper来管控。对于不是很清楚的服务,我们可以进行这样一个简单的处理:
ldd 'which sshd' |grep wrap
支持
不支持
四、格式化规则
/etc/hosts.allow和/etc/hosts.deny文件的格式是完全相同的.每个规则都必须位于其正确的行位.空行或以井字号(#)开始的行会被忽略.
每条规则都使用以下基本格式来对网络服务的访问进行控制:
<daemon list>: <client list> [: <option>: <option>: ...]
字段解释如下:
<daemon list>
一个由逗号分隔的进程名(不是服务名)列表,或ALL通配符.守护进程列表也接受运算符来提供更大的灵活性.
<client list>
一个由逗号分隔的主机名,主机IP地址,特殊模式或通配符列表,该列表用来识别受这项规则影响的主机.客户列表也接受运算符来允许更大的灵活性.
<option>
这项规则被触发时要运行一个动作选项或由冒号分隔开动作列表.选项领域支持扩展式,发布shell命令,允许或拒绝访问以及修改日志记录.
下面是一个基本的主机访问规则示例:
vsftpd : .example.com
这条规则指示TCP Wrappers监测在example.com域内的任何主机向FTP守护进程(vsftpd)发出的连接.如果这条规则出现在hosts.allow 中,连接则被接受.如果这条规则出现在hosts.deny中,连接则被拒绝.
下面的主机访问规则比较复杂,而且使用两个选项领域:
sshd : .example.com \ :spawn /bin/echo `/bin/date` access denied>>/var/log/sshd.log \ :deny
请注意每个选项领域前面都有反斜线().使用反斜线可以防止由于规则太长而造成失败.
这个范例规定如果example.com中的某个主机试图向SSH守护进程(sshd)发出连接请求,那么执行echo命令来将这次尝试添加到一个专用日志文件里,并且拒绝该连接.因为使用了命令选项 deny,这一行拒绝访问,即使它出现在 hosts.allow 文件里.
五、通配符
通配符使TCP Wrappers更容易匹配各种守护进程或主机.使用通配符最频繁的是在访问规则的客户列表领域内.
以下是可以被使用的通配符:
ALL,完全匹配,可以用在守护进程列表和客户列表中.
LOCAL,与任何不包括圆点(.)的主机匹配,如localhost.
KNOWN,与任何带有已知主机名和主机地址或已知用户的主机匹配.
UNKNOWN,与任何带有未知主机名和主机地址或未知用户的主机匹配.
PARANOID,与任何带有主机名和主机地址不相匹配的主机匹配.
六、模式
模式可以用在访问规则的客户领域里,从而更准确地给客户主机指定分组.
下面是一个常用模式列表:
A.主机名以圆点(.)开始,如果在一个主机名的开始放置一个圆点,那么就与所有共享这个主机名中列出的相同组成部分的主机匹配.如:.example.com适用于example.com域内的任何主机.
B.IP地址以圆点(.)结束,如果在一个IP地址的末尾放置一个圆点,那么就与所有共享一个IP地址的起始数值组的主机匹配.如:192.168.适用于192.168.x.x网络内的任何主机.
C.IP地址/网络掩码对,网络掩码表达式也可以作为一个模式用来控制对某一组特定的IP地址的访问.如:192.168.0.0 /255.255.254.0适用于地址区间从192.168.0.0到192.168.1.255的任何主机.
D.[IPv6地址]/前缀长度对,[网]/前缀长度对也可以作为一种模式用来控制对某一组特定的IPv6地址的访问.如: [3ffe:505:2:1::]/64适用于地址区间从3ffe:505:2:1::到 3ffe:505:2:1:ffff:ffff:ffff:ffff的任何主机.
E.星号(),星号可以用来匹配整个不同组别的主机名或IP地址,只要在含有其它模式类型的客户列表中这些组不混杂在一起的话.如:.example.com适用于example.com域内的任何主机.
F.斜线(/),如果一个客户列表以斜线开始,这个列表就被当作一个文件名对待.若是需要指定很大数量主机的各种规则的话,这一点就很有用处.
七、算子
目前,访问控制规则接受一个算子EXCEPT,这个算子可以用在一个规则的守护程序列表中,也可以用在客户列表中.
这个EXCEPT算子允许特定的例外以用来在同一个规则中拓宽匹配的范围.
下面的例子来自一个hosts.allow文件,除cracker.example.com之外,允许所有example.com主机连接所有的服务
ALL: .example.com EXCEPT cracker.example.com
hosts.allow文件内的另一个例子中,来自192.168.0.x网络的所有客户都可以使用除FTP之外的所有服务
ALL EXCEPT vsftpd: 192.168.0.
从组织结构上来说,避免使用EXCEPT算子更简易一些.因为这样可以让其他的系统管理员能很快地扫描相关的文件以便查看哪些主机被允许或被拒绝访问服务,而无须通过EXCEPT算子来进行排序. 同样, EXCEPT可以进行嵌套,
‘a EXCEPT b EXCEPT c′ would parse as ‘(a EXCEPT (b EXCEPT c))′
八、访问控制
选项领域也允许系统管理员通过添加allow或deny作为命令的最后选项来明确地以单个规则方式允许或拒绝主机.
例如,下面的两个规则允许来自client-1.example.com的SSH连接但却拒绝来自client-2.example.com的连接
sshd : client-1.example.com : allow
sshd : client-2.example.com : deny
访问控制以每个规则为基础,这样选项领域就允许系统管理员把所有访问规则写成一个单一文件,要么是hosts.allow,要么是hosts.deny.有些系统管理员认为这样组织访问规则更容易一些.
九、shell命令
选项领域允许访问规则通过下面两个指令发出shell命令:
(1).spawn,作为子进程发出一个shell命令.这个命令可以使用/usr/sbin/safe_finger来获取发出请求客户的更多信息,或使用 echo命令来创建专用日志文件.在下面的例子中,试图访问来自example.com 域的Telnet服务的客户被俏俏地登录到一个专用文件.
in.telnetd : .example.com : spawn /bin/echo `/bin/date` from%h>>/var/log/telnet.log : allow
(2).twist,把要求进行的服务转换成特定的命令.这个命令经常用来给外侵者设立陷阱(也叫"蜜罐儿").也可以用来向预连接的客户发送信息.这个 twist命令必须出现在该规则命令行的末尾.在下面的例子中,试图访问来自example.com域的FTP服务的客户接收到用echo命令发送的一个 讯息.
vsftpd : .example.com : twist /bin/echo "421 This domain has been black-listed. Access denied!"
十、扩展式
扩展式命令与spawn和twist命令一起使用时,可以提供关于客户/服务器以及相关进程的信息.
下面是一个支持扩展式的命令列表:
%a,返回用户的IP地址.
%A,返回服务器的IP地址.
%c,返回大量的客户信息,比如用户名和主机名,或用户名和IP地址.
%d,返回守护进程的名称.
%h,返回客户的主机名(或IP地址,如果主机名没有提供的话).
%H,返回服务器的主机名(或IP地址,如果主机名没有提供的话).
%n,返回客户的主机名.如果主机名没有提供的话,屏幕上会显示unknown.如果客户的主机名和主机地址不匹配的话,屏幕上会显示paranoid.
%N,返回服务器的主机名.如果主机名没有提供的话,屏幕上会显示unknown.如果服务器的主机名和主机地址不匹配的话,屏幕上会显示paranoid.
%p,返回守护进程的进程ID.
%s,返回各种不同类型的服务器信息,比如守护进程的进程和服务器的主机或IP地址.
%u,返回客户的用户名.如果没有提供的话,屏幕上会显示unknown.
下面用来示范的规则与spawn命令一起使用了一个扩展式来在一个定制的日志文件中确认客户主机.
当来自example.com域的一个主机向SSH守护进程(sshd)发出连接意图时,执行echo命令来把这次包括客户主机名(通过使用%h扩展式)的连接尝试信息记录到一个专用文件中.
sshd : .example.com : spawn /bin/echo `/bin/date` access denied to %h>>/var/log/sshd.log : deny
同样的,扩展式也可以用来把个性化的讯息返回给客户.在下面的例子中,试图访问来自example.com域的FTP服务的客户们得到通知,他们的访问被服务器取缔了.
vsftpd : .example.com : twist /bin/echo "421 %h has been banned from this server!"
有关可用扩展式的更完全的解释,以及对附加的访问控制选项的更完全的解释,可参阅man page的第五部分,查看hosts_access(man 5 hosts_access)和hosts_options.
十一、举例说明
allow : 允许访问
deny : 拒绝访问
spwan : 拒绝访问 并且在自己这边执行后面自定义的命令或脚本
twist : 拒绝访问 并且在访问者那边执行后面自定义的命令或脚本
serverity : 将来访者的信息记录到日志中,然后继续和后面的规则做比对
banners : 显示指定文件中的信息给client端
例如:
vsftpd : 192.168.0. : swpan /bin/echo $(date) %c %d >> /var/log/tcpwrap.log
vsftpd : 192.168.1. : twist /bin/echo “421 Connection prohibited.”
vsftpd : 192.168.2. : banners /var/banners
第一条规则,是拒绝192.168.0的网段访问,并且将日期和来访者的信息记录到tcpwrap.log中
第二条规则,是拒绝192.168.1的网段访问,并且在来访者客户端的那边显示提示信息”421 Connection prohibited.”
第三条规则,当192.168.2的网段访问,在客户端那边显示提示信息,信息内容由 /var/banners文件来指定。
(1). ALLOW/DENY: 可以在/etc/hosts.deny或/etc/hosts.allow 中被当做一个选项来使用。
例:编辑/etc/hosts.allow
in.telnetd: 192.168.1.
in.telnetd: ALL: DENY
(2). spawn:在匹配到规则时重新发起一个额外的命令来执行其他的动作,可使用特殊展开。
在子进程中执行,并不影响当前进程。
in.telnetd: ALL : spawn echo "login attempt from %c to %s" | mail -s waring root
(3). twist:启动一个额外的命令来取代当前规则中定义的服务。
sshd: 192.168.0. twist /bin/echo "421 Connection prohibited."
通过一个例子来说明二者区别:
编辑/etc/hosts.allow
in.telnetd: 192.168.0.: spawn /bin/echo `date` %c accessd %d >> /var/log/tcpwrap.log
可以正常访问,我们来查看下日志:
[root@station39 xinetd.d]# cat /var/log/tcpwrap.log
Wed Mar 23 12:26:29 CST 2011 192.168.0.1 accessd in.telnetd
我们使用twist来试一下:/etc/hosts.allow
in.telnetd: 192.168.0.: twist /bin/echo "421 connetcion deny!"
使用物理机访问,被拒绝:
标签:主机,tcp,主机名,hosts,wrapper,规则,com,example 来源: https://www.cnblogs.com/yaoguang0618/p/16069482.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。