fsockopen
我在使用诸如、等函数通过 PHP 脚本加载 https 网站(谷歌、脸书、亚马逊)时遇到问题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)后我开始遇到这个问题。
问题是什么?
答案1
我不使用 IPv6,但我注意到/etc/rc.firewall
,/etc/protocols
ICMP 对于 IPv6 有不同的符号名称,即ipv6-icmp
。如果您需要传递 IPv6 ICMP 数据包,您可能需要添加一条新规则:
allow ipv6-icmp ...
我不了解您现有的规则,并且您可能已经分离了诊断目的的in
规则out
,但是:
allow tcp from any to any xxx in
allow tcp from any to any xxx out
类似于(如果不等同于)以下内容:
allow tcp from any to any xxx
此外,无论如何,您的所有out
规则都会被规则 270 所取代。
如果您的服务器需要使用名称服务,则您缺少一条允许通过 UDP 从远程 DNS 服务器发出响应的规则:
allow udp from any 53 to any