我的 80 端口 iptables 规则有什么问题?

我的 80 端口 iptables 规则有什么问题?

我只想浏览网页并成为网络服务器但它不起作用。

我的规则是:

-P INPUT DROP
-P OUTPUT DROP
-P FORWARD DROP

-A INPUT -p tcp --dport 80 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT

另外,我不太清楚这些状态。哪些状态对我而言是无用的,为什么?

非常感谢你的帮助。

编辑

我仍然无法上网。有了这些规则,我希望我的服务器成为 Web 服务器,同时能够从这台机器上网(这只是为了练习)

以下是我更新的规则。它们有什么问题?(我为 DNS 端口添加了两行,不确定它们是否有用或是否正确)

    -P INPUT DROP
    -P OUTPUT DROP
    -P FORWARD DROP

    -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    -I OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

    -A INPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT
    -A OUTPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT

    -A OUTPUT -p tcp --dport 53 -j ACCEPT
    -A INPUT -p tcp --dport 53 -j ACCEPT

答案1

您的INPUT规则看起来好像是在尝试允许传入连接到本地计算机上的 Web 服务器。您的OUTPUT规则看起来好像是在尝试允许从本地计算机到任何外部 Web 服务器的传出连接。您想实现哪个目标?两者兼而有之?

无论如何,您需要对 ESTABLISHED,RELATED 规则更加宽容。您希望允许所有属于已建立连接的数据包,而不仅仅是那些具有目标端口 80 的数据包。特别是,来自 Web 服务器的回复没有目标端口 80(它们有源端口 80),您不允许它们。通常,您会在每个链的顶部有一个规则,允许所有已建立和相关的数据包:

-I INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-I OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

完成此操作后,您只需允许形成新连接的初始数据包即可。要允许访问本地 Web 服务器,请执行以下操作:

-A INPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT

...并允许从本地机器访问外部 Web 服务器:

-A OUTPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT

对于第二种情况(允许从本地计算机访问外部 Web 服务器),您是否考虑过这是否是您真正想要的?您只想让 HTTP 通过,甚至连 DNS 也不通过?

相关内容