我已经租用 VPS 半年了(用于教育目的),我一直在尽可能地学习有关如何保证其安全的方法。
最近,它被入侵了,我怀疑它已被用作某人的代理,大约一周后我才意识到这一点。我收到了来自“匿名”和“nobody”用户通过 SSH 登录和退出的日志,CPU 使用率超出了图表范围 - 确实如此。
无论如何,我重新安装了它,并重新应用了我所知道的一切来测试它是否会再次发生,并且在重新安装后的短短 24 小时内,我认为它确实发生了。
以下是/var/log/auth.log
令我感到偏执的各个日志:
Oct 31 06:30:21 vultr su[24157]: Successful su for nobody by root
Oct 31 06:30:21 vultr su[24157]: + ??? root:nobody
Oct 31 06:30:21 vultr su[24157]: pam_unix(su:session): session opened for user nobody by (uid=0)
Oct 31 06:30:21 vultr systemd: pam_unix(systemd-user:session): session opened for user nobody by (uid=0)
Oct 31 06:30:21 vultr systemd-logind[503]: New session 40 of user nobody.
Oct 31 06:30:24 vultr su[24157]: pam_unix(su:session): session closed for user nobody
Oct 31 06:30:24 vultr systemd-logind[503]: Removed session 40.
早上 6:30 进行身份验证的人不是我,所以我自然担心自己在某个地方再次搞砸了……
(注意:.bash_history
没有root
显示任何可疑内容,而且据我所知用户nobody
没有.bash_history
- 如果我错了请纠正我)
SSH 的密码验证被禁用,只能进行 SSH 密钥验证,这就是为什么我真的很困惑下一步该尝试什么,因为有人仍然设法获得访问权限(我认为)。
我读了本文关于 phpMyAdmin 漏洞,攻击者获取了“nobody”用户的访问权限。但是我认为这不适用于我的情况,因为根据我的 Apache 日志,没有任何尝试访问 phpMyAdmin 页面,更不用说这篇文章的日期是 2010 年,而我的 phpMyAdmin 页面目前甚至无法访问。
然而,Apache 收到的请求类型让我有点担心,这里有一个例子(来自/var/log/apache2/access.log
):
192.99.144.140 - - [31/Oct/2015:03:43:48 +0000] "PROPFIND /webdav/ HTTP/1.1" 405 569 "-" "WEBDAV Client"
185.25.151.159 - - [31/Oct/2015:03:59:35 +0000] "GET http://testp2.czar.bielawa.pl/testproxy.php HTTP/1.1" 404 460 "-" "Mozilla/5.0 (Windows NT 5.1; rv:32.0) Gecko/20100101 Firefox/31.0"
61.228.95.69 - - [31/Oct/2015:09:07:39 +0000] "CONNECT 126mx00.mxmail.netease.com:25 HTTP/1.0" 405 536 "-" "-"
185.25.151.159 - - [31/Oct/2015:09:15:13 +0000] "GET http://testp4.pospr.waw.pl/testproxy.php HTTP/1.1" 404 457 "-" "Mozilla/5.0 (Windows NT 5.1; rv:32.0) Gecko/20100101 Firefox/31.0"
而我期望的是这样的:
my ip - - [31/Oct/2015:14:47:58 +0000] "GET / HTTP/1.1" 200 589 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.130 Safari/537.36"
我不明白试图
"GET http://testp4.pospr.waw.pl/testproxy.php"
来自我的服务器。没有这样的文件或目录/var/www/html
我将列出我为确保重新安装后的安全所做的所有事情。如果您认为我做错了什么或根本没有做某事,请指出。
我做了什么:
- 全新安装 Ubuntu 15.04
- 生成公钥和私钥对
- 将我的公钥添加到
authorized_keys
我的服务器上的文件中 更改这些设置
/etc/ssh/sshd_config
,从而禁用密码验证并仅允许 SSH 密钥验证PermitRootLogin without-password RSAAuthentication yes PubkeyAuthentication yes PasswordAuthentication no
重启
按以下顺序安装我需要的东西:
zip unzip apache2 mysql-server php5 libapache2-mod-php5 openjdk-7-jdk gcc g++ screen vsftpd auditd
删除默认
/var/www/html/index.html
配置 vsftpd 以使其正常工作(我有一个强密码
FtpUser
)。我遵循本教程来自 DigitalOceanmkdir /home/proj groupadd ftp-users chown root:ftp-users /home/proj chown root:ftp-users /var/www useradd -g ftp-users -d /home/proj FtpUser chown FtpUser /home/proj passwd FtpUser (add strong password)
我更改了这些设置
/etc/vsftpd.conf
anonymous_enable=NO local_enable=YES write_enable=YES chroot_local_user=NO pam_service_name=ftp
重启
我没有提到的其他一切都是默认的,所有安装的软件都是最新的。
请告诉我我之前显示的日志是否值得担心。如果您能告诉我我的配置是否不正确以及我可以做些什么来进一步提高安全性,我将不胜感激。此外,如果您知道有关此事的任何好文章,从长远来看将非常有帮助。
答案1
跑步海华沙网络服务器作为reverse proxy
Web 服务器前面的。它将阻止此类漏洞(它们将被阻止为“垃圾“)在日志中:
91.196.50.33|Sat 19 Mar 2016 21:12:15 +0000|GET http://testp3.pospr.waw.pl/testproxy.php HTTP/1.1
Host: testp3.pospr.waw.pl
Proxy-Connection: Keep-Alive
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:32.0) Gecko/20100101 Firefox/31.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: pl,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
在单独的容器内运行 Web 服务器和代理lxc
以进一步隔离进程。
使用chroot
内置功能php-fpm
。
安装你的/var/www/public_html
as noexec nosuid nodev
。