正如标题所述,我有一台 Linux 机器。据我所知,我可以使用 hosts.allow / hosts.deny 或 iptables 来保护。有什么区别?还有其他可以使用的机制吗?
答案1
IPTables 在内核级别工作。一般来说,这意味着它不了解应用程序或进程。它只能根据从各种数据包头中获取的信息进行过滤。
host.allow/deny 则在应用程序/进程级别运行。您可以为系统上运行的各种进程或守护进程创建规则。
例如,IPTables 可以在端口 22 上进行过滤。SSH 可以配置为使用此端口,通常也是如此,但也可以配置为使用其他端口。IPTables 不知道它在哪个端口上,它只知道 TCP 标头中的端口。但是可以为某些守护程序(例如 openssh 守护程序)配置 hosts.allow 文件。
如果必须选择,我通常会选择最低限度的 IPTables。我认为 hosts.allow 是一个不错的奖励。尽管守护进程级别似乎更容易,但 IPTables 会在数据包真正到达很远之前阻止它。对于安全性来说,越早阻止越好。但是,我确信有些情况会改变这种选择。
答案2
iptables 在访问到达应用程序之前阻止访问,而 hosts.allow/hosts.deny 是 PAM 的一部分,要求应用程序实施 PAM 检查并正确处理文件。两者都很有用,如果两者都有就更好了。
答案3
TCP Wrappers 仅限制对“包装”服务以及已针对 libwrap.a 库明确编译的进程的访问。
对其他进程的访问不受影响。
例如,如果您设置ALL:ALL
了hosts.deny
,那么您将无法创建到 的新传入连接sshd
,但到 的连接netcat
可以正常工作。
在某些情况下,包装可以依赖于主机名而不是 IP 地址,但这种保护有点有限,并且不像它应该的那样难以绕过。
我认为没有理由不使用 TCP Wrappers,但我认为它无法可靠地完成任何使用 IPTables 无法更好、更干净地完成的事情。