均以Budgetvm的ubuntu系统为例
防止扫描
vps的root密码不要设置的太简单,这样很容易被攻破,你可以安装如下软件来降低vps被攻破的机会。
输入如下命令:
apt-get install fail2ban
提示如下表示安装完成:
root@241541:/# ~# apt-get install fail2ban
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
python-pyinotify
Suggested packages:
python-gamin python-pyinotify-doc
The following NEW packages will be installed:
fail2ban python-pyinotify
0 upgraded, 2 newly installed, 0 to remove and 62 not upgraded.
Need to get 154 kB of archives.
After this operation, 763 kB of additional disk space will be used.
Do you want to continue? [Y/n] y
Get:1 http://archive.ubuntu.com/ubuntu/ trusty/universe fail2ban all 0.8.11-1 [129 kB]
Get:2 http://archive.ubuntu.com/ubuntu/ trusty/main python-pyinotify all 0.9.4-1build1 [24.5 kB]
Fetched 154 kB in 0s (213 kB/s)
Selecting previously unselected package fail2ban.
(Reading database ... 28959 files and directories currently installed.)
Preparing to unpack .../fail2ban_0.8.11-1_all.deb ...
Unpacking fail2ban (0.8.11-1) ...
Selecting previously unselected package python-pyinotify.
Preparing to unpack .../python-pyinotify_0.9.4-1build1_all.deb ...
Unpacking python-pyinotify (0.9.4-1build1) ...
Processing triggers for man-db (2.6.7.1-1ubuntu1) ...
fopen: Permission denied
Setting up fail2ban (0.8.11-1) ...
* Starting authentication failure monitor fail2ban [ OK ]
Setting up python-pyinotify (0.9.4-1build1) ...
这样如果用户5次密码输入错误,将会自动将其IP加到黑名单,禁止登录10分钟,10分钟后才可以再登录。
防止php木马
通过设置限制php的 eval 函数来防止木马,可能会导致某些程序无法正常运行,目前在 Ubuntu 14.04 版本上测试通过。
编辑 /etc/php5/conf.d/suhosin.ini 文件,如果找不到这个文件,执行如下命令安装 php5-suhosin 模块
sudo apt-get install php5-suhosin
打开此文件后,找到行:
;suhosin.executor.eval.blacklist =
修改为:
suhosin.executor.eval.blacklist = include,include_once,require,require_once,curl_init,fpassthru,file,base64_encode,base64_decode,mail,exec,system,proc_open,leak,syslog,pfsockopen,shell_exec,ini_restore,symlink,stream_socket_server,proc_nice,popen,proc_get_status,dl, pcntl_exec, pcntl_fork, pcntl_signal,pcntl_waitpid, pcntl_wexitstatus, pcntl_wifexited, pcntl_wifsignaled,pcntl_wifstopped, pcntl_wstopsig, pcntl_wtermsig, socket_accept,socket_bind, socket_connect, socket_create, socket_create_listen,socket_create_pair,link,register_shutdown_function,register_tick_function
然后重启下 apache2 或 php5-fpm 即可
木马基本检查和手工清除
一般采用如下命令去检查有危险文件:
cd /var/www/
grep -R base64_decode *|more
如果看到类似这样的东西,就可以肯定中木马了:
eval(base64_decode("一大串无意义字母
或
eval(base64_decode($_POST["
或
eval(gzuncompress(base64_decode
最佳方案,重装系统,重新配置过。
也可以尝试使用下面的命令手工清除
find /var/www/ -name '*.php' -exec sed -i -r "s/eval.{0,10}\(.{0,10}base64_decode.*?\);//g" {} \;
find /var/www/ -name '*.php' -exec sed -i -r "s/eval.{0,10}\(.{0,10}gzuncompress.{0,10}\(.{0,10}base64_decode.*?\);//g" {} \;
find /var/www/ -name '*.php' -exec sed -i -r "s/eval.{0,10}\(.{0,10}stripslashes.*?\);//g" {} \;
然后继续检查有没有群发邮件的木马:
grep -R -E 'POST.*pfsockopen.*EHLO' /var/www/
发现后,如果确定是木马,采用如下命令批量删除木马文件:
grep -R -l -E 'POST.*pfsockopen.*EHLO' /var/www/ | xargs rm -f
查查 eval 和 fwrite 函数
grep -R -E 'REQUEST.*eval.*fwrite' /var/www/
发现后,如果确认是木马,采用如下命令批量删除木马文件:
grep -R -l -E 'REQUEST.*eval.*fwrite' /var/www/ | xargs rm -f
最后重点检查 包含 eval 函数的 php 文件
find . -name "*.php" -exec grep -l eval {} \;
如果发现有无意义的单词,多半也是中木马了,不过这种需要手工删除相关被感染代码。
根据访问日志批量封IP
有时候,我们可以去检查 HTTP 的访问日志发现异常,然后根据这些异常来封 IP。
首先检查异常, 关键词:xmlrpc.php ,下面的命令可以根据你的需求来调整关键词,其中 access.log 为你的 HTTP 的访问日志文件,可以根据实际情况修改。
执行下面的命令,可以显示所有的 IP 地址,来进行查看:
cat access.log | grep "xmlrpc.php" | awk '{print $1}' | sort | uniq
确认无误后,执行下面的命令进行封禁:
cat access.log | grep "xmlrpc.php" | awk '{print $1}' | sort | uniq | xargs -n1 -I {} iptables -A INPUT -p tcp --dport 80 -s {}/32 -j DROP
执行完毕后,可以使用如下命令查看封禁结果:
iptables -L
注意,上面只是临时封禁,如果重启VPS,将会清空规则。
关闭邮件服务
由于国外对发垃圾邮件的处罚很重,会导致 VPS 被终止,所以为了防止误发邮件或被木马、黑客利用,如果你不需要发送邮件,则关闭邮件服务:
1 删除邮件服务 执行如下命令删除服务器的邮件程序:
apt-get remove postfix* sendmail* procmail*
2 防火墙屏蔽邮件转发 执行如下命令屏蔽邮件端口转发:
iptables -I FORWARD -p tcp --dport 25 -j DROP
sed -i '$i\iptables -I FORWARD -p tcp --dport 25 -j DROP' /etc/rc.local