hosts.allow和hosts.deny文件

  之前想通过外部主机访问自己主机上的VMWare虚拟机,使用了VMWare的NAT端口映射,经过一番尝试,算是成功了,总结一下。

  VMWare NAT端口映射就可以将虚拟机上的服务映射成自己主机上的端口,以供外部访问。不过需要主机上的windows系统开放相应的防火墙,windows的资料查起来比较困难,使用价值也不大,所以没有深究,目前直接关闭防火墙,以后有真正的需求再认真研究。

  当然虚拟机上CentOS的防火墙也必须打开,这个好像默认就是打开的(至少sshd的22端口是打开的),然后发现还是访问不了,查了一下资料,需要配置一下/etc/hosts.allow文件。终于到了正题,hosts.allow和hosts.deny,这两个文件是什么?

  CentO系统中提供一个叫TCP Wrapper的机制,是在防火墙之后的一道安全控制屏障,任何访问如果通过不了防火墙,那就没戏,通过了防火墙还得经过TCP Wrapper的考验。详情参考:https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/3/html/Reference_Guide/ch-tcpwrappers.html。这里是官方的比较详细的说明。总结起来大该是如下几点:

  1) TCPWrapper只针对系统中的网络服务,比如sshd,sendmail,vsftpd等等(/etc/rc.d/init.d/目录下的服务)。

  2) TCPWrapper由/usr/lib/libwrap.a实现,代码中使用libwrap.a的服务才会启动hosts.allow和hosts.deny。通过strings -f <service-program> | grep hosts_access可以大致确定制定服务是否使用TCPWrapper。

  3) 大概的流程如下图,其中xinetd也是一个网络服务。

    

  4)TCPWrapper只是在建立连接的时候起控制作用,连接一旦建立,TCPWrapper不会再进行干涉。

  为什么有了防火墙还要搞这么个东西,功能感觉防火墙都能做啊有木有。原因我不太懂,但是看了hosts.allow和hosts.deny的规则大概就懂了,其实这是一个更高层次访问控制,就是说防火墙控制太细了,同时也比较麻烦,我本人就不太熟悉防火墙的细节,以前看过一点,根本记不住。但是hosts.allow和hosts.deny这个规则分分钟记住啊。先来个例子:

 

  这个是host.allow里面的东西,意思是a) allow 192.168.171.129访问本机的sshd服务,b)deny 192.168.171.1访问本机的sshd服务,c)allow 192.168.171.1访问本机的sshd服务。意思很清晰,语法也很简单是不是?

  相信很多同学也能看出语法规则,就是<服务名>:<主机描述>:allow/deny。本人对这个语法也只是初步了解,可能有更复杂的用法,这个有兴趣的同学可以参考之前给出的官方文档链接。这里给出以下几点说明,希望对新接触的同学有点帮助。

  1) 服务名是/etc/rc.d/init.d/目录下的网络服务名,而且是服务的执行文件的名字,如sshd。

  2) 主机描述可以比较自由,比如192.168.*.*,还有ALL,大家应该懂是什么意思,我就不描述了。其他很灵活的用法请参考官方文档。

  3) 上面c中没有指出是allow/deny,为什么是allow?没有细看说明,根据我的实验,在hosts.allow中不指定就是默认allow,hosts.deny中默认是deny。

  4) 原则上建议hosts.allow中定义allow规则,hosts.deny中定义deny规则,但是这个不是强制的。可以在hosts.allow中定deny规则,也可以在hosts.deny中定义allow规则。

  5) 规则的优先顺序为先hosts.allow再hosts.deny,每个文件中由上至下,一旦匹配一条规则,则停止匹配。上面的例子192.168.171.1就会被sshd deny掉,因为deny规则在前,allow规则在后。有些资料说先allow规则再deny规则是不对的,估计是英文水平一般,直接翻译的,断章取义害死人啊。

  是不是很简单实用?好了,骚年,赶紧动手试一试吧。

时间: 2024-08-07 20:55:47

hosts.allow和hosts.deny文件的相关文章

linux中的hosts.allow和hosts.deny文件

linux中有iptables和tcp_wrappers防火墙,iptables防火墙原理为三个表(mangle.nat和filter)五个链(PREROUTING.INPUT.FORWORDING.OUTPUT.POSTROUTING)控制数据流量.tcp_wrapper防火墙的由hosts.allow和hosts.deny两个配置文件决定数据转发. 数据访问linux系统首先匹配hosts.allow文件,如果源IP及port能够满足.allow的条件则直接接收或转发.如果没有在hosts.

通过配置hosts.allow和hosts.deny文件允许或禁止ssh或telnet操作

1.登录主机,如果是普通账户先切换至root账号 su - root 2.编缉/etc/hosts.allow文件 vim /etc/hosts.allow 允许内容 书写格式(改成自自需要的IP或IP段) ssh允许单个ip sshd:192.168.220.1 ssh允许ip段 sshd:192.168.220. telnet允许单个ip in.telnetd:192.168.220.1 telnet允许ip段 in.telnetd:192.168.221. 以ssh允许192.168.22

linux hosts的allow和deny

/etc/hosts.allow和/etc/hosts.deny两个文件是控制远程访问设置的,通过他可以允许或者拒绝某个ip或者ip段的客户访问linux的某项服务. 网络防火墙是阻挡非授权主机访问网络的第一道防护,但是它们不应该仅有一道屏障. Linux使用了两个文件/etc/host.allow和/etc/hosts.deny,根据网络请求的来源限制对服务的访问. host.allow文件列出了允许连接到一个特定服务的主机,而hosts.deny文件则负责限制访问. 不过,这两个文件只控制对

hosts.allow、hosts.deny配置不生效的解决方法

通过配置hosts.allow.hosts.deny,控制SSH限制固定IP登陆 按照以往的方法,分别在hosts.allow.hosts.deny加入以下配置 # more /etc/hosts.allow sshd:192.168.x.x # more /etc/hosts.deny sshd:all 保存后测试,发现配置无效,其他IP还是可以登陆成功. 解决方法如下: hosts.allow和hosts.deny属于tcp_Wrappers防火墙的配置文件,而用tcp_Wrappers防火

hosts.allow和hosts.deny支持哪些服务

一.背景简介 在linux上多用iptables来限制ssh和telnet,编缉hosts.allow和hosts.deny感觉比较麻烦比较少用. aix没有iptables且和linux有诸多不同,多种因素导致默认hosts.allow和hosts.deny在aix也是没用. 但今天反馈说有堡垒机不能ssh某台机器请求放行,查看是aix,向其反馈aix没有iptables,得到反馈hosts.allow的截图,感觉愰然大悟. 确实没人说过aix不能用hosts.allow和hosts.deny

最新hosts,更新hosts,可用

 最新的hosts,该hosts会经常更新,亲测可用. 查一些技术文档和资料方便.这个链接(点击打开)给出的hosts通常是最新的,且有更新.记下备忘. 版权声明:本文为博主原创文章,未经博主允许不得转载.转载请注明出处:http://blog.csdn.net/zhangphil

通过脚本加hosts.deny文件阻止防攻击

用vim打开编辑文集 vi sshdeny.sh #!/bin/bash awk '{for(i=1;i<=NF;i++){if($i ~ /rhost/)print substr($i,7)}}' /var/log/secure | sort | uniq    -c>/root/black.txt DEFINE="10" cat     /root/black.txt |    while read LINE do                NUM=`echo $L

linux下tcpwraper访问控制详解

1.tcpwraper概念:不同于iptables防火墙网络访问控制,iptables可对于tcp/ip进行所有访问控制并且工作在内核中,而tcpwraper只对部分具有tcp协议的服务进行网络访问控制,方便那些对iptables不熟悉的人使用,也就是说,只有那些链接libwraper.so库文件的服务,才受tcpwraper控制 2.ldd命令查询服务是否加载动态libwrap.so库文件,如果加载,则受tcpwraper控制,否则不受控制 ldd `which 服务名称` | grep li

tcp_wraper

tcp_wraper: libwrap.so 必须在编译的时候链接到libwrap.so这个库之后才能实现调用tcp_wraper实现访问控制 可以通过ldd来查看 [[email protected] ~]# ldd `which sshd` |grep libwrap libwrap.so.0 => /lib64/libwrap.so.0 (0x00007fe51d88b000) 如果出现libwrap.so则能实现wraper访问控制 静态链接:把动态库直接编译到服务里 strings命令