有很多公司的 Github 企业版运行在完全的内网,有些公司的 Github 企业版运行在公网上。不管内网还是公网,从企业信息安全的角度上公司、安全人员或者管理人员总是希望给服务器加上 IP 访问控制。
我之前研究了下,原来 Github 企业版已经内置了 UFW 防火墙软件。其实,我们只需要简单的利用 UFW 防火墙增加一些访问规则就可以轻松的给服务器增加 IP 访问控制了。
UFW 的全称是 Uncomplicated Firewall,其实就是“不复杂的防火墙”,从名字就知道,UFW 的设计就是为了简单易用的,我大概玩了玩,感觉比 iptables 确实简单亲民多了。从Ubuntu 8.04 LTS 以后,UFW 都是默认的防火墙选项了。
首先,ssh -p 122 admin@yourip
连接到你的 Github 企业版终端后台。然后,执行:
sudo ufw status
输出结果大概为如下:
Status: active
To Action From
-- ------ ----
ghe-1194 ALLOW Anywhere
ghe-122 ALLOW Anywhere
ghe-161 ALLOW Anywhere
ghe-22 ALLOW Anywhere
ghe-25 ALLOW Anywhere
ghe-443 ALLOW Anywhere
ghe-80 ALLOW Anywhere
ghe-8080 ALLOW Anywhere
ghe-8443 ALLOW Anywhere
ghe-9418 ALLOW Anywhere
ghe-1194 (v6) ALLOW Anywhere (v6)
ghe-122 (v6) ALLOW Anywhere (v6)
ghe-161 (v6) ALLOW Anywhere (v6)
ghe-22 (v6) ALLOW Anywhere (v6)
ghe-25 (v6) ALLOW Anywhere (v6)
ghe-443 (v6) ALLOW Anywhere (v6)
ghe-80 (v6) ALLOW Anywhere (v6)
ghe-8080 (v6) ALLOW Anywhere (v6)
ghe-8443 (v6) ALLOW Anywhere (v6)
ghe-9418 (v6) ALLOW Anywhere (v6)
这些就是当年 Github 企业版内置的标准规则,你大概对照 Github 企业版端口文档,就大概知道这些端口是干啥的。
默认情况下不建议修改这些设置。但是如果你希望限制某些 IP 才能访问 Github 企业版的https端,那么你可以这样把某个 IP 例如 101.83.88.134 加入你的白名单IP:
sudo ufw allow from 101.83.88.134 to any port 443
系统会返回:
Rule added
这代表规则已经添加成功,你再执行 sudo ufw status
,返回就会多一行:
443 ALLOW 101.80.99.250
然后,当你把全部要加入白名单的 IP 都加入以后,你还需要把原有的默认任何 IP 都可以访问 443 的规则删除,也就是 ghe-443 ALLOW Anywhere
那一行。
怎么删除呢?首先你要得到规则号码,这时候你可以用
sudo ufw status numbered
这样你就会发现,ghe-443 前面出现了一个编号,如下:
[ 6] ghe-443 ALLOW IN Anywhere
然后你执行
sudo ufw delete 6
这样默认任何 IP 可以访问 443 的规则就被删除了,这个时候你的服务器的 443 端口也就是 https 协议,只有你指定的 IP 可以访问了。
如果你想限制什么 IP 能访问服务器的终端后台,操作方法类似,只不过端口是 122。但是切记不要误操作,以免让自己无法登录终端后台进行维护了。
注:这个规则在 Github 企业版服务器升级的时候,会被抹除,所以,如果你指定好了相应的规则,你可以把它写成脚本,每次升级后再执行一次即可。