拿到一台服务器之后,不管是用一键包还是正常软件包管理安装,一些简单的安全配置还是必要的。

验证server_name

首先需要验证server_name,因为IP和域名是一对多的关系,除非针对性攻击,否则一般是用IP+端口来尝试扫描服务器上面运行的网站和服务以找出一些通用的漏洞。(脚本小子最爱)

下面以test.sukikaka.com为域名来说明:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40

server {
listen 80;
server_name test.sukikaka.com;

# 假设我的vhost放这个位置
root /data/vhost/test_sukikaka_com;

index index.php;

gzip on;
gzip_types text/plain application/xml;
gzip_min_length 1000;
gzip_proxied no-cache no-store private expired auth;

access_log /var/log/nginx/test.sukikaka.com_access.log;
error_log /var/log/nginx/test.sukikaka.com_error.log warn;

# 拒绝掉各种不希望被bot访问的
if ($http_user_agent ~* "qihoobot|Baiduspider|Googlebot|Googlebot-Mobile|Googlebot-Image|Mediapartners-Google|Adsbot-Google|Feedfetcher-Google|Yahoo! Slurp|Yahoo! Slurp China|YoudaoBot|Sosospider|Sogou spider|Sogou web spider|MSNBot|ia_archiver|Tomato Bot") {
return 403;
}

# static files
location ~* ^.+.(ico|gif|jpg|jpeg|png|css|js|xml|txt|html|htm)$ {
access_log off;
expires max;
}

# 这是一个php程序的配置
location ~* .*.php$ {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
# 以sock方式连接或者http
fastcgi_pass unix:/var/run/php5-fpm.sock; # or 127.0.0.1:9000
#fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
}

}

启用default规则

这点也很重要,deny掉任何不希望开放的路径,默认错误日志会在/var/log/nginx/error.log文件
错误具体会体现为access forbidden by rule

1
2
3
4
5
6
7
8
server {
listen 80 default_server;
listen [::]:80 default_server;

location / {
deny all;
}
}

基本上做完上面两点,你的网站对应的error log就只剩下比较正常的业务访问错误之类的信息了,其余被nginx拒绝掉的可以在error.log文件体现,如果发现某些IP段尝试访问不同的路径以寻求服务器上面的漏洞,那么可以针对性的ban掉这些IP。