我在使用诸如fsockopen
,之类的函数通过我的 PHP 脚本加载 https 网站(google、facebook、amazon)时遇到问题file_get_contents
。操作正在超时。所以我开始查看我的系统设置并注意到当 ipfw 服务停止时,它就像一个魅力。
所以这是一个与我的 IPFW 配置相关的问题。我已启用日志记录,并且在尝试执行 PHP 脚本时会在日志文件中弹出:
ipfw: 1000 Deny ICMPv6:1.3 [2001:...:...:...::] [2001:...:2:...::] in via em0
ipfw: 1000 Deny ICMPv6:131.0 [...::...:...:...:...] [...::1:...:0] in via em0
ipfw: 1000 Deny ICMPv6:136.0 [2001:...:...:...:ff:ff:ff:ff] [...:...:2:...::] in via em0
不过,这看起来像是 IPv6 的问题,我确实allow all
在我的 ipfw 文件中保留了状态类型的连接。
这是我目前使用的配置:
#!/usr/local/bin/bash
IPF="/sbin/ipfw -q add"
/sbin/ipfw -q -f flush
$IPF 10 allow all from any to any via lo0
$IPF 11 deny all from any to 127.0.0.0/8
$IPF 12 deny all from 127.0.0.0/8 to any
$IPF 13 deny tcp from any to any frag
$IPF 250 check-state
$IPF 260 allow tcp from any to any established
$IPF 270 allow all from any to any out keep-state
$IPF 280 allow icmp from any to any
$IPF 290 allow log tcp from 127.0.0.1/32 to 127.0.0.1/32 3306 in
$IPF 350 allow udp from any to any 53 in
$IPF 351 allow tcp from any to any 53 out
$IPF 352 allow tcp from any to any 80 in
$IPF 353 allow tcp from any to any 80 out
$IPF 361 allow tcp from any to any 443 in
$IPF 362 allow tcp from any to any 443 out
$IPF 363 allow tcp from any to any 22 in
$IPF 364 allow tcp from any to any 22 out
$IPF 1000 deny log all from any to any
另外:我在升级到 FreeBSD 10.3(9.2 更早版本)后开始遇到这个问题。
问题是什么?
我不使用 IPv6,但我注意到ICMP 有一个不同
/etc/rc.firewall
的/etc/protocols
IPv6 符号名称,即ipv6-icmp
. 如果您需要传递 IPv6 ICMP 数据包,您可能需要添加新规则:我不了解您现有的规则,并且您可能出于诊断目的将规则分开,但是
in
:out
类似于(如果不等同):
此外,无论如何,您的所有
out
规则都被规则 270 取代。如果您的服务器需要使用名称服务,则缺少允许远程 DNS 服务器通过 UDP 响应的规则: