VPS 架设网站时需要注意的事情

VPS 架设网站时需要注意的事情
由于以前没有用过 VPS,然后看到有一些便宜的 VPS 就自己根据网上的文章在 VPS 上建网站,那时候除了知道要改 SSH 端口和禁止密码登陆改用证书登陆之外其他都不了解。结果就傻傻的在 Nginx 默认设置上开网站,也就是直接 IP 可以访问网页,之后就被各种 CC 和暴力破解的骚扰。现在终于知道不能这么随便了,于是写一篇文章说一些关于 VPS 搭建网站注意的基础事项。

首先就是更改 SSH 端口,禁止通过密码登陆改用证书验证,这个事情相信大家都知道,随便搜都有相关文章就不说了。

无论是 Apache 还是 Nginx 都不要直接在默认的服务器配置中开始网站,除非你是打算允许直接通过 IP 访问你的网站。

如果是用 Nginx 搭建 WordPress 的话需要在配置文件中加一句 try_files $uri $uri/ /index.php?$args; 才能实现自定义 URL

    location / {
        root   /usr/share/nginx/html;
        index  index.php index.html index.htm;

        # 设置 WordPress 的伪静态
        try_files $uri $uri/ /index.php?$args;
    }

    # 将 xmlrpc 的访问 301 到网上找到的 Download Test Files
    location =/xmlrpc.php{
        rewrite ^(.*) http://ovh.net/files/10Gio.dat permanent;
    }

现在各种 CDN 服务,可以加速网站访问速度,国外的 CloudFlare(国内版是百度云加速),国内七牛,这些服务都能加快网站访问速度,并且可以隐藏网站的服务器 IP。然后就是防火墙禁止 CDN 以外的 IP 访问 80 和 443 端口。这样所以访问 80 和 443 都只能通过 CDN 了。

一般 CDN 服务商都会有给出IP段的,将 CDN 的IP段添加进白名单就好了。

很好奇的是百度云加速的列表中缺少一些 CloudFlare 的IP段,所以使用百度云加速的時候要把 CloudFlare 的 IP 也加進白名單!

CentOS 6 还是用 iptables。其实 CentOS 7 默认的 firewalld 其实也一样,为何那么多人还是更喜欢 iptables?

下面的只有 CloudFlare 的 IP,没百度的。

*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
# 允许本地链接
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -s 10.0.0.0/8 -j ACCEPT
-A INPUT -s 127.0.0.0/8 -j ACCEPT
-A INPUT -s 172.16.0.0/12 -j ACCEPT
-A INPUT -s 192.168.0.0/16 -j ACCEPT
# 仅允许制定 IP 段访问网站端口
-A INPUT -s 103.21.244.0/22 -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -s 103.22.200.0/22 -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -s 103.31.4.0/22 -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -s 104.16.0.0/12 -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -s 108.162.192.0/18 -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -s 131.0.72.0/22 -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -s 141.101.64.0/18 -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -s 162.158.0.0/15 -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -s 172.64.0.0/13 -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -s 173.245.48.0/20 -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -s 188.114.96.0/20 -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -s 190.93.240.0/20 -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -s 197.234.240.0/22 -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -s 198.41.128.0/17 -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -s 199.27.128.0/21 -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -s 103.21.244.0/22 -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -s 103.22.200.0/22 -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -s 103.31.4.0/22 -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -s 104.16.0.0/12 -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -s 108.162.192.0/18 -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -s 131.0.72.0/22 -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -s 141.101.64.0/18 -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -s 162.158.0.0/15 -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -s 172.64.0.0/13 -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -s 173.245.48.0/20 -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -s 188.114.96.0/20 -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -s 190.93.240.0/20 -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -s 197.234.240.0/22 -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -s 198.41.128.0/17 -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -s 199.27.128.0/21 -p tcp -m tcp --dport 443 -j ACCEPT
# 开放某些需要使用的端口
-A INPUT -p tcp -m tcp --dport 123321 -j ACCEPT
# 默认禁止所有进站请求
-A INPUT -j DROP
-A FORWARD -j DROP
# 下面是出站的设置
-A OUTPUT -s 10.0.0.0/8 -j ACCEPT
-A OUTPUT -s 127.0.0.0/8 -j ACCEPT
-A OUTPUT -s 172.16.0.0/12 -j ACCEPT
-A OUTPUT -s 192.168.0.0/16 -j ACCEPT
-A OUTPUT -d 103.21.244.0/22 -p tcp -m tcp --sport 80 -j ACCEPT
-A OUTPUT -d 103.22.200.0/22 -p tcp -m tcp --sport 80 -j ACCEPT
-A OUTPUT -d 103.31.4.0/22 -p tcp -m tcp --sport 80 -j ACCEPT
-A OUTPUT -d 104.16.0.0/12 -p tcp -m tcp --sport 80 -j ACCEPT
-A OUTPUT -d 108.162.192.0/18 -p tcp -m tcp --sport 80 -j ACCEPT
-A OUTPUT -d 131.0.72.0/22 -p tcp -m tcp --sport 80 -j ACCEPT
-A OUTPUT -d 141.101.64.0/18 -p tcp -m tcp --sport 80 -j ACCEPT
-A OUTPUT -d 162.158.0.0/15 -p tcp -m tcp --sport 80 -j ACCEPT
-A OUTPUT -d 172.64.0.0/13 -p tcp -m tcp --sport 80 -j ACCEPT
-A OUTPUT -d 173.245.48.0/20 -p tcp -m tcp --sport 80 -j ACCEPT
-A OUTPUT -d 188.114.96.0/20 -p tcp -m tcp --sport 80 -j ACCEPT
-A OUTPUT -d 190.93.240.0/20 -p tcp -m tcp --sport 80 -j ACCEPT
-A OUTPUT -d 197.234.240.0/22 -p tcp -m tcp --sport 80 -j ACCEPT
-A OUTPUT -d 198.41.128.0/17 -p tcp -m tcp --sport 80 -j ACCEPT
-A OUTPUT -d 199.27.128.0/21 -p tcp -m tcp --sport 80 -j ACCEPT
-A OUTPUT -d 103.21.244.0/22 -p tcp -m tcp --sport 443 -j ACCEPT
-A OUTPUT -d 103.22.200.0/22 -p tcp -m tcp --sport 443 -j ACCEPT
-A OUTPUT -d 103.31.4.0/22 -p tcp -m tcp --sport 443 -j ACCEPT
-A OUTPUT -d 104.16.0.0/12 -p tcp -m tcp --sport 443 -j ACCEPT
-A OUTPUT -d 108.162.192.0/18 -p tcp -m tcp --sport 443 -j ACCEPT
-A OUTPUT -d 131.0.72.0/22 -p tcp -m tcp --sport 443 -j ACCEPT
-A OUTPUT -d 141.101.64.0/18 -p tcp -m tcp --sport 443 -j ACCEPT
-A OUTPUT -d 162.158.0.0/15 -p tcp -m tcp --sport 443 -j ACCEPT
-A OUTPUT -d 172.64.0.0/13 -p tcp -m tcp --sport 443 -j ACCEPT
-A OUTPUT -d 173.245.48.0/20 -p tcp -m tcp --sport 443 -j ACCEPT
-A OUTPUT -d 188.114.96.0/20 -p tcp -m tcp --sport 443 -j ACCEPT
-A OUTPUT -d 190.93.240.0/20 -p tcp -m tcp --sport 443 -j ACCEPT
-A OUTPUT -d 197.234.240.0/22 -p tcp -m tcp --sport 443 -j ACCEPT
-A OUTPUT -d 198.41.128.0/17 -p tcp -m tcp --sport 443 -j ACCEPT
-A OUTPUT -d 199.27.128.0/21 -p tcp -m tcp --sport 443 -j ACCEPT
# 禁止一些敏感端口的出站
-A OUTPUT -p tcp -m tcp --sport 80 -j DROP
-A OUTPUT -p tcp -m tcp --sport 443 -j DROP
-A OUTPUT -p tcp -m tcp --sport 31337:31340 -j DROP
-A OUTPUT -p tcp -m tcp --sport 27444 -j DROP
-A OUTPUT -p tcp -m tcp --sport 27665 -j DROP
-A OUTPUT -p tcp -m tcp --sport 20034 -j DROP
-A OUTPUT -p tcp -m tcp --sport 9704 -j DROP
-A OUTPUT -p tcp -m tcp --sport 137:139 -j DROP
-A OUTPUT -p tcp -m tcp --sport 2049 -j DROP
# 允许上面规则设置端口之外的出战数据
-A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -j ACCEPT
COMMIT
# Completed on Mon Nov  7 14:43:49 2016

其实禁止不带参数访问 wp-login.phpxmlrpc.php 可以过滤掉大部分恶意请求。