如何编辑hosts.deny和hosts.allow文件?

我想在Ubuntu中阻止一些主机,那么我应该如何编辑hosts.deny文件来阻止像example.com这样的主机。
还有一件事,我在Ubuntu中安装了dnsmasq,那么我可以检查dnsmasq缓存的DNS条目吗?如果可以,那么如何操作?
提前感谢。
3个回答

hosts.deny 示例:

ALL: 192.168.1.2
ALL: example.org

这将拒绝对192.168.1.2和example.org的所有服务。如需更多信息,请查看这里:http://linux.about.com/od/commands/l/blcmdl5_hostsde.htm

dnsmasq -d应该会给你缓存的条目,但我对此并不确定。

---更新---

要使用iptables阻止IP地址:

iptables -A INPUT -s 11.22.33.44 -j DROP

解封:
iptables -D INPUT -s 11.22.33.44 -j DROP

dnsmasq -d :-> dnsmasq:无法创建监听套接字:地址已在使用中 - codeomnitrix
我已经把 "78.159.111.140" 添加到了 hosts.deny 文件中。但是,我的浏览器仍然能够加载这个页面。 - codeomnitrix
5Hosts.deny会阻止那些IP地址访问你的计算机上的服务,但是你正在访问他们的服务器。你可以使用iptables或者编辑你的/etc/hosts文件,像这样:127.0.0.1 78.159.111.140 - Dayjay
那么如何阻止我的电脑用户访问该服务器呢? - codeomnitrix
嘿,你可以请再详细解释一下怎么做吗? - codeomnitrix
我更新了我的回答... 顺便说一句,在运行 dnsmasq -d 前,也许你需要先停止 dnsmasq。 - Dayjay

hosts.allowhosts.deny已经被弃用。它们由TCP包装器、基于主机的访问控制http://en.wikipedia.org/wiki/TCP_Wrapper使用。

如果你想阻止访问一个服务,你需要找出该服务是否已经使用了TCP包装器进行编译。我非常怀疑Ubuntu服务仍然使用TCP包装器。

TCP包装器库位于/lib/libwrap.so.0中 如果您想检查lighttpd(Web服务器)是否支持TCP包装器,请运行

> ldd /usr/sbin/lighttpd
    linux-vdso.so.1 =>  (0x00007fff2a5ff000)
    libpcre.so.3 => /lib/libpcre.so.3 (0x00007f69af837000)
    libdl.so.2 => /lib/libdl.so.2 (0x00007f69af633000)
    libattr.so.1 => /lib/libattr.so.1 (0x00007f69af42d000)
    libssl.so.0.9.8 => /lib/libssl.so.0.9.8 (0x00007f69af1db000)
    libcrypto.so.0.9.8 => /lib/libcrypto.so.0.9.8 (0x00007f69aee4b000)
    libfam.so.0 => /usr/lib/libfam.so.0 (0x00007f69aec42000)
    libc.so.6 => /lib/libc.so.6 (0x00007f69ae8bf000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f69afa90000)
    libz.so.1 => /lib/libz.so.1 (0x00007f69ae6a8000)
> _

它没有提到libwrap,所以至少这个服务不支持TCP Wrappers,并且会忽略/etc/hosts.{allow, deny}

14如果TCP包装器已经被弃用,那么它的替代品是什么? - zaius
@zaius 我相信现在的首选方法是使用防火墙,对于Ubuntu来说,最好的选择是ufw,这里有最详细的解释 - Matthew

你想使用防火墙来阻止访问其他网站。我相信ufw已经默认安装了。命令man ufw应该提供有关如何使用它的信息。将192.0.2.15替换为您想要阻止的地址。
以下是命令:
sudo ufw enable
sudo ufw deny to 192.0.2.15