我正在尝试配置我用作网关/代理/防火墙的盒子,以允许 IP 伪装并最终从使用代理切换。这是一个 Debian 挤压系统。
目前,我的hosts.allow 文件是空的(hosts.deny 说ALL: PARANOID
),因为squid 无论如何都允许在所需端口上发出请求(而且,我可以通过ssh 连接到盒子)。
iptables 的工作方式是否相同,即当 iptables 设置正确时,hosts.allow 文件可以保持为空吗?
答案1
简短的回答:是的。 TCPwrappers(即查询hosts.allow 和hosts.deny)是一种独立于iptables 的访问控制方法,使用一种方法并不需要或妨碍另一种方法的使用。唯一关心的是确保通过两者都允许所需的访问(如果它们都在系统上处于活动状态)。
答案2
hosts.*
使用 iptables 时不需要这些文件。两者都具有拒绝/允许访问的能力,但工作方式却截然不同。
Network
|
IPTables
/ \
TCPWrapper Squid/Daemon
Daemon
Iptables 是一个内核基础数据包过滤框架,运行在 tcpwrappers 之下的一层。如果您 DROP 或 REJECT 某些内容,iptables
数据包将永远不会到达用户空间。无论程序是什么或如何编写,从它的角度来看,数据包永远不会存在。
使用 TCPwrappers 及其hosts.*
功能的程序在用户空间中运行,并且必须使用库包装使用这些文件,或者通过读取主机文件并关闭从被拒绝的客户端收到的连接来模拟它。
Squid 不读取hosts.deny|allow
文件。它有自己的访问控制实现,指定为acl 位于squid.conf
。以同样的方式,您可以在 iptables 之上配置鱿鱼访问控制,您可以在 iptables 之上使用hosts.deny/allow。仅当 iptables 让流量通过时,这些规则才会发挥作用。现在支持 tcp_wrappers 的程序也不是很多,inetd
作为主要的超级服务器正在慢慢消失。
答案3
您仍然能够使用空连接到 SSH 的原因主机.允许可能是因为默认情况下 tcpwrappers 允许所有连接除非你明确否认。
获得相反(默认拒绝)行为的一种方法是将以下行添加到/etc/hosts.deny(小心别把自己拒之门外!)
ALL: ALL
Tcpwrappers(hosts.allow 和hosts.deny)并不像 iptables 那样适用于每个网络服务。
您通常可以通过检查守护程序是否与 libwrap 链接来查看守护程序是否支持 tcpwrappers,如下所示:
$ ldd /usr/sbin/sshd | grep libwrap
libwrap.so.0 => /lib64/libwrap.so.0 (0x00007f389b5a2000)
如果没有输出,则该守护程序可能不支持 tcpwrappers。
最后一点,我认为一个非常常见的设置是仅使用 iptables 并保持 tcpwrappers 未配置。