说明:我建议学习防火墙只单一学习一种就够了,这种方式虽然简单和快速,但也有些不太灵活,所以如果要深入防火墙建议转iptables 

一、背景简介

在Linux上多用iptables来限制ssh和telnet,编缉hosts.allow和hosts.deny感觉比较麻烦比较少用。

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

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

hosts.allow和hosts.deny规则的执行者为TCP wrappers,对应守护进程为tcpd;而tcpd执行依赖于程序使用了libwrap库。

也就是说:hosts.allow和hosts.deny支持且只支持使用了libwrap库的服务。

一般这个是针对守护进程Daemon。

2.2、查看程序是否使用libwarp

方法一、查看hosts_access字段串

查看应用程序是否支持wrapper,可以使用strings程序然后grep字符串hosts_access:

  1. strings /usr/sbin/sshd | grep hosts_access

方法二、使用ldd

  1. ldd /usr/sbin/sshd | grep libwrap

查测发现使用xinetd的都可以、sshd可以、vsftpd可以,httpd不可以,weblogic等java程序就不要想了。

三、语法以及选项规则

Wrappers 首先在 hosts.allow 文件中查找规则匹配。如果找到匹配,那么 tcpd 会根据规则停下来,批准或拒绝访问。如果在 hosts.allow 文件中未找到匹配,那么 tcpd 会读取 hosts.deny 文件直到找到匹配。如果找到匹配,就拒绝访问,否则批准访问。

我在前面提到了两个文件 hosts.allow 和 deny,但根据规则的灵活性,可以只用一个文件,通常是 hosts.allow 来包含 wrappers 所有规则。

Wrappers 会查询 hosts.allow 和 hosts.deny 中的规则来确定访问。规则的基本格式是:

  1. daemon, daemon, ...: client, client, ...: option

要关闭 wrappers,只需将 hosts.allow 和 hosts.deny 文件改成其他文件名即可。如果不存在允许或拒绝访问文件,wrappers 将不会使用访问控制,从而有效关闭 wrappers 。或者将主机文件清空或清零,这会有同样的效果。

其中:

  1. daemon 要监控的服务,如 telnetdftpdsshd
  2. client 主机名、IP 地址/IP 范围,或域名

选项有:

  1. allow 允许对客户端的访问
  2. deny 拒绝对客户端的访问
  3. except 会匹配第一个列表中所有项,除非匹配第二个列表。例如,允许 domainA 中所有项,除了 hostX.domainA hostY.domanA

当一行有多个守护进程或客户端时,用逗号分隔开来。可以用 ALL 关键字来表示所有守护进程或所有客户端。

LOCAL 关键字表示匹配所有不包含点号(“.”)的主机;这表示所有与域不相关的主机。

如果规则允许的话,在每个规则末尾都加上允许或拒绝选项,这是一个好的做法、好的习惯(因为这可以清晰地描绘访问规则,尤其是在 hosts.allow 中有多个允许或拒绝规则时)。

还有一些其他的选项,我将在稍后演示。现在,我们将访问控制结合在一起。

对 hosts.allow 和 hosts.deny 的更改是动态的。一旦文件保存,更改就会生效。

一个好的起点是,仅仅允许您想要访问主机的客户端使用允许的守护进程,拒绝其他所有客户端。

所以,hosts.deny 可以使用以下规则拒绝所有客户端访问所有守护进程:

  1. ALL:ALL

本节的其他示例都是只与 hosts.allow 文件有关。为了能让所有守护进程从本地主机(即,与域名不相关的主机)访问,可以使用:

  1. ALL:LOCAL : allow

就我个人而言,我不喜欢使用在任何主机上匹配的 LOCAL 模式,因为网络中所有主机应该属于您的或是某个域。如果原来不是,那么应该是的。尽管如此,在一些小型网络的情况下,却不是这样,LOCAL 允许这些主机访问。

我们假设仅仅允许属于 mydomain.com 域的主机使用 telnet 或 ssh。以下的 hosts.allow 条目能完成此任务:

  1. telnetd,sshd:.mydomain.com :allow

请注意本例中 mydomain.com 之前的点号(“.”)。这是个通配符,表示所有主机以 mydomain.com 结尾。我们还在规则结尾指定这是一条允许规则。尽管这不是严格限制,但如前所述,这样做是一种好的做法。

现在进一步假设我们允许使用以下 IP 地址远程登录 ssh 和 telnet:192.168.4.10 和所有以 192.168.6 开头的 IP 地址。请再次注意,在部分 IP 地址后使用点号;这相当于 192.168.6.*.,或者更精确一点,以 192.168.6 开头的所有 IP 地址。另一种看待 192.168.6. 范围内 IP 地址的方法是等于 192.168.6/24 或所有 192.168.6.1 与 192.168.6.254 之间的 IP 地址。

另外,我们还想允许使用 telnet 和 ssh 访问以下域:mydomain.com 和 mydomain2.com 域。以下命令能完成此任务:

  1. telnetd,sshd:.mydomain.com, .mydomain2.com :allow
  2. telnetd,sshd:192.168.4.10 , 192.168..: allow

现在,我们假设允许从 mydomain.com 域中的所有主机上进行 ftp 访问,除了 mydomain.com 中的两个主机:uktrip1 和 uktrip2 。通过使用允许规则,我们可以利用 except 选项提供两个列表,让 “except” 左侧的主机允许访问,“except” 右侧列表中包含的主机拒绝访问。

  1. telnetd,sshd:.mydomain.com :allow
  2. telnetd,sshd:192.168.4.10 , 192.168..: allow
  3. ftpd:.mydomain.com except uktrip1.mydomain.com, uktrip2.mydomain.com : allow

我们现在看看拒绝规则。要拒绝 192.168.8. 和 192.168.9. 的 telnet 访问,但允许 192.168.6. 的 telnet 访问,我可以使用:

  1. telnetd :192.168.., 192.168..: deny
  2. telnetd :192.168..: allow

前一个示例也可以用 except 选项来改写:

  1. telnetd:192.168.. except 192.168.., 192.168..: allow

Wrappers 会将消息记录到 /var/adm/messages 文件中。消息文件中一个典型的名为 tardis 的被拒绝 telnent 连接会像这样:

  1. Oct :: rs6000 auth|security|warning telnetd[]: refused connect from
  2. tardis

一个典型的名为 tardis 的失败的 ssh 连接像这样:

  1. Oct :: rs6000 auth|security:info sshd[]: refused connect from tardis

如果打开 PARANOID,那么 wrappers 会通知您所有无法解析的主机与 IP 不匹配情况:

  1. error ftpd[]: warning:/etc/hosts.allow, line : host name/address mismatch:
  2. 192.168.7.12 != uktrn004.mydomain.com

有时候能看到哪些主机 DNS 条目不正确也是好事,这样可以被负责 DNS 维护的人员纠正过来。在公司内部网络尤其如此。与拒绝不匹配主机/IP 不同的是,只允许域用户进入(假设这是在安全的公司网络中)。在以下示例中,所有属于 mydomain.com 域的用户都允许访问,请注意对所有守护进程都使用了 ALL:

  1. ALL:PARANOID, mydomain:allow

四、实例

1.限制所有的ssh

除非从218.64.87.0——127上来。

hosts.deny:

sshd:ALL

hosts.allow:

sshd:218.64.87.0/255.255.255.128

2.封掉218.64.87.0——127的telnet 

hosts.deny

sshd:218.64.87.0/255.255.255.128

3.限制所有人的TCP连接,除非从218.64.87.0——127访问 

hosts.deny

ALL:ALL

hosts.allow

ALL:218.64.87.0/255.255.255.128

4.限制218.64.87.0——127对所有服务的访问 

hosts.deny

ALL:218.64.87.0/255.255.255.128

参考:

https://www.cnblogs.com/lsdb/p/8044404.html(以上内容部分转自此篇文章)

https://www.ibm.com/developerworks/cn/aix/library/au-tcpwrapper/(以上内容部分转自此篇文章)

https://www.lifewire.com/hostsallow-linux-command-4094314

https://www.cnblogs.com/jydeng/archive/2013/04/03/4418478.html

http://tubaluer.iteye.com/blog/1349785

http://bbs.51cto.com/thread-923533-1.html

http://blog.csdn.net/atec2000/article/details/12774641

http://blog.csdn.net/yangjiehuan/article/details/9253855

http://blog.51cto.com/jschu/1694549

http://www.360doc.com/content/15/1218/08/15947598_521216288.shtml

使用hosts.allow和hosts.deny实现简单的防火墙的更多相关文章

  1. hosts.allow和hosts.deny文件

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

  2. hosts.allow和hosts.deny

    /etc/hosts.allow和/etc/hosts.deny两个文件是控制远程访问设置的,通过他可以允许或者拒绝某个ip或者ip段的客户访问linux的某项服务. 比如SSH服务,我们通常只对管理 ...

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

    一.背景简介 在linux上多用iptables来限制ssh和telnet,编缉hosts.allow和hosts.deny感觉比较麻烦比较少用. aix没有iptables且和linux有诸多不同, ...

  4. centos 阶段复习 2015-4-6 dd命令 hosts.allow和hosts.deny 啊铭的myssh脚本 清空history命令历史 /dev/zero 零发生器 /dev/null 黑洞 /dev/random 生成随机数 第十一节课

    centos 阶段复习 2015-4-6  dd命令 hosts.allow和hosts.deny 啊铭的myssh脚本 清空history命令历史  /dev/zero 零发生器  /dev/nul ...

  5. hosts.allow、hosts.deny无效查看服务是否支持tcp_Wrappers

    通过配置hosts.allow.hosts.deny,控制SSH限制固定IP登陆 按照以往的方法,分别在hosts.allow.hosts.deny加入以下配置 # more /etc/hosts.a ...

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

    1.登录主机,如果是普通账户先切换至root账号 su root 2.编缉/etc/hosts.allow文件 vi /etc/hosts.allow 允许内容 书写格式(改成自自需要的IP或IP段) ...

  7. 最新hosts,更新hosts,可用

    点击这里,全选后复制,粘贴到C:\Windows\System32\drivers\etc的hosts里面,把原来的置换了

  8. Fiddler如何切换hosts以及切换hosts的另一个神器SwithcHosts

  9. Ubuntu 下更简单的防火墙 Uncomplicated Firewall

    一看名字就十分的明确“不复杂防火墙”没错,它就是 ufw,在 Ubuntu 操作系统当中已经内置,使用它可以简单快速的操作防火墙的功能,比如开关端口,访问 IP,限制连接等等等等.它与一系列 Linu ...

随机推荐

  1. Windows 10又现新Bug,24核心竟卡成蜗牛

    Windows 10又现新Bug,24核心竟卡成蜗牛 https://news.cnblogs.com/n/573996/

  2. scrapy再学习与第二个实例

    这周对于Scrapy进一步学习,知识比较零散,需要爬取的网站因为封禁策略账号还被封了/(ㄒoㄒ)/~~ 一.信息存储 1.log存储命令:scrapy crawl Test --logfile=tes ...

  3. 关于rem的一点总结【原创】

    关于rem的一点总结 最近在写一个关于小说阅读的webApp,由于没有借用任何框架,所以很多底层的内容都需要自己去解决,幸好的是这次只是关于移动端的内容,还不至于去向着jquery的方向码代码.言归正 ...

  4. JavaScript best practices JS最佳实践

    JavaScript best practices JS最佳实践 0 简介 最佳实践起初比较棘手,但最终会让你发现这是非常明智之举. 1.合理命名方法及变量名,简洁且可读 var someItem = ...

  5. NET应用——你的数据安全有必要升级

    最近又被[现场破解共享单车系统]刷了一脸,不得不开始后怕:如何防止类似的情况发生? 想来想去,始终觉得将程序加密是最简单的做法.但是摩拜.ofo也有加密,为什么仍然被破解?那是因为请求在传输过程中被篡 ...

  6. swiper使用心得

    引入: <link rel="stylesheet" href="https://cdn.bootcss.com/Swiper/3.4.2/css/swiper.m ...

  7. Bootstrap Table 使用示例及代码

    http://issues.wenzhixin.net.cn/bootstrap-table/ <!DOCTYPE html> <html> <head> < ...

  8. LOJ #6278. 数列分块入门 2-分块(区间加法、查询区间内小于某个值x的元素个数)

    #6278. 数列分块入门 2 内存限制:256 MiB时间限制:500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: hzwer 提交提交记录统计测试数据讨论 6   题目描述 给出 ...

  9. RadioGroup多行显示

    今天做一个单选框,效果如下: 使用原始的RadioGroup可以实现布局,但因为把6个单选分为两个LinearLayout,导致无法互斥,Google官方的做法是写两个RadioGroup,但是要动态 ...

  10. 在mac上无法使用Android Studio的解决方法

    随着android Studio 1.0的正式发布,估计使用的人会越来越多,并且官网上现在已经没有融合好的eclipse下载了,官方推荐下载android Studio.之前的beta版我也安装过,好 ...