伺服器的基本防护

维护您 Gandi VPS 伺服器的安全是您的责任。

这个页面中描述了很多方法可以保护您新创建的伺服器与预设的开启服务,请尽可能的设定一些伺服器的安全防护。

一个刚创建的伺服器

SSH 预设是开启的并且使用只可以用建立伺服器时所输入的密码登入。这个使用者可以执行下列的指令取得 root 权限:

su -

因为预设上 root 密码与使用者密码相同,所以请一定要用 “passwd” 这个命令来变更密码。

最好的实做

SSH: 使用金钥进行认证

在使用 SSH 连接伺服器的时候取代输入密码,您可以建立一对 公开/私有 金钥让您从本地电脑连线到伺服器时不需要输入密码。这个优点在于您不需要熟记密码,金钥在连线时相对安全,越长的金钥长度则越安全。缺点则是在每台需要连线的电脑都必须要安装金钥。

在您的本地端电脑上面执行下列指令来建立金钥:

  ssh-keygen -t rsa -b 2048 

然后,复制公开金钥到您的远端伺服器(范例中 your_server_ip 要替换成您的 VPS 的 IP 位址):

 scp .ssh/id_rsa.pub user@your_server_ip:~/.ssh/authorized_keys 

如果 ”~/.ssh/” 目录不存在于 VPS 上,您需要在传送公开金钥之前建立它。

现在,当您使用 SSH 连线时(ssh username@your_server_ip) 您将不会被要求输入密码。

关于更多公开金钥认证的资讯,请参考 透过 SSH 连结到您的基础伺服器.

SSH: Gandi 的金钥

在基本的伺服器中都包含了 Gandi 的 SSH 金钥,在 已提供授权 的情况下我们的代管团队会可以登入已协助解决一些紧急或是复杂的状况。

如果您想要关闭它,请修改 ”/etc/default/gandi” 这个档案。

SSH: 启动在别的埠,或是 port-knock 验证

这项技术可以有效减少 SSH 的暴力攻击,透过先 “敲” 别的埠然后 SSH 的连线才会开启。

更多的资讯请参考 Wikipedia.

关于资安工具 (Firewall, IDS...)

您应该关闭公开介面上其他您没有使用到的埠。有一些工具使用 iptables(Netfilter/Linux 防火墙规则) 的工具可以达成来增加您的伺服器安全,并且可以通知您有人尝试恶意连接。另外 iptables 可以直接使用命令列模式来进行管理。

  • 防火墙: Shorewall, Ufw, Arno-iptables-firewall, 等…
  • 减少系统被暴力攻击: fail2ban…

注意那些软体可以处理同一个介面上的 Pv4 与 IPv6。IPv6 的保护,透过 IPv6 的特殊防火墙即可(譬如, Shorwall6)

在 Unix/BSD 系统上,Packet Filter (PF) 是标准的防火墙。

您必须要开启伺服器上的 icmp 回应(“ping”) 要求来符合 IPv6 的一些功能。

告警/报表 工具

  • Logwatch/logcheck: Email 的每日报表寄送 - 解析伺服器的日志档
  • Rkhunter/Chkrootkit: 系统木马检查
  • Ninja/Tiger: 报表系统 (监看系统档案的变动与权限)
  • Debsecan: 回报安装在系统上的套件已知的错误

在 CentOS(6.0 或是更高) 上启动 SELinux

您可以使用 SELinux 来阻止您伺服器上未经授权的软体安装与设定档修改,并且可以加强存取控制权限。对您的伺服器来说这是一个很重要的强化。

我们已经测试过在我们平台上的 CentOS 6.x 与核心 2.6.32 和 3.2 中开启 SELinux 。

您首先需要透过进阶的硬碟设定启动 SELinux,在您的 Gandi 帐号内打开硬碟管理页面中的核心区段。

在 “开机选项” 底下,选择下列选项:

  • “在开机时启动”: 打勾
  • “安全套件”: selinux

点选 “送出” 来储存硬碟设定变更。请注意,伺服气在变更选项后需要重新开机设定才会生效。

在您伺服器上使用 root 帐号并输入下列指令来确认是否正常运作:

 # cat /proc/cmdline
  console=hvc0 nosep loglevel=8 selinux=1 security=selinux ro root=/dev/xvda1
 

接下来,请在 ”/etc/fstab” 这个档案中加入下列资讯:

  none    /selinux    selinuxfs    defaults    0  0

最后,请安装下列套件:

  • libselinux
  • selinux-policy
  • selinux-policy-<type> ( <type> 指的是 minimum, targeted…)

SELinux 现在应该已经启动了。

如果您重新启动伺服器,您将会需要进行额外的步骤。

您可以使用 “semodule” 来管理伺服器上的 SELinux 原则模组,例如:

  # packages="execmem.pp.bz2 unconfined.pp.bz2 unconfineduser.pp.bz2"
  # semodule -n -r oracle-port -b base.pp.bz2 -i $packages -s \
       targeted 2>&1 | grep -v "oracle-port"

/usr/share/selinux/<type>/*.pp.bz2 中可以找到可用的套件清单。

您也可以用 “load_policy” 这个指令来读取其他额外的原则档。

如果需要,您可以使用 “fixfiles” 来修复档案。您也可以使用 “sestatus” 来确认 SELinux 的执行状态。

您可以使用 “rpm -q -scripts” 从 selinux-policy-<type> 套件中取得更多资讯,例如: rpm -q –scriptps selinux-policy-minimum

最后更改: 2016/06/08 08:46 (外部编辑)