Ser*_*rov 5 security php configuration nginx drupal
操作系统:CentOS 7
nginx:1.6.2
httpd:apache 2.4.6
cms:Drupal 7
在我的服务器遭到入侵后,我从服务器中删除了所有内容,重新安装了操作系统和软件,并从备份中恢复了数据。现在我以最大安全性方式配置所有服务。
在详细研究访问日志后 - 我决定拒绝任何对 php 文件的请求,除了位于站点文档根目录中的index.php以提高安全性。
Nginx 访问日志内容很多,比如:
azenv2.php
az.php
Run Code Online (Sandbox Code Playgroud)
和
/*/wp-login.php
/administrator/index.php
/MyAdmin/index.php
Run Code Online (Sandbox Code Playgroud)
第一类 - 后门(其中一个入侵了我的网站,有人从我的服务器发送了大量垃圾邮件)。
第二 - 有人想找到流行的 cms 和实用程序并尝试使用 login@password,例如 admin@123456
我通过拒绝对 php 文件的请求来阻止这两个类别的原因是:
即使有人会上传 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;
}
}
Run Code Online (Sandbox Code Playgroud)
nginx.conf - 安装后未更改。
更新
最后,我为拒绝创建了这个配置:
location ~ \.php$ {
access_log /path/to/log/nginx_deny.log name_log;
deny all;
}
Run Code Online (Sandbox Code Playgroud)
和这个代理配置:
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;
}
Run Code Online (Sandbox Code Playgroud)
1)。因此,有关攻击尝试的完整信息收集在日志中。
2)。服务器不会为错误的请求做额外的工作。
3)。Drupal cron 可能会工作。
您可以通过多种方式实现这一目标。
直接与配置文件中的内容集成,您可能希望简单地包含如下所示的部分;
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]
}
Run Code Online (Sandbox Code Playgroud)
在允许访问/执行之前,它将检查所请求的文件是否存在。
然而,除上述之外,我个人实际上建议使用fail2ban,如果配置正确,它将为您提供更全面的安全性;您可以将其配置为实时监控您的访问日志,并通过自动动态创建新的 iptables 规则以及您指定的禁止时间来禁止 IP 访问您的服务器。
就我个人而言,我将我的服务器配置为根据本文将fail2ban与nginx一起使用(或者至少基于此 - 您可以根据需要更改它)。
| 归档时间: |
|
| 查看次数: |
9707 次 |
| 最近记录: |