操作系统:CentOS 7
nginx:1.6.2
httpd:apache 2.4.6
cms:Drupal 7
我的服务器被入侵后,我删除了服务器上的所有内容,重新安装了操作系统和软件,并从备份中恢复了数据。现在我以最高安全级别配置所有服务。
在详细研究了访问日志后,我决定拒绝除 index.php 之外的任何 php 文件的请求它位于站点文档根目录中,用于提高安全性。
Nginx 访问日志包含很多记录,例如:
azenv2.php
az.php
和
/*/wp-login.php
/administrator/index.php
/MyAdmin/index.php
第一类 - 后门(其中一个入侵了我的网站,有人从我的服务器发送大量垃圾邮件)。
第二 - 有人想找到流行的 cms 和实用程序并尝试一些登录@密码,例如 admin@123456
我通过拒绝对 php 文件的请求来阻止 nginx 这两个类别的原因是:
即使有人上传 php-shell -将无法使用它。
所有这些请求都优先于“不好” - 并且通过 nginx 拒绝它们将保护 drupal(httpd+php+mysql)正常工作并消耗电量。
我当前针对一个虚拟主机的配置:
server {
listen <server-ip>;
server_name <site-name>;
location ~* /sites/default/files/styles/ {
try_files $uri @imagestyles;
}
location @imagestyles {
proxy_pass http://127.0.0.1:<port>;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
access_log off;
}
location ~* \.(jpg|jpeg|gif|png|ico|css|bmp|swf|js|pdf|zip|rar|mp3|flv|doc|xls)$ {
root <site-documents-root>;
access_log off;
}
location ~ (^|/)\. {
deny all;
}
location / {
proxy_pass http://127.0.0.1:<port>;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
access_log <path-to-log-folder>/nginx_access.log main;
}
}
nginx.conf-安装后未改变。
更新
最后我创建了这个拒绝的配置:
location ~ \.php$ {
access_log /path/to/log/nginx_deny.log name_log;
deny all;
}
以及此代理配置:
location =/index.php {
proxy_pass http://127.0.0.1:<port>;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
location =/cron.php {
proxy_pass http://127.0.0.1:<port>;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
location / {
proxy_pass http://127.0.0.1:<port>;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
1). 因此,有关攻击尝试的完整信息都收集在日志中。2
). 服务器不会对不良请求进行额外工作。3
). Drupal cron 可能会起作用。
答案1
您可以通过多种方式实现这一点。
直接与您的配置文件中的内容集成,您可能希望简单地包含如下部分;
location ~ \.php$ {
try_files index.php @error;
fastcgi_pass ...;
fastcgi_param SCRIPT_FILENAME /path/to$fastcgi_script_name;
...
}
location @error {
[config of however you want to handle errors]
}
在允许访问/执行之前,它将检查所请求的文件是否存在。
除此之外,我个人建议使用失败2ban如果配置正确,它将为您提供更全面的安全性;您可以将其配置为实时监控您的访问日志,并通过自动动态创建新的 iptables 规则来禁止 IP 访问您的服务器,并指定禁止时间。
我个人已将我的服务器配置为使用 fail2ban 和 nginx,如下所示本文(或者至少基于此 - 您可以根据需要进行更改)。