我是 Linux 新手,对 Windows 比较熟悉,我描述了后者的情况,以便我可以在给定的上下文中提出正确的问题。在 Windows 上,如果您在严格阻止模式下运行本地系统防火墙,则需要满足一些要求才能使网络连接正常工作。默认的内置防火墙设置有一些通常称为“核心网络”的规则,这些规则存在并启用以确保您有网络连接。例如:
Core Networking - Destination Unreachable Fragmentation Needed (ICMPv4-In)
Core Networking - Dynamic Host Configuration Protocol (DHCP-In)
Core Networking - Internet Group Management Protocol (IGMP-In)
Core Networking Diagnostics - ICMP Echo Request (ICMPv4-In)
(and their counterparts for Outbound)
这是网络正常工作所需的最低限度。剩下的就是应用程序域配置,即您需要的任何应用程序及其功能 - 您添加自定义规则。
那么我的问题是:Linux 也有类似的操作吗?例如,如果我安装默认的 Arch,我将没有预先配置的 iptables 或防火墙规则,我需要自己制作它们。有没有一些特定的集合默认所需的全局规则如果我将防火墙放入“阻止所有未明确允许的内容”有可用的核心网络吗?
我问的原因是我知道一些发行版,尤其是服务器发行版,默认情况下具有这种状态 - 您必须明确允许/打开您想要或需要的端口。我用过很多 VPS/VDS 附带的。我不知道的是其设置的复杂性。我没有太多经验来做出有根据的结论。显然,我知道如何制定全局 iptabels 规则来拒绝任何端口上的所有传入数据,并且我知道如何对端口 22 进行例外处理。我不知道什么如果除此之外还有什么,我需要在幕后进行设置,类似于上面的 Windows 示例。
我尝试过类似的事情:
iptables -F
iptables -P INPUT DROP
iptables -A INPUT -i lo -p all -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
iptables -A INPUT -j DROP
但现在这甚至不允许像 simple 这样的传出内容ping ip.ip.ip.ip
。
我缺少什么?
答案1
您阻止了 ping 回复(或任何连接回复)。您缺少实施规则状态防火墙。例如,由于您使用的是 Arch Linux,因此记录在简单的状态防火墙。您错过的重要部分是:
# iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
这会告诉iptables对于每个传入数据包询问这连线子系统如果刚刚收到的数据包已经是跟踪流的一部分。如果该流确实存在并且处于预期状态,则意味着它(即:该流的第一个数据包)在第一次看到时先前已被接受(例如:OUTPUT 链接受 OP 情况下的所有内容),因此接受该数据包(并且短路任何剩余的规则)。
将此应用于 ping:传入的 ping 回复数据包将被视为由传出 ping 请求创建的流的一部分,因此将被接受而不是被丢弃,因为没有规则允许它。
请记住顺序确实很重要。该规则应该是第一条规则(或者如果稍后完成,则使用-I INPUT
而不是将其插入到第一个位置)。-A INPUT
您应该阅读 Arch Linux wiki 页面的其余部分以获取更多详细信息。
不要指望找到与其他操作系统的功能完全相同的功能,您可能必须改变思考它的方式。