首页 > Mac使用pf命令来模拟远程数据库网络连接失败

Mac使用pf命令来模拟远程数据库网络连接失败

想模拟数据库网络连接失败的情况, 看这时的程序表现是怎样的? 在Ubuntu系统中可以直接使用下面的命令

sudo iptables -A OUTPUT -p tcp  -d db.foo.com --dport 3306 -j DROP

但在Mac中执行上述命令时报错

udo: iptables: command not found

google了一下发现Mac可以使用pf命令来代替iptables 参考了这个文档和这个文档

/etc/pf.conf文件中增加了下面的内容

anchor "my.pf"
load anchor "my.pf" from "/etc/pf.anchors/my.pf.rules"

在文件/etc/pf.anchors/my.pf.rules中添加规则

block drop out quick on en0 proto tcp from localhost to db.foo.com port 3306

然后加载启用规则

sudo pfctl -f /etc/pf.conf
sudo pfctl -e

发觉配置并没生效 仍能成功连接数据库。 不知到底哪里错了? 另外不得不说这种方式相对iptables来说真的很繁琐。难道Mac中想禁止访问某一服务器的某一端口就只有这一种方式吗?


iptables是Linux系统的防火墙。
macOS使用的是pf,也可以用FreeBSD的ipfw
使用方法:OS X:关于应用软件防火墙
如果你觉得太麻烦,可以用icefloor这个图形化的Mac防火墙,它是pf的GUI前端。
当然,Mac也有其他防火墙,比如tcpblockLittle Snitch(收费)、Hands Off!(收费,注意,不是OS X Yosemite开始自带的Hand Off功能)以及某些带防火墙的杀毒软件都可以。


可以使用下面的命令实现

(sudo pfctl -sr 2>/dev/null; echo "block drop quick on en0 proto tcp from any to db.foo.com port = 3306" ) | sudo pfctl -f - 2>/dev/null
sudo pfctl -e

恢复

➜  ~ sudo pfctl -d

参考文档

As of 10.8 and above you can edit the pf.conf file. I would only do this if you don't have a network firewall in place. You can if need be block from the client side on OSX by editing the above file. OSX has a built in "pfctl" command from terminal. So in your case you could add the following rule and enable the pfctl.

(sudo pfctl -sr 2>/dev/null; echo "block drop quick on en0 proto tcp from any to any port = 3268") | sudo pfctl -f - 2>/dev/null
You would have to change en0 to what every interface you want it blocked on, otherwise I believe (never tested) you can use "! lo0" to block any connections not from loopback.

sudo pfctl -s rules
Will show what rules are in place and a
sudo pfctl -e
will enable the rules.

【热门文章】
【热门文章】