1

我正在运行 nginx 和 php-fpm 的服务器上设置 iptables 规则。我已经允许 80 和 443 端口,但正如我所见,还有与更高端口的附加连接被阻止。

的样本输出

网络统计-anpn | grep -v ":80"

tcp        0      1 10.0.0.1:8109       10.1.2.24:29837     SYN_SENT    19834/nginx: worker
tcp        0      1 10.2.3.45:31890     10.0.0.1:26701      SYN_SENT    17831/nginx: worker

10.0.0.1 是服务器 IP,其他是客户端。

我的 iptables 规则:

iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT

有人可以解释一下:

  1. 为什么 nginx 使用不同于标准的 80 和 443 的端口。

  2. 这个额外的端口范围是多少?

  3. 如何正确允许使用 iptables 连接到 nginx?

提前致谢!

4

2 回答 2

4

Nginx 通常会在处理请求时执行内部重定向,这将在高编号端口上建立连接。我不相信你能找到这个范围。

这是我看到的例子:

tcp        0      0 192.168.0.126:80        0.0.0.0:*               LISTEN      9432/nginx: worker
tcp        0      0 192.168.0.126:80        192.168.0.177:62950     ESTABLISHED 9432/nginx: worker
tcp        0      0 192.168.0.126:80        192.168.0.177:62949     ESTABLISHED 9432/nginx: worker
tcp        0      0 192.168.0.126:80        192.168.0.177:62947     ESTABLISHED 9432/nginx: worker
unix  3      [ ]         STREAM     CONNECTED     29213    9432/nginx: worker 

您的防火墙规则起作用的原因是因为您:

  1. 已打开 Nginx 服务器侦听器所需的端口(即 80 和 443)

  2. 您已包含以下防火墙规则,该规则允许对 localhost (127.0.0.1) 的所有请求,因此不会阻止打开高编号端口的 Nginx 内部重定向:

    iptables -A 输入 -i lo -j 接受

所以回答你的问题:

  1. Nginx 服务器侦听器可以侦听您喜欢的任何端口,而不仅仅是 80 和 443。它使用额外端口的原因是用于内部重定向以及实现的一个方面。

  2. 我不相信你能找到这个范围。事实上,我怀疑任何代码都会要求系统使用某个端口,而是会要求操作系统提供一个高编号的未使用端口。

  3. 您可能没有意识到,但您实施的防火墙规则应该可以正常工作。

于 2013-04-24T20:16:36.740 回答
0

我也将 PHP-FPM 与 Nginx 一起使用。我在 iptables 中阻止了除 22/80/443 之外的所有端口,并且没有遇到任何连接问题。我检查了我自己的 netstat ,它看起来与您的输出相同。你确定你的 iptables 规则是正确的吗?你能发布的输出sudo iptables -L

于 2013-03-01T02:56:00.303 回答