分类 Internet 下的文章

Centos 7 启动 Fail2ban 故障解决

fail2ban.jpg

网站运营以来一直没注重安全这方面的问题,趁着空闲登录后台看了看 Nginx 日志文件,才发现有大量的 ip 扫描服务器端口以及网站的 php 文件和大量的 ChallengeCollapsar 请求,为了避免这些,直接利用 Fail2ban + Firewalld 来防御简单的攻击请求。

当然了,这种简单的防御机制并不能防御复杂的分布式暴力攻击,这些攻击者通过使用成千上万个机器控制的 ip 地址来绕过 Fail2ban 的防御机制...遇到这种攻击直接上高防或者关机,无解。

安装完毕之后,启动 Fail2ban 时提示以下故障代码:

Job for fail2ban.service failed because the control process exited with error code. See "systemctl status fail2ban.service" and "journalctl -xe" for details.

在修改 jail.conf 配置文件的时候,我没有选择追加配置而是直接覆盖了原本的配置文件,在启动的时候触发了错误机制,搜索的时候发现有很多网友都遇到了这个问题,之后在这篇文章中找到了解决方法:Fail2ban 防止暴力破解 Centos 服务器的 SSH 或者 FTP 账户

重点:“[INCLUDES]”以前的不要动(都是注释),否则 Fail2ban 服务就无法启动。可以用命令来检查语法错误。

fail2ban-client -v -v start

我的方法是直接在原配置文件中追加配置,然后启动成功。

等待几日就可以用命令查看有哪些 ip 被屏蔽啦。

LNMP1.5 安装 ngx_cache_purge 缓存清除组件

LNMP安装ngx_cache_purge缓存清除组件步骤如下:

一、检查是否已安装 ngx_cache_purge

nginx -V 2>&1 | grep -o ngx_cache_purg

如果显示 ngx_cache_purge 则已安装。

二、编译安装 ngx_cache_purge 步骤

1、进入LNMP的源码目录

cd /root/lnmp1.5/src

2、下载最新版 ngx_cache_purge

wget http://labs.frickle.com/files/ngx_cache_purge-2.3.tar.gz

3、解压 NGINX 和 ngx_cache_purge

tar xzf nginx-1.14.0.tar.gz
tar xzf ngx_cache_purge-2.3.tar.gz

4、进入 nginx 目录

cd nginx-1.14.0

5、查看现有 nginx 配置参数

nginx -V

6、在现有的编译参数后面加上–add-module=/root/lnmp1.5/src/ngx_cache_purge-2.3

./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_v2_module --with-http_gzip_static_module --with-http_sub_module --with-stream --with-stream_ssl_module --with-openssl=/root/lnmp1.5/src/openssl-1.0.2o --add-module=/root/lnmp1.5/src/ngx_cache_purge-2.3

如您的编译参数不同,请自行对照修改。

7、开始编译

make

8、备份原来的 Nginx 编译文件

mv /usr/local/nginx/sbin/nginx{,_`date +%F`}

9、拷贝新的编译文件过去

cp objs/nginx /usr/local/nginx/sbin/nginx

10、检查配置

/usr/local/nginx/sbin/nginx -t

11、完成升级

make upgrade

12、检查是否安装成功

nginx -V 2>&1 | grep -o ngx_cache_purge

出现 ngx_cache_purge ,表示已经成功在 LNMP1.5 环境下添加了 ngx_cache_purge 组件。

Nginx 自建 CDN 反代加速节点

cdn-graph.jpg

CDN:CDN 的全称是 Content Delivery Network,即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。其目的是使用户可就近取得所需内容,解决 Internet 网络拥挤的状况,提高用户访问网站的响应速度。

安装 Nginx

需要在所有 CDN 服务器节点安装 Nginx,推荐使用 OneinStack 或军哥的 lnmp.org 一键包,如何安装 Nginx 自行参考脚本官网就行了。

反向代理配置

反向代理通俗点你把它理解成 CDN 节点就行了,这里用一台服务器作为解释,

源站:192.168.1.100

CDN:192.168.1.101

假如我需要对 inwao.com 搭建 CDN 节点,数据放在 192.168.1.100,需要先修改 hosts 指向,告知 CDN 节点从那里去获取网站数据,也就是回源地址,需要在 CDN 做如下修改:

vi /etc/hosts
192.168.1.100   inwao.com

在 CDN 下创建 nginx 配置文件 inwao.com.conf

#创建缓存目录
mkdir -p /usr/local/nginx/caches/inwao.com
#设置缓存目录权限
chown -R www:www /usr/local/nginx/caches/inwao.com
#创建inwao.com.conf
vi /usr/local/nginx/conf/vhost/inwao.com.conf

在 inwao.com.conf 中添加下面的内容,缓存目录/缓存时间请根据实际情况调整,后面会详细说明各参数含义。

proxy_cache_path /usr/local/nginx/caches/inwao.com levels=1:2 keys_zone=xiaoz:50m inactive=30m max_size=50m;
server {
    listen 80;
    server_name inwao.com;
    charset utf-8,gbk;
        location / {
        proxy_set_header Accept-Encoding "";
           proxy_pass https://inwao.com;
           proxy_redirect off;
           proxy_set_header X-Real-IP $remote_addr;
           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
           proxy_cache xiaoz;
           proxy_cache_valid  200 304  30m;
           proxy_cache_valid  301 24h;
           proxy_cache_valid  500 502 503 504 0s;
           proxy_cache_valid any 1s;
           proxy_cache_min_uses 1;
           expires 12h;
    }
}
  • /usr/local/nginx/caches/inwao.com:为缓存目录。
  • levels:指定该缓存空间有两层 hash 目录,第一层目录为 1 个字母,第二层为 2 个字母。
  • keys_zone=inwao:50m:为缓存空间起个名字,这里取名为“inwao”,后面的 50m 指内存缓存空间。
  • inactive=30m:如果 30 分钟内该资源没有被访问则删除。
  • max_size=50m:指硬盘缓存大小为 50MB.
  • proxy_cache_valid:指定状态码缓存时间,前面写状态码,后面写缓存时间。

重载 nginx 命令:

/etc/init.d/nginx restart

以上是 Http 站点的 Nginx 反代设置,如果你是想反代 Https 站点,参考如下配置进行调整即可:

https CDN 配置:

proxy_cache_path /usr/local/nginx/caches/inwao.com levels=1:2 keys_zone=inwao:50m inactive=30m max_size=50m;
server {
    listen 443 ssl http2;
    ssl_certificate /usr/local/nginx/conf/ssl/inwao.com/fullchain.cer;
    ssl_certificate_key /usr/local/nginx/conf/ssl/inwao.com/inwao.com.key;
    ssl_session_timeout 1d;
    ssl_session_cache builtin:1000 shared:SSL:10m;
    ssl_dhparam /usr/local/nginx/conf/ssl/dhparam.pem;
    add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
    ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
    ssl_ciphers "TLS-CHACHA20-POLY1305-SHA256:TLS-AES-256-GCM-SHA384:TLS-AES-128-GCM-SHA256:EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+ECDSA+AES128:EECDH+aRSA+AES128:RSA+AES128:EECDH+ECDSA+AES256:EECDH+aRSA+AES256:RSA+AES256:EECDH+ECDSA+3DES:EECDH+aRSA+3DES:RSA+3DES:!MD5";

    ssl_prefer_server_ciphers on;

    ssl_stapling on;
    ssl_stapling_verify on;

    server_name inwao.com;
    access_log /usr/local/nginx/caches/inwao.com_nginx.log combined;

    charset utf-8,gbk;
        location / {
        proxy_set_header Accept-Encoding "";
           proxy_pass https://inwao.com;
           proxy_redirect off;
           proxy_set_header X-Real-IP $remote_addr;
           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
           proxy_cache inwao;
           proxy_cache_valid  200 304  30m;
           proxy_cache_valid  301 24h;
           proxy_cache_valid  500 502 503 504 0s;
           proxy_cache_valid any 1s;
           proxy_cache_min_uses 1;
           expires 12h;
    }
}

清理 Nginx 缓存需要 ngx_cache_purge 模块帮助,可输入命令nginx -V查看已经编译的模块,如果没有 ngx_cache_purge 说明模块没有安装,则需要重新编译一下 Nginx。

ngx_cache_purge 编译教程:LNMP1.5 安装 ngx_cache_purge 缓存清除组件

在 nginx.conf 的 server 段内加入下面的配置,并重载 Nginx,下面的 inwao 请与 keys_zone 定义的值保持一致,否则 nginx 将无法启动。

location ~ /purge(/.*) {
allow all;
proxy_cache_purge inwao $proxy_host$1$is_args$args;
error_page 405 =200 /purge$1;
}

如果想清理缓存,添加 dcache 参数即可,如 https://inwao.com/dcache/xxx.png 如果一直出现 404 错误,请检查配置。

对于 typecho 博客,如果启用 CDN 后页面被缓存,用户提交评论后无法马上显示出来,可以使用 Ajax 异步请求 ngx_cache_purge 接口,当用户提交评论的时候则清除该页面缓存。只需要下面的这段 js 添加到 footer.php 即可。

<script>
        $(document).ready(function(){
            $("#submit").click(function(){
                var uri = "https://inwao.com/purge" + window.location.pathname;
                $.get(uri,function(data,status){
                    return true;
                });
            });
        });
</script>

以下是 CDN 完整配置,仅供参考,你需要替换好 Keys_zone、SSL 路径、域名等:

proxy_cache_path /usr/local/nginx/caches/inwao.com levels=1:2 keys_zone=inwao:100m inactive=30m max_size=100m;
server
    {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    ssl on;
    ssl_certificate /usr/local/nginx/conf/ssl/inwao.com/fullchain.cer;
    ssl_certificate_key /usr/local/nginx/conf/ssl/inwao.com/inwao.com.key;
    ssl_session_timeout 1d;
    ssl_session_cache shared:SSL:50m;
    ssl_session_tickets off;
    ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
    ssl_ciphers "TLS-CHACHA20-POLY1305-SHA256:TLS-AES-256-GCM-SHA384:TLS-AES-128-GCM-SHA256:EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+ECDSA+AES128:EECDH+aRSA+AES128:RSA+AES128:EECDH+ECDSA+AES256:EECDH+aRSA+AES256:RSA+AES256:EECDH+ECDSA+3DES:EECDH+aRSA+3DES:RSA+3DES:!MD5";
    # openssl dhparam -out /usr/local/nginx/conf/ssl/dhparam.pem 2048
    ssl_dhparam /usr/local/nginx/conf/ssl/dhparam.pem;
    add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";

    ssl_prefer_server_ciphers on;
    ssl_stapling on;
    ssl_stapling_verify on;

    server_name     inwao.com;
    charset utf-8,gbk;

   #删除缓存
    location ~ /dcache(/.*) {
    allow all;
    proxy_cache_purge inwao $proxy_host$1$is_args$args;
    error_page 405 =200 /purge$1;
    }

       location / {
       #proxy_set_header Accept-Encoding "";
       proxy_pass https://inwao.com;
       proxy_redirect off;
       proxy_set_header X-Real-IP $remote_addr;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       proxy_cache inwao;
       proxy_cache_valid  200 304  30m;
       proxy_cache_valid  301 24h;
       proxy_cache_valid  500 502 503 504 0s;
       proxy_cache_valid any 1s;
       #达到第几次被缓存?
       proxy_cache_min_uses 1;
       expires 12h;
       proxy_cache_key    $uri$is_args$args;
    }
}
server
{
    listen 80;
    server_name inwao.com;
    rewrite ^(.*) https://inwao.com$1 permanent;
}

启用 CDN 后无法获取真实 IP

如果是 typecho 用户,当你启用了 Nginx CDN 加速后,你会发现后台获取到的用户评论 IP 都变成了 CDN 节点的,解决这个问题也很简单,在 typecho 的根目录的 config.inc.php 插入以下代码即可。

if (isset($_SERVER['HTTP_X_REAL_IP'])) {
$_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_X_REAL_IP'];
}

本站已开启 hong kong CDN 加速节点,已实现全站资源自动更新缓存,在开启 CDN 加速的情况下评论会及时异步请求显示,评论信息获取真实 IP.

Centos 7 卸载阿里云盾监控以及 firewall 屏蔽云盾 IP

阿里云 VPS 系统都自带了云盾监控程序,实质上是用来监控VPS是否安全,自动扫描进程、查杀病毒用的,会识别SS(R)进程。

想要安装 SS 服务必须要卸载云盾监控(不用重装),或者直接利用脚本一键重装您需要的纯净系统。

卸载阿里云盾监控

wget http://update.aegis.aliyun.com/download/uninstall.sh

chmod +x uninstall.sh

./uninstall.sh
wget http://update.aegis.aliyun.com/download/quartz_uninstall.sh

chmod +x quartz_uninstall.sh

./quartz_uninstall.sh

删除残留

pkill aliyun-service

rm -fr /etc/init.d/agentwatch /usr/sbin/aliyun-service

rm -rf /usr/local/aegis*

屏蔽云盾 IP

firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='140.205.201.0/28' reject"

firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='140.205.201.16/29' reject"

firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='140.205.201.32/28' reject"

firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='140.205.225.192/29' reject"

firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='140.205.225.200/30' reject"

firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='140.205.225.184/29' reject"

firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='140.205.225.183/32' reject"

firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='140.205.225.206/32' reject"

firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='140.205.225.205/32' reject"

firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='140.205.225.195/32' reject"

firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='140.205.225.204/32' reject"

firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='106.11.222.0/23' reject"

firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='106.11.224.0/24' reject"

firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='106.11.228.0/22' reject"

firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='140.205.201.0/24' reject"

firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='140.205.225.0/24' reject"

然后,就让我们一起畅游世界!

「全自动」LNMP1.5 无需升级至 1.6 快速开启 TLS1.3

最近在看一些 TLS 协议 1.3 版本的相关知识,为了用上更安全的传输协议...编译了不下于五次 nginx 和 openssl,网站也跟着崩溃,此教程主要说下如何在 lnmp1.5 上快速部署一个支持 TLS 1.3 协议版本的网站。

2008 年发布的 TLS1.2 传输协议至今也有十年的历史了,2018年下旬推出了速度更快更安全的 TLS1.3 传输协议,Chrome 70、Firefox 64 后续版本都率先支持基于 openssl 1.1.1 的 TLS1.3 传输协议,也是时候抛弃历史迎接新的未来!

TLS 1.3 相对于之前的版本,主要有两大优势:

Enhanced security: 安全性增强

Improved speed:速度提升

Nginx 底层使用的密码库是 OpenSSL,也就是说是否支持 TLS 1.3 版本,取决于 OpenSSL 库。

目前 Nginx 1.13 以上的版本支持 TLS 1.3 版本,而 OpenSSL 1.1.1 版本支持 TLS 1.3 版本。

本教程基于 lnmp1.5 一键包环境,系统为 centos 7.0 其它环境自测。

开始之前先备份当前生产环境,以备崩溃恢复之需。

开启方法:

利用 SSH 工具连接 VPS,输入以下命令下载 lnmp1.6 测试版;

wget http://soft.vpser.net/lnmp/lnmp1.6beta.tar.gz -cO lnmp1.6beta.tar.gz && tar zxf lnmp1.6beta.tar.gz && cd lnmp1.6

下载完之后会自动进入 lnmp1.6 文件夹,此刻请勿执行./install.sh lnmp

lnmp1.6 一键包已经正式支持 TLS1.3,所以直接利用 lnmp1.6里的升级脚本直接为 lnmp1.5 nginx 以及 openssl 进行升级即可。

接着用 lnmp1.6 文件夹里自带的升级脚本来升级 nginx;

./upgrade.sh nginx

输入您需升级的版本号,目前 nginx 官网最新版本为 1.15.9

nginx 版本号查询地址:https://nginx.org/en/download.html

之后会自动升级至你设置的 nginx 版本号以及 TLS1.3 所需要的 openssl 1.1.1 正式版。

20190302220309.png

本网站已自动升级 nginx 1.14.0 openssl 已升级至1.1.1a,TLS1.3 所需要的模块--with-openssl=/root/lnmp1.6/src/openssl-1.1.1a --with-openssl-opt='enable-weak-ssl-ciphers'已自动编译。

conf 加入以下配置;

ssl_protocols  TLSv1.1 TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers "TLS-CHACHA20-POLY1305-SHA256:TLS-AES-256-GCM-SHA384:TLS-AES-128-GCM-SHA256:EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+ECDSA+AES128:EECDH+aRSA+AES128:RSA+AES128:EECDH+ECDSA+AES256:EECDH+aRSA+AES256:RSA+AES256:EECDH+ECDSA+3DES:EECDH+aRSA+3DES:RSA+3DES:!MD5";

注:如果您服务器上建立了多个站点(二级域名),需将全部站点 conf 配置文件里都加入以上配置才能生效。

之后重启 nginx 服务,用 chrome 或者 Firefox 通过审查元素查看证书相关信息即可看到网站已开启 TLS1.3 传输协议。

20190302221241.png

全自动编译,无需手动输入编译模块以及修改某些信息,适合不想在生产环境升级至 lnmp1.6 又想使用 TLS1.3 协议,比网络上的教程更加安全高效,更加适合小白党。