前言
vps目前被许多用户所需要,它可以提供各种网络服务,例如:个人博客,网站,内网穿透等众多领域,然而无论是作为个人使用还是商业用途,安全性不可忽视,所以在上手vps时,非常有必要把安全工作给做好!
个人总结
- 系统介绍
目前vps服务提供商大多会提供CentOS/Ubuntu这两种主流Linux发行版系统,一般在部署好系统后会开放ssh服务以便用户登录到服务器进行使用,所以更改ssh服务默认配置是每个用户不可忽视的一件事!
- 生成ssh密钥对
执行 ssh-keygen -t rsa -b 2048
,一路回车,将会在当前用户家目录的 ~/.ssh/
目录下生成 id_rsa
(私钥)和 id_rsa.pub
(公钥)两个文件,执行 cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
,将 id_rsa
文件下载到自己的设备当中妥善保存
- 修改ssh服务默认配置
一般来说ssh服务配置文件位于 /etc/ssh/sshd_config
,在使用非root账户登录系统前,需要先手动新建一个普通用户,然后修改以下几项:
Port 12345
默认端口号为22,将其修改为其他合法端口号
UsePAM yes
启用PAM认证
ChallengeResponseAuthentication no
禁用Challenge/Response认证
PasswordAuthentication no
禁用使用密码方式认证
PermitRootLogin no
禁止Root账户登录
PubkeyAuthentication yes
启用密钥认证方式
RSAAuthentication yes
启用RSA加密认证
AuthorizedKeysFile %h/.ssh/authorized_keys
公钥文件存放位置,仅在启用密钥认证方式时有效
保存并退出编辑后,重启ssh服务 sudo service ssh restart
或 sudo systemctl restart sshd
- 修改sudoers文件,禁用不使用的用户
使用root权限执行 visudo
命令,在 root ALL=(ALL) ALL
这一行下添加 username ALL=(ALL) ALL
,这里的 username
改为你们自己系统当前的用户名,保存退出。使普通用户可以通过sudo调用root权限进行操作。或者将普通用户直接添加到 sudo
组: adduser username sudo
在root用户下执行
使用root权限执行 passwd -l username
或在 /etc/passwd
文件当中注释掉指定的用户(一行一个)
- 配置系统防火墙
根据不同的服务有针对性地编写合理的防火墙规则或配合使用以下仓库的iptables规则配置脚本:
或者使用带有Web界面的CSF(Config Server Firewall),虽然我不推荐用这种方法。需要安装CSF,登录到服务器,首先切换目录:
cd /usr/local/src/
然后执行以下命令:
wget https://download.configserver.com/csf.tgz
tar -xzf csf.tgz
cd csf && sudo sh install.sh
等待程序安装完成,编辑CSF的配置文件:
sudo vi /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”
允许你的IP地址通过防火墙,而绝不被屏蔽,这一点很重要。IP地址定义在下面的文件中:
/etc/csf/csf.ignore
被屏蔽了的IP地址会出现在这个文件中:
/etc/csf/csf.deny
完成更改后,重启CSF服务:
sudo /etc/init.d/csf restart
禁用不必要的服务及对应端口,移除不必要的软件包
某些需要用户名密码登录的服务应设置复杂密码组合,为防止被暴力破解,可以安装
fail2ban
或denyhosts
并做合理的配置
- 对于某些Web服务,务必使用较为可靠的WAF用于Web服务的安全防护,或编写WAF规则用于过滤非法请求,SQL注入等针对Web服务的网络攻击。(P.S. Apache ModSecurity)
- 日志收集与分析
一般情况下,系统默认将服务所产生的日志文件存放在固定的 /var/log
目录下,可以使用 cron
定时任务来定时打包备份日志文件再自行下载分析,或使用自动分析工具来检查系统服务的运行是否正常
How To Install and Use Logwatch Log Analyzer and Reporter on a VPS
Logwatch是一款用Perl开发的日志分析工具
- 实时状态监控
实时监控对于用户来说也是十分重要的,在任何时候都可以得知服务器的运行状态,以便判断服务器的运行是否正常,虽然有些vps服务提供商也为用户提供了控制台,但必须要通过网页登陆到服务商主页,再进入到控制台面板进行查看,这样难免会觉得有些不方便
个人推荐使用Monitee这款服务器状态监控软件,对应的手机端app在谷歌应用商店上可以找到(付费),sys-API是部署在服务器端,采用Java语言开发(Win/Linux/Mac全平台支持)
- 为特殊文件增加不可修改标识
chattr +i /etc/passwd
chattr +i /etc/shadow
chattr +i /etc/group
chattr +i /etc/gshadow
chattr +i /etc/services
(P.S.给系统服务端口列表文件加锁,防止未经许可的删除或添加服务)
chattr +i /etc/pam.d/su
chattr +i /etc/ssh/sshd_config
注意:执行以上 chattr
权限修改之后,就无法添加删除用户了。如果再要添加删除用户,需要先取消上面的设置,等用户添加删除完成之后,再执行上面的操作,例如取消只读权限 chattr -i /etc/passwd
。(记得重新设置只读)
- 禁ping
阻止ping如果没人能ping通您的系统,安全性自然增加了,可以有效的防止ping洪水。为此,可以在 /etc/rc.d/rc.local
文件中增加如下一行:
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
使用iptable禁ping:
iptables -A INPUT -p icmp –icmp-type 0 -s 0/0 -j DROP
不允许ping其他主机:
iptables -A OUTPUT -p icmp –icmp-type 8 -j DROP
防止IP欺骗
编辑 /etc/host.conf
文件并增加如下几行来防止IP欺骗攻击
order hosts,bind
#名称解释顺序
multi on
#允许主机拥有多个IP地址
nospoof on
#禁止IP地址欺骗
- 保持系统内核与软件包为最新版本
Tip:
使用 netstat
、lsof
和 ss
找出哪个进程在使用指定端口号,以8080端口为例
sudo netstat -tunlp | grep 8080
sudo lsof -i :8080
sudo ss -lptun 'sport = :8080'
必须要使用root权限执行才会显示pid