前面说到给服务器配置防火墙:安装Ubuntu14.04服务器后的安全加固,后来发现当ufw启动后VPN就连接不上了,开启端口后VPN虽然能连接上但无法访问互联网。

查看了ufw日志后总算找到了解决办法,主要就是PPTP协议端口和DNS端口,以及ufw转发策略的问题。

ufw默认日志路径是/var/log/ufw.log,开启ufw后连接不上VPN是因为:
`
May 8 22:23:14 mysite kernel: [137400.496578] [UFW BLOCK] IN=eth0 OUT= MAC=04:01:4d:aa:cf:01:3c:8a:b0:0d:6f:f0:08:00 SRC=112.65.191.26 DST=192.241.215.26 LEN=44 TOS=0x00 PREC=0x00 TTL=51 ID=31806 PROTO=TCP SPT=2760 DPT=1723 WINDOW=32120 RES=0x00 SYN URGP=0`

可以看到ufw阻止了从客户端到主机的1723端口的访问,百度后发现PPTP VPN建立需要
TCP协议 1723端口
GRE协议 协议号47

注意:很多文章说到需要打开47号端口,这里完全是把协议号和端口号弄混了,完全没必要也没用!!

所以在ufw里allow 1723端口:
ufw allow 1723

然后重新启动ufw
ufw disable
ufw enable

接下来再连接VPN应该会卡在验证账号密码或直接报错,再查看ufw日志:
May 8 23:41:35 mysite kernel: [142101.477024] [UFW BLOCK] IN=eth0 OUT= MAC=04:01:4d:aa:cf:01:3c:8a:b0:0d:6f:f0:08:00 SRC=112.64.189.87 DST=192.241.215.26 LEN=128 TOS=0x00 PREC=0x00 TTL=242 ID=48426 PROTO=47

意思是ufw阻止了从客户端到主机的47号协议,这里很清楚是PROTO=47,即GRE协议
找了好大一圈才发现问题还是出在ufw上,需要修改ufw的默认转发策略,文件在/etc/default/ufw

如果不需要用到ipv6的话可以顺便把
IPV6=yes

改为:
IPV6=no

接下来修改
DEFAULT_INPUT_POLICY="DROP"
DEFAULT_OUTPUT_POLICY="DROP"
DEFAULT_FORWARD_POLICY="DROP"

修改为:
DEFAULT_INPUT_POLICY="ACCEPT"
DEFAULT_OUTPUT_POLICY="ACCEPT"
DEFAULT_FORWARD_POLICY="ACCEPT"

还需要注意sysctl的问题,修改:
IPT_SYSCTL=/etc/ufw/sysctl.conf

修改为:
IPT_SYSCTL=/etc/sysctl.conf
(可能不需要,我是这样修改过的)

然后保存修改,重启ufw服务:
ufw disable
ufw enable

注意:这里修改默认转发策略DROPACCEPT可以解决很大一部分开启ufw后VPN连接出错或连接上VPN后不能访问互联网(还可能是DNS的问题,下面要说到)的问题!

出现连接上VPN后连Google都打不开的问题的话,可以再查看ufw日志:
May 8 22:27:47 mysite kernel: [137673.617470] [UFW BLOCK] IN=ppp0 OUT=eth0 MAC= SRC=10.100.0.2 DST=8.8.8.8 LEN=70 TOS=0x00 PREC=0x00 TTL=63 ID=48198 PROTO=UDP SPT=50459 DPT=53 LEN=50

显然ufw把DNS访问也阻止了,这里打开53号端口:
ufw allow 53

继续重启ufw
ufw disable
ufw enable

再连上VPN就解决所有问题了。

再重复一遍,打开ufw后VPN不能连接或连接上不能联网的主要问题就是出在ufw的默认转发策略上。

如果VPN仍然连接不上,可以在连接失败后及时查看ufw日志,如果日志中没有相关记录,就基本可以断定是客户端路由器和ISP的问题(主要出在ISP不支持GRE协议,我这里就有这个问题)。

参考:用 pptp 作为 vpn server,启动防火墙需要打开哪些端口才能上网?