如何配置 iptables 以允许 Jetpack 和 WordPress 更新检查从我的服务器发出?

如何配置 iptables 以允许 Jetpack 和 WordPress 更新检查从我的服务器发出?

我在 WordPress 服务器上运行 Centos 7 和 Nginx。Jetpack 抱怨无法访问 WordPress,因为出站 HTTPS 被阻止。

我的网站通过 HTTPS 运行。

无法检查核心和插件更新,因为它抱怨:

警告:发生意外错误。WordPress.org 或此服务器的配置可能有问题。如果您仍然遇到问题,请尝试支持论坛。(WordPress 无法与 WordPress.org 建立安全连接。请联系您的服务器管理员。)位于 /var/www/example.com/html/wp-includes/update.php 第 320 行

我在 iptables 中有以下内容:

# Generated by iptables-save v1.4.21 on Mon Feb 13 14:20:10 2017
*nat
:PREROUTING ACCEPT [3:160]
:POSTROUTING ACCEPT [8:568]
:OUTPUT ACCEPT [8:568]
-A OUTPUT -p tcp -m tcp --dport 443 -j DNAT --to-destination [SNIPPED]:443
COMMIT
# Completed on Mon Feb 13 14:20:10 2017
# Generated by iptables-save v1.4.21 on Mon Feb 13 14:20:10 2017
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [42790:10270531]
# Cloudflare
-A INPUT -s 199.27.128.0/21 -p tcp -m multiport --dports 80,443 -j ACCEPT
-A INPUT -s 198.41.128.0/17 -p tcp -m multiport --dports 80,443 -j ACCEPT
-A INPUT -s 197.234.240.0/22 -p tcp -m multiport --dports 80,443 -j ACCEPT
-A INPUT -s 190.93.240.0/20 -p tcp -m multiport --dports 80,443 -j ACCEPT
-A INPUT -s 188.114.96.0/20 -p tcp -m multiport --dports 80,443 -j ACCEPT
-A INPUT -s 173.245.48.0/20 -p tcp -m multiport --dports 80,443 -j ACCEPT
-A INPUT -s 172.64.0.0/13 -p tcp -m multiport --dports 80,443 -j ACCEPT
-A INPUT -s 162.158.0.0/15 -p tcp -m multiport --dports 80,443 -j ACCEPT
-A INPUT -s 141.101.64.0/18 -p tcp -m multiport --dports 80,443 -j ACCEPT
-A INPUT -s 131.0.72.0/22 -p tcp -m multiport --dports 80,443 -j ACCEPT
-A INPUT -s 108.162.192.0/18 -p tcp -m multiport --dports 80,443 -j ACCEPT
-A INPUT -s 104.16.0.0/12 -p tcp -m multiport --dports 80,443 -j ACCEPT
-A INPUT -s 103.31.4.0/22 -p tcp -m multiport --dports 80,443 -j ACCEPT
-A INPUT -s 103.22.200.0/22 -p tcp -m multiport --dports 80,443 -j ACCEPT
-A INPUT -s 103.21.244.0/22 -p tcp -m multiport --dports 80,443 -j ACCEPT
# End Cloudflare    
-A INPUT -p tcp -m tcp --dport 993 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 143 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 465 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 25 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A OUTPUT -p tcp -m tcp --sport 443 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --sport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 10101:10111 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 10000 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP
-A INPUT -p tcp -m state --state NEW -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -j DROP
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,PSH,ACK,URG -j DROP
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed on Mon Feb 13 14:20:10 2017
# Generated by iptables-save v1.4.21 on Mon Feb 13 14:20:10 2017
*mangle
:PREROUTING ACCEPT [41531:17444520]
:INPUT ACCEPT [41531:17444520]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [42790:10270531]
:POSTROUTING ACCEPT [42790:10270531]
COMMIT
# Completed on Mon Feb 13 14:20:10 2017
# Generated by iptables-save v1.4.21 on Mon Feb 13 14:20:10 2017
*raw
:PREROUTING ACCEPT [41531:17444520]
:OUTPUT ACCEPT [42790:10270531]
COMMIT
# Completed on Mon Feb 13 14:20:10 2017

已申请并重新启动,但仍然没有运气。

查看 update.php 第 320 行的代码,它似乎正在尝试访问此 URL:

http://api.wordpress.org/plugins/update-check/1.1/

我可以使用 curl 从我的服务器访问该 URL,但从我所看到的代码来看,它正在调用 HTTP API,但我看不出是怎么回事,也不知道发生了什么。我认为这本身不是 WordPress 的问题,感觉可能与服务器的出站 HTTPS 或证书有关。

我在系统日志中看不到任何感兴趣的内容(我无法在我的 VM 上启动 auditd),但在网站日志中挖掘我看到了以下内容:

*1648 recv() 失败(104:对等方重置连接)从上游读取响应标头时,客户端:162.158.154.184,服务器:example.com,请求:“POST /wp-admin/admin-ajax.php HTTP/1.1”,上游:“fastcgi://unix:/var/run/php-fpm/php-fpm.sock:”,主机:“www.example.com”,引用者:“https://www.example.com/wp-admin/plugin-install.php

另一个有趣的错误是:

安装失败:下载失败。cURL 错误 51:无法与对方安全通信:请求的域名与服务器的证书不匹配。

答案1

找到了。

在 iptables 中,这样做:

-A OUTPUT -p tcp -m tcp --dport 443 -j DNAT --to-destination [SNIPPED]:443

删除此规则即可解决问题。

相关内容