使用hosts.allow和hosts.deny实现简单的防火墙

说明:我建议学习防火墙只单一学习一种就够了,这种方式虽然简单和快速,但也有些不太灵活,因此若是要深刻防火墙建议转iptables html

1、背景简介java

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

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

2.一、hosts.allow和hosts.deny支持哪些服务安全

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

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

通常这个是针对守护进程Daemon。dom

2.二、查看程序是否使用libwarpssh

方法1、查看hosts_access字段串tcp

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

strings /usr/sbin/sshd | grep hosts_access

方法2、使用ldd

ldd /usr/sbin/sshd | grep libwrap

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

3、语法以及选项规则

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

我在前面提到了两个文件 hosts.allow 和 deny,但根据规则的灵活性,能够只用一个文件,一般是 hosts.allow 来包含 wrappers 全部规则。

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

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

要关闭 wrappers,只需将 hosts.allow 和 hosts.deny 文件改为其余文件名便可。若是不存在容许或拒绝访问文件,wrappers 将不会使用访问控制,从而有效关闭 wrappers 。或者将主机文件清空或清零,这会有一样的效果。

其中:

daemon    要监控的服务,如 telnetd、ftpd、sshd
client    主机名、IP 地址/IP 范围,或域名

选项有:

allow    容许对客户端的访问
deny    拒绝对客户端的访问
except    会匹配第一个列表中全部项,除非匹配第二个列表。例如,容许 domainA 中全部项,除了 hostX.domainA 和 hostY.domanA。

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

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

若是规则容许的话,在每一个规则末尾都加上容许或拒绝选项,这是一个好的作法、好的习惯(由于这能够清晰地描绘访问规则,尤为是在 hosts.allow 中有多个容许或拒绝规则时)。

还有一些其余的选项,我将在稍后演示。如今,咱们将访问控制结合在一块儿。

一个好的起点是,仅仅容许您想要访问主机的客户端使用容许的守护进程,拒绝其余全部客户端。

因此,hosts.deny 可使用如下规则拒绝全部客户端访问全部守护进程:

ALL:ALL

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

ALL:LOCAL : allow

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

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

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 域。如下命令能完成此任务:

telnetd,sshd:.mydomain.com, .mydomain2.com :allow
telnetd,sshd:192.168.4.10 , 192.168.6.: allow

如今,咱们假设容许从 mydomain.com 域中的全部主机上进行 ftp 访问,除了 mydomain.com 中的两个主机:uktrip1 和 uktrip2 。经过使用容许规则,咱们能够利用 except 选项提供两个列表,让 “except” 左侧的主机容许访问,“except” 右侧列表中包含的主机拒绝访问。

telnetd,sshd:.mydomain.com :allow
telnetd,sshd:192.168.4.10 , 192.168.6.: allow
ftpd:.mydomain.com except uktrip1.mydomain.com, uktrip2.mydomain.com : allow

咱们如今看看拒绝规则。要拒绝 192.168.8. 和 192.168.9. 的 telnet 访问,但容许 192.168.6. 的 telnet 访问,我可使用:

telnetd :192.168.8., 192.168.9.: deny
telnetd :192.168.6.: allow

前一个示例也能够用 except 选项来改写:

telnetd:192.168.6. except 192.168.8., 192.168.9.: allow

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

Oct 23 15:50:55 rs6000 auth|security|warning telnetd[270546]: refused connect from
 tardis

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

Oct 23 15:53:36 rs6000 auth|security:info sshd[262252]: refused connect from tardis

若是打开 PARANOID,那么 wrappers 会通知您全部没法解析的主机与 IP 不匹配状况:

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

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

ALL:PARANOID, mydomain:allow

4、实例

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 

 

参考:

http://www.javashuo.com/article/p-dikecnky-dm.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

相关文章
相关标签/搜索