我的VPS指南(Linux)

前言

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 disable s/key passwords

PasswordAuthentication no 禁用使用密码方式认证

PermitRootLogin no 禁止Root账户登录

PubkeyAuthentication yes 启用密钥认证方式

RSAAuthentication yes 启用RSA加密认证

AuthorizedKeysFile %h/.ssh/authorized_keys 公钥文件存放位置,仅在启用密钥认证方式时有效

保存并退出编辑后,重启ssh服务 sudo service ssh restartsudo 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规则配置脚本:
iptables

web-server-plus

chainsaw

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

  • 禁用不必要的服务及对应端口,移除不必要的软件包

  • 某些需要用户名密码登录的服务应设置复杂密码组合,为防止被暴力破解,可以安装 fail2bandenyhosts 并做合理的配置

使用Fail2Ban保护服务器

  • 对于某些Web服务,务必使用较为可靠的WAF用于Web服务的安全防护,或编写WAF规则用于过滤非法请求,SQL注入等针对Web服务的网络攻击。(P.S. Apache ModSecurity)

ModSecurity

  • 日志收集与分析

一般情况下,系统默认将服务所产生的日志文件存放在固定的 /var/log 目录下,可以使用 cron 定时任务来定时打包备份日志文件再自行下载分析,或使用自动分析工具来检查系统服务的运行是否正常

How To Install and Use Logwatch Log Analyzer and Reporter on a VPS

Logwatch是一款用Perl开发的日志分析工具

  • 实时状态监控

实时监控对于用户来说也是十分重要的,在任何时候都可以得知服务器的运行状态,以便判断服务器的运行是否正常,虽然有些vps服务提供商也为用户提供了控制台,但必须要通过网页登陆到服务商主页,再进入到控制台面板进行查看,这样难免会觉得有些不方便

sys-API

个人推荐使用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 #给系统服务端口列表文件加锁,防止未经许可的删除或添加服务

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:

使用 netstatlsofss 找出哪个进程在使用指定端口号,以8080端口为例

sudo netstat -tunlp | grep 8080

sudo lsof -i :8080

sudo ss -lptun 'sport = :8080'

必须要使用root权限执行才会显示pid

相关链接

Linux服务器安全技巧

Linux服务器安全简明指南

Linux/CentOS服务器安全配置通用指南