毋庸置疑,对于系统管理员,提高站群服务器的安全性是最重要的事情之一。因此,也就有了许多针对这个话题而生的文章、博客网站和论坛帖子。
一台站群服务器由大量功能各异的部件组成,这一点使得很难根据每个人的需求去提供定制的站群解决方案。这篇文章尽可能涵盖一些有所裨益的小技巧来帮助管理员保证站群服务器和使用者安全。
有一些常识是每个系统管理员都应该烂熟于心的,所以下面的几点在本文将不会提及:

务必保证系统是 最新的
经常更换密码 – 使用数字、字母和非字母的符号组合
给予使用者 最小 的许可权,满足他们日常使用所需即可
只安装那些真正需要的站群软件包

下面是一些更有意思的内容:
更改 SSH 预设埠
在搭建好一台全新的站群服务器后要做的第一件事情就是更改 SSH 的预设埠。这个小小的改动能够使你的站群服务器避免受到成千上万的暴力攻击(LCTT 译注:不更改预设埠相当于黑客们知道你家的门牌号,这样他们只需要一把一把的试钥匙就可能开启你家的锁)。
要更改预设的 SSH 埠,先开启 sshd_config 档案:
sudo vim /etc/ssh/sshd_config
找到下面这行:
#Port 22
“#” 号表示这行是注释。首先删除 #号,然后把埠号改成目的埠。埠号不能超过 65535,确保要指定的埠号没有被系统或其它服务占用。建议在 [维基百科] 上检视常用埠号列表。在本文中,使用这个埠号:
Port 16543
然后储存并关闭档案,等待更改生效。
接下来的一步是:
使用 SSH 金钥认证
在通过 SSH 访问站群服务器时,使用 SSH 金钥进行认证是尤其重要的。这样做为站群服务器增加了额外的保护,确保只有那些拥有金钥的人才能访问站群服务器。
在本地机器上执行下面命令以生成 SSH 金钥:
ssh-keygen -t rsa
你会看到下面的输出,询问要将金钥写到哪一个档案里,并且设定一个密码:
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): my_key
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in my_key.
Your public key has been saved in my_key.pub.
The key fingerprint is:
SHA256:MqD/pzzTRsCjZb6mpfjyrr5v1pJLBcgprR5tjNoI20A
完成之后,就得到两个档案:
my_key
my_key.pub
接下来把 my_key.pub 拷贝到~/.ssh/authorized_key 中
cp my_key.pub ~/.ssh/authorized_keys
然后使用下面命令将金钥上传到站群服务器:
scp -P16543 authorized_keys user@yourserver-ip:/home/user/.ssh/
至此,你就可以从这台本地机器上无密码地访问站群服务器了。
关闭 SSH 的密码认证
既然已经有了 SSH 金钥,那么关闭 SSH 的密码认证就会更安全了。再次开启并编辑 sshd_config,按如下设定:
ChallengeResponseAuthentication no
PasswordAuthentication no
UsePAM no
关闭 Root 登入
下面关键的一步是关闭 root 使用者的直接访问,而使用 sudo 或 su 来执行管理员任务。首先需要新增一个有 root 许可权的新使用者,所以编辑这个路径下的 sudoers 档案:
/etc/sudoers/
推荐使用如 visudo 这样的命令编辑该档案,因为它会在关闭档案之前检查任何可能出现的语法错误。当你在编辑档案时出错了,这就很有用了。
接下来赋予某个使用者 root 许可权。在本文中,使用使用者 sysadmin 。确保在编辑后这个档案时使用的使用者是系统已有的使用者。找到下面这行:
root ALL=(ALL) ALL
拷贝这行,然后贴上在下一行,然后把 root 更改为 “sysadmin”,如下所示:
root ALL=(ALL) ALL
sysadmin ALL=(ALL) ALL
现在解释一下这行的每一个选项的含义:
(1) root (2)ALL=(3)(ALL) (4)ALL
(1) 指定使用者
(2) 指定使用者使用 sudo 的终端
(3) 指定使用者可以担任的使用者角色
(4) 这个使用者可以使用的命令
(LCTT 译注:所以上面的配置是意思是:root 使用者可以在任何终端担任任何使用者,执行任何命令。)
使用这个配置可以给使用者访问一些系统工具的许可权。
这时,可以放心储存档案了。
为了关闭通过 SSH 直接访问 root,需要再次开启 sshd_config ,找到下面这行:
#PermitRootLogin yes
更改为:
PermitRootLogin no
然后储存档案,重启 sshd 守护程序使改动生效。执行下面命令即可:
sudo /etc/init.d/sshd restart
设定防火墙
防火墙有助于过滤出入埠和阻止使用暴力法的登入尝试。我倾向于使用 SCF(Config Server Firewall) 这个强力防火墙。它使用了 iptables,易于管理,而且对于不擅于输入命令的使用者提供了 web 介面。
要安装 CSF,先登入到站群服务器,切换到这个目录下:
cd /usr/local/src/
然后以 root 许可权执行下面命令:
wget https://download.configserver.com/csf.tgz
tar -xzf csf.tgz
cd csf
sh install.sh
只需等待安装程式完成,然后编辑 CSF 的配置档案:
/etc/csf/csf.conf
预设情况下 CSF 是以测试模式执行。通过将 “TESTING” 的值设定成 0,切换到 product 模式。
TESTING = “0”
下面要设定的就是站群服务器上允许通过的埠。在 csf.conf 中定位到下面的部分,根据需要修改埠:
# 允许入站的 TCP 埠
TCP_IN = “20,21,25,53,80,110,143,443,465,587,993,995,16543”
# 允许出站的 TCP 埠
TCP_OUT = “20,21,22,25,53,80,110,113,443,587,993,995,16543”
# 允许入站的 UDP 埠
UDP_IN = “20,21,53”
# 允许出站的 UDP 埠
# 要允许发出 traceroute 请求,请加 33434:33523 埠范围到该列表
UDP_OUT = “20,21,53,113,123”
请根据需要逐一设定,推荐只使用那些需要的埠,避免设定对埠进行大范围设定。此外,也要避免使用不安全服务的不安全埠。比如只允许埠 465 和 587 来传送电子邮件,取代预设的 SMTP 埠 25 。(LCTT 译注:前提是你的邮件站群服务器支援 SMTPS)
重要 :千万不要忘记允许自定义的 ssh 埠。
允许你的 IP 地址通过防火墙,而绝不被遮蔽,这一点很重要。 IP 地址定义在下面的档案中:
/etc/csf/csf.ignore
被遮蔽了的 IP 地址会出现在这个档案中:
/etc/csf/csf.deny
一旦完成更改,使用这个命令重启 csf:
sudo /etc/init.d/csf restart
下面是在某台站群服务器上的 csf.deny 档案的部分内容,来说明 CSF 是很有用的:
.216.48.205 # lfd: (sshd) Failed SSH login from 211.216.48.205 (KR/Korea, Republic of/-): 5 in the last 3600 secs – Fri Mar 6 00:30:35 2015
.41.124.53 # lfd: (sshd) Failed SSH login from 103.41.124.53 (HK/Hong Kong/-): 5 in the last 3600 secs – Fri Mar 6 01:06:46 2015
.41.124.42 # lfd: (sshd) Failed SSH login from 103.41.124.42 (HK/Hong Kong/-): 5 in the last 3600 secs – Fri Mar 6 01:59:04 2015
.41.124.26 # lfd: (sshd) Failed SSH login from 103.41.124.26 (HK/Hong Kong/-): 5 in the last 3600 secs – Fri Mar 6 02:48:26 2015
.169.74.58 # lfd: (sshd) Failed SSH login from 109.169.74.58 (GB/United Kingdom/mail2.algeos.com): 5 in the last 3600 secs – Fri Mar 6 03:49:03 2015
可以看到,尝试通过暴力法登入的 IP 地址都被遮蔽了,真是眼不见心不烦啊!
锁住账户
如果某个账户在很长一段时间内都不会被使用了,那么可以将其锁住以防止其它人访问。使用如下命令:
passwd -l accountName
当然,这个账户依然可以被 root 使用者使用(LCTT 译注:可用 su 切换为该账号)。
了解站群服务器上的服务
站群服务器的本质是为各种服务提供访问功能。使站群服务器只执行所需的服务,关闭没有使用的服务。这样做不仅会释放一些系统资源,而且也会使站群服务器变得更加安全。比如,如果只是执行一个简单的站群服务器,显然不需要 X 显示或者桌面环境。如果不需要 Windows 互联网共享功能,则可以放心关闭 Samba 。
使用下面的命令能检视伴随系统启动而启动的服务:
chkconfig –list | grep “3n”
如果系统执行了 systemd ,执行这条命令:
systemctl list-unit-files –type=service | grep enabled
然后使用下面的命令关闭服务:
chkconfig service off

systemctl disable service
在上面的例子中,把 “service” 替换成真正想要停止的服务名称。例项如下:
chkconfig httpd off

systemctl disable httpd
小结
这篇文章的目的是涵盖一些通用的安全步骤以便帮助你保护站群服务器。你可以采取更多方式去增强对站群服务器的保护。请记住保证站群服务器安全是你的责任,在维护站群服务器安全时尽量做出明智的选择,尽管并没有什么容易的方式去完成这件事情,而建立 “完善的” 安全需要花费大量的时间和测试直到达到想要的结果。
 
 
原文连结:http://www.centoscn.com/CentosSecurity/CentosSafe/2015/0705/5798.html