操作系统

Linux/VPS系统安全设置整理

Jager · 8月28日 · 2014年 · · 1100次已读

最近入手了一台创宇云的 VPS,然后将 2 个网站都给搬家了。作为一个运维工程师,终于不用再处处受制于人了,虚拟主机真的只能玩个球!

Linux/VPS系统安全设置整理

拿到 VPS 并快速部署好环境后,开始着手完善一下安全设置,以下过程记录,供大家参考:

一、用户权限安全设置

root 权限太高,误操作就相当危险,所以日常操作使用普通账号,只有特定时候才使用 su 切换到 root 身份。

①、新建普通用户,比如 zhangge

useradd  zhangge

②、修改密码

passwd zhangge

③、将帐号加入 wheel 组

usermod -G wheel zhangge

④、设置只允许这个组的帐号,使用 su 命令切换到 root

vim /etc/pam.d/su

找到#auth            required        pam_wheel.so use_uid

去掉行首的注释符 # 然后使用 :wq 保存退出

接着 vim /etc/login.defs

在最末添加 SU_WHEEL_ONLY yes,再用:wq 保存退出即可。

Ps:执行 echo "SU_WHEEL_ONLY yes">>/etc/login.defs 亦可。

现在,再建立新的普通帐号,是无法使用 su 命令切换到 root 组了,感兴趣的可以测试下效果。

⑤、删除掉不需要的用户和用户组

禁止所有默认的被操作系统本身启动的并且不必要的账号,账号越多,系统就越容易受到攻击。

userdel adm
userdel lp
userdel sync
userdel shutdown
userdel halt
userdel news
userdel uucp
userdel operator
userdel games
userdel gopher
userdel ftp
groupdel lp
groupdel news
groupdel uucp
groupdel games
groupdel dip
groupdel pppusers

 ⑥、锁定口令文件

执行 chattr 命令给下面的文件加上不可更改属性,从而防止非授权用户获得权限。

chattr +i /etc/passwd
chattr +i /etc/shadow
chattr +i /etc/group
chattr +i /etc/gshadow

二、SSH 安全设置

①、修改 SSH 端口

默认的 SSH 使用 22 端口,众所周知,所以我们有必要自定义只有自己才知道的端口号,而且增加那些恶意扫描端口的难度,建议把 SSH 端口改到 10000 以上,比如使用 23212,如下修改:

Ps:修改前,请执行 iptables -nL 确认防火墙未设置非 22/80 访问限制规则,否则可能导致修改后无法使用自定义端口连接就悲剧了!

vim /etc/ssh/sshd_config 编辑 SSH 配置文件

i. 找到#Port 22,去掉#号,并在下面添加 Port 23212(先保留 22 端口,等 23212 成功连接再去掉 22,保险做法)

ii. 继续找到#UseDNS yes,改成 UseDNS no,可以提高 ssh 的连接速度;

iii. 找到#PermitRootLogin Yes 改成 PermitRootLogin no 禁止 root 远程使用 ssh 登录

iv. 找到#PermitEmptyPasswords no,去掉#号, 禁止空密码登录

最后,使用 :wq 保存退出,再执行 service sshd restart 重启 ssh 服务即可生效。

此时,可以新开一个终端,测试能否通过 23212 端口连线,如果可以就把之前保留的 port 22 删除即可。

 

三、防火墙简单安全设定

这个 VPS 是直接使用公网 IP 的,防火墙还是得简单设置下。

前期如下规划:

仅作为 web 服务器使用,所以只需要开放 SSH 和 HTTP 端口即可,即只要开放上面定义的 23212 和 80 端口,由于不使用 ftp,本例未提到 21 号端口,实际使用请注意辨别。

①、准备工作

由于操作防火墙具有一定的误操作风险,很可能导致自己也被阻挡在外的悲剧,所以操作防火墙之前事先一定要先建立一个关闭防火墙的计划任务,比如:

执行 crontab -e 加入:

*/5 * * * * root /etc/init.d/iptables stop

表示每 5 分钟停止一次防火墙,以防误操作把自己挡在外面,就算出现误操作,5 分钟之内将会停止,也不会造成悲剧,这是一个技巧!

②、防火墙设置脚本

以下代码我亲测无误,请放心使用,策略说明:

i. 仅开通 HTTP(80)和 SSH(自动抓取)端口,其他一律拒绝访问!可根据实际需要在第 10 行添加其他端口,比如 FTP 的 21 端口、smtp25 端口等。

ii. 单向禁 ping 设置,即外部 IP 无法 ping 通你的公网 IP.

#!/bin/bash
ssh_port=`netstat -nutlp | grep sshd | grep 0.0.0.0 | awk '{print $4}' | cut -d ":" -f2`
iptables -F
iptables -F -t nat
iptables -X
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp -m multiport --dport 80,$ssh_port -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT
/etc/init.d/iptables save
exit 0

 

确认无误后,记得把第①步中的任务计划取消。

如我的 VPS 防火墙规则如下:Linux/VPS系统安全设置整理

 

四、其他安全设置

①、禁 ping

执行如下命令即可:

echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

然后用你的电脑 ping 服务器 IP 就可以看到效果了!

当然如果你用了上面的防火墙脚本,就已经自带禁 ping 功能了。两种方法的区别如下:

以上方法,ping 能够返回消息(前提是防火墙未做阻挡规则,否则直接超时):Linux/VPS系统安全设置整理

 

采用防火墙的方法,则直接超时:

Linux/VPS系统安全设置整理

 

Ps:个人推荐使用上文的防火墙脚本设置,更彻底。

②、开启 TCP SYN Cookie 保护

执行 echo 1 > /proc/sys/net/ipv4/tcp_syncookies 即可。

做到这里,你的 VPS 已经具备不错的安全性了,当互联网没有绝对的安全可言,我们必须时刻注意网络安全动态,随时对已经暴露出的和潜在安全漏洞进行修补。

Ps:除了安全设置外,还可以针对 VPS 做一些优化设置,比如:在张戈还没有 VPS 的时候就写过一篇Linux 优化方法收集与整理,今天刚好派上用场了,感兴趣的推荐前往参考下。

12 条回应
  1. 一昕精选 2014-8-28 · 16:28

    收藏了 估计以后给网站搬家能用得到

  2. Phnomi 2014-8-28 · 22:02

    厉害!学习了

  3. 灰常记忆 2014-8-29 · 7:26

    有钱了,整个VPS玩玩~

  4. Nhzy资讯君 2014-9-5 · 23:49

    代码完全看不懂

  5. MOREOPEN 2014-9-11 · 23:34

    我等哪天真的闲了弄弄,悲催了,还是自己配置好,那些太占资源了,就是ftp也用不到么?

  6. 爱浮夸 2014-9-12 · 17:01

    这样玩太麻烦了。

  7. 台佳佳.中国 2014-12-30 · 14:30

    收藏了,感谢。

  8. 快播电影 2015-3-3 · 15:28

    网站老被黑,看来要好好学习了。

  9. 林小屋 2016-5-20 · 22:17

    收藏了。

  10. Ever 2016-6-16 · 23:24

    请问,如果找你调试L主机搭建环境,不知道需要收取多少辛苦费哦?

    • avatar
      Jager 2016-6-17 · 17:55

      调试哪些方面?

  11. 明月登楼 2017-4-19 · 8:12

    看来,我得去把我的VPS给加强一下了!