博客

  • 使用 wp-fail2ban 提高 wordpress 站点安全性

    使用 wp-fail2ban 提高 wordpress 站点安全性

    wp-fail2ban 是 wordpress 上一款与 fail2ban 集成的,提高 wordpress 站点安全性的插件。

    安装:

    插件>安装新插件 中搜索“wp-fail2ban”,安装如上图所示插件并启用。

    安装完成后,ssh 连接到你博客的 vps 上。

    配置:

    参考插件的 配置文档 ,以使用 systemd 的 debian12 为例。

    确保你的 vps 上已经安装了 fail2ban。如果没有安装,可以参考我的这篇博文进行安装和配置。

    复制你的 网站根目录/wp-content/plugins/wp-fail2ban/filters.d/ 下的所有文件到 /etc/fail2ban/filters.d/ 目录下。

    sudo cp 网站根目录/wp-content/plugins/wp-fail2ban/filters.d/*.conf /etc/fail2ban/filter.d/

    修改你网站根目录下的 wp-config.php 文件,在末尾添加以下内容:

    // Make sure we're not using the short ("wp") tag
    define('WP_FAIL2BAN_SYSLOG_SHORT_TAG', false);
    
    // Don't include the HTTP host in the tag
    define('WP_FAIL2BAN_SYSLOG_TAG_HOST', false);
    
    /* That's all, stop editing! Happy blogging. */

    随后,保存退出。切换目录到 /etc/fail2ban/jail.d 。在该目录下新建一个名为 wordpress.conf 的配置文件,并添加以下内容:

    [wordpress-hard]
    enabled = true
    filter = wordpress-hard
    backend = systemd
    journalmatch = SYSLOG_IDENTIFIER=wordpress
    maxretry = 1
    port = http,https
    
    [wordpress-soft]
    enabled = true
    filter = wordpress-soft
    backend = systemd
    journalmatch = SYSLOG_IDENTIFIER=wordpress
    maxretry = 3
    port = http,https

    完成后,保存退出并重新加载 fail2ban 服务。

    sudo systemctl reload fail2ban

    使用命令

    systemctl status fail2ban

    查看 fail2ban 是否正常运行。使用命令

    sudo fail2ban-client status

    查看新配置是否已添加。成功添加后输出如下图:

    至此,wp-fail2ban 已经开始保护你的 wordpress 网站了。

  • debian 12 fail2ban的配置

    debian 12 fail2ban的配置

    fail2ban是一个服务器免受暴力攻击的入侵防御软件,基于auth 日志文件工作,更新防火墙规则,用于在指定的时间内拒绝特定的 IP 地址,从而有效保护服务器免受暴力攻击。

    fail2ban 的安装:

    debian12 上使用以下命令安装:

    sudo apt install fail2ban -y

    安装完成后,fail2ban会自动运行。

    fail2ban 的配置:

    如果遇到fail2ban安装完成后,使用命令

    systemctl status fail2ban

    查看fail2ban运行状态时显示失败,请参考我的这篇文章解决

    切换到目录 /etc/fail2ban ,复制 jail.conf 一份为 jail.local 或新建一份 jail.local 的配置文件,不要修改默认的 jail.conf 配置文件。

    以下是我的配置,以供参考:

    [DEFAULT]
    ignoreip = 127.0.0.1/8 ::1
    bantime = 1d
    findtime = 10m
    maxretry = 5
    
    [sshd]
    enable = true
    port=22
    bandtime=1d
    findtime=10m
    maxretry=5
    backend=systemd

    具体配置可在网络上搜索参考,完成后,使用命令:

    systemctl restart fail2ban

    重启 fail2ban 服务。

    使用

    sudo fail2ban-client status

    来查看服务状态。

  • 使用 apache 服务器 + cloudflare 配置 lx music同步服务器

    使用 apache 服务器 + cloudflare 配置 lx music同步服务器

    在 lx-music 同步服务器的官方文档中,提到了可以使用 ngnix 服务器来代理并使用 ssl 加密。不过笔者的 1h1g vps上使用的是 apache2 服务器,借助 deepseek 的力量,成功参照官方配置 ngnix 服务器的文档,使用 apache2 服务器实现代理并使用 ssl 加密。

    准备工作:

    debian 12 vps 一个,托管在 cloudflare 的域名一个,vps 已安装 apache2 服务器,若未安装,执行以下命令安装:

    sudo apt update && sudo apt install apache2 -y

    cloudflare 配置:

    进入你托管域名的仪表板,点击 dns 记录,点击添加记录,添加一条记录,类型选择 A,名称为 lx-music(可以按你的喜好替换),ipv4填你的 vps ipv4 地址,启用代理,最后保存。添加后如图所示:

    完成后,点击 ssl/tls,选择源服务器,若无证书,选择创建证书,保存对应的 key 和 pem,若已有证书,下载保存。

    将证书 key 和 pem 上传到 服务器的 /etc/ssl/you_domain(按需替换)目录下。若目录不存在,请先创建。完成后,如下图所示:

    最后,添加缓存绕过规则,避免出现问题。

    点击缓存,选择 Cache Rules,点击创建规则,如下图所示:

    完成后保存,至此,cloudflare 配置部分结束。

    apache2 服务器配置:

    使用以下命令启用必须的 apache2 服务器模块

    sudo a2enmod proxy proxy_http proxy_wstunnel headers rewrite

    在 /etc/apache2/sites-available/ 目录下,新建一个名称为 lx-music.you_domain.conf 的配置文件,名称与 cloudflare 上的 dns 记录保持一致。

    *注意⚠️:请将 lx-music.you_domain.conf 替换为你的域名!!!

    sudo vim lx-music.you_domain.conf

    向该配置文件,添加以下参考以下参考配置:

    *注意⚠️:要将对应的域名替换为你的域名!!!同时注意证书文件的路径!!!

    <IfModule mod_ssl.c>
        <VirtualHost *:443>
            ServerName lx-music.145914.xyz
    
            # SSL 配置
            SSLEngine On
            SSLCertificateFile /etc/ssl/145914.xyz/145914.xyz.crt
            SSLCertificateKeyFile /etc/ssl/145914.xyz/145914.xyz.key
            SSLCertificateChainFile /etc/ssl/145914.xyz/145914.xyz.crt
    
            # 反向代理配置
            ProxyRequests Off
            ProxyPreserveHost On
            ProxyPass / http://localhost:9527/
            ProxyPassReverse / http://localhost:9527/
    
            # 传递认证头
            RequestHeader set Authorization "expr=%{HTTP:Authorization}"
    
            # 设置请求头
            RequestHeader set Host "%{HTTP_HOST}e"
            RequestHeader set X-Real-IP "%{REMOTE_ADDR}e"
            RequestHeader set X-Forwarded-For "%{REMOTE_ADDR}e"
            RequestHeader set Upgrade "websocket" env=HTTP_UPGRADE
            RequestHeader set Connection "upgrade" env=HTTP_UPGRADE
    
            # WebSocket支持(强制升级连接)
            RewriteEngine On
            RewriteCond %{HTTP:Upgrade} =websocket [NC]
            RewriteRule /(.*) ws://127.0.0.1:9527/$1 [P,L]
    
            # 可选:设置超时和日志
            ProxyTimeout 300
            ErrorLog ${APACHE_LOG_DIR}/lx-music_error.log
            CustomLog ${APACHE_LOG_DIR}/lx-music_access.log combined
        </VirtualHost>
    </IfModule>

    完成后,启用域名并重启 apache2 服务器,检查配置文件语法:

    *注意⚠️:请将 lx-music.145914.xyz.conf 替换为你的域名!!!

    sudo a2ensite lx-music.145914.xyz.conf && sudo systemctl restart apache2 && sudo apache2ctl configtest

    检查 apache2 服务器,确保处于活跃状态:

    至此,apache2 服务器部分配置完成。

    下载并运行 lx-music sync 服务器:

    安装运行环境:

    sudo apt install nodejs -y

    安装完成后,使用

    node -v

    查看 nodejs 版本号。

    安装pm2

    sudo npm i -g pm2

    至此,完成所需运行环境的安装。

    下载 lx music 同步服务器:

    截至发文时,lx-music sync 服务器最新版本为 v2.1.2

    lx music sync 源码地址:

    https://github.com/lyswhut/lx-music-sync-server

    使用 wget 下载 最新的 lx-music sync 服务器

    wget https://github.com/lyswhut/lx-music-sync-server/archive/refs/tags/v2.1.2.tar.gz

    下载完成后,解压到当前目录:

    tar -xzvf v2.1.2.tar.gz

    解压完成后,进入服务器目录安装依赖:

    cd lx-music-sync-server-2.1.2 && npm ci --omit=dev

    完成后,编辑 config.js 文件进行配置:

    vim config.js

    取消所有选项的注释,设置name,password,修改 ‘proxy.enabled’ 为 true,其余选项保持默认。保存退出。

    启动服务器:

    npm run prd

    查看启动日志,若无错误则启动成功

    pm2 logs

    访问 https://lx-music.you_domain/hello,出现 Hello~::^-^::~v4~ 说明已经可以正常访问 lx music 同步服务器了。

    现在,一个有 ssl 加密的 lx music 同步服务器就搭建完成了。

  • debian 12 ufw 防火墙的安装和使用

    debian 12 ufw 防火墙的安装和使用

    在vps上,开启防火墙可以有效地提高服务器安全性,有效阻止来自黑客的攻击。

    UFW 或简单防火墙是一个用户友好的 iptables 前端,也是 Linux 上最好的防火墙之一。您可以轻松地在不同的 Linux 发行版(包括 Debian)上安装此防火墙管理工具。

    UFW 通过提供简化的界面和命令,简化了配置 iptables 的复杂过程。该防火墙使您能够定义处理网络流量的规则。这可确保仅允许授权连接,同时阻止潜在的安全风险。

    在 debian 12 上安装UFW:

    sudo apt update && sudo apt install ufw -y

    安装完成后,ufw并不会自动运行,运行:

    sudo ufw enable

    才能启用ufw防火墙。

    使用以下命令,查看ufw防火墙状态:

    sudo ufw status

    若防火墙处于活动状态,有类似以下输出:

    允许和阻止特定端口:

    要允许特定端口,可以使用以下命令:

    sudo ufw allow 端口号/协议

    例如,允许一个2222的ssh端口:

    sudo ufw allow 2222/tcp

    要禁止特定端口,可以使用以下命令:

    sudo deny 端口号/协议

    例如,阻止所有 TCP 端口,可以执行:

    sudo ufw deny 0.0.0.0/0 tcp

    允许或拒绝特定服务:

    允许或拒绝特定服务,可以使用以下命令:

    sudo ufw allow 服务名/协议  #允许
    sudo ufw deny 服务名/协议   #拒绝

    例如,允许https服务:

    sudo ufw allow https

    拒绝http服务:

    sudo ufw deny http

    允许特定 IP 地址访问:

    允许/拒绝特定 IP 地址访问,可以使用以下命令:

    sudo ufw allow from IP地址/掩码  #允许
    sudo ufw deny from IP地址/掩码   #拒绝

    生效规则:

    要使设置的ufw规则生效,只需重启ufw即可。

    sudo systemctl restart ufw.service

    查看ufw状态:

    显示 UFW 的状态及其活动规则:

    sudo ufw status verbose

    查看ufw默认允许的应用列表:

    sudo ufw app list

    许多常用应用ufw已默认允许。

    重置UFW规则:

    如果需要重置ufw规则为默认,请执行:

    sudo ufw reset

    卸载 UFW:

    如果需要卸载ufw,请执行:

    sudo apt purge ufw gufw -y
  • debian12上fail2ban启动失败解决办法

    debian12上fail2ban启动失败解决办法

    在 debian12 上安装完 fail2ban 后运行提示找不到 sshd 日志,原因是 fail2ban 默认 的 ssh 日志读取配置使用 rsyslog,debain12 已经默认使用 systemd 的 journalctl,有两种解决办法。

    方法一:安装 rsyslog 解决。

    sudo apt install rsyslog -y

    安装完成后 systemctl restart fail2ban 即可。

    方法二:修改 fail2ban 的 sshd 配置

    在 /etc/fail2ban 目录下,新建一个 jail.local 文件 :

    sudo vim jail.local

    可添加以下参考配置内容

    [DEFAULT]
    ignoreip = 127.0.0.1/8 ::1
    bantime = 1d
    findtime = 10m
    maxretry = 5
    
    [sshd]
    enable = true
    port=22
    bandtime=1d
    findtime=10m
    maxretry=5
    backend=systemd

    重点是添加 backend=systemd 项,告诉 fail2ban 使用 systemd 的日志后端。

    完成后重启 fail2ban 服务

    systemctl restart fail2ban

    查看 fail2ban 状态

  • vps上wordpress博客的搭建

    vps上wordpress博客的搭建

    记录Debian 12 vps 上 wordpress 博客的搭建过程。

    • 准备阶段

    一台安装 debian 12 的 vps,ssh 远程连接上 vps 服务器。使用

    sudo apt update && sudo apt upgrade -y

    更新系统至最新状态。以及一个托管在 Cloudflare 的域名。

    • 安装 apache 服务器、php8.2、mysql

    使用以下命令安装 apache 服务器 和 php8.2环境:

    sudo apt install apache2 php8.2 -y 

    mysql 安装:

    wget https://dev.mysql.com/get/mysql-apt-config_0.8.33-1_all.deb
    sudo apt install ./mysql-apt-config_0.8.33-1_all.deb 

    在TUI中选择安装 mysql 8.0 版本

    sudo apt install mysql-server

    在TUI中设置ROOT密码,安装完成。

    安装 wordpress 所需 php模块:

    sudo apt install php8.2-imagick php-curl php-gd php-soap php-mbstring php-zip php-xml php-intl php8.2-opcache php8.2-mysql -y
    • mysql 和 apache 服务器配置

    1、mysql的配置:
    使用命令

    mysql -u root -p

    输入设置的密码,登录mysql。输入以下命令以创建一个名为 wordpress 的新数据库:

    CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

    输入以下命令创建一个新的MySQL用户,这个示例创建了一个名为 wpuser 的用户,密码为 wppassword,你需要替换为你自己的用户名和密码,并牢记,后面WordPress搭建会用到。

    CREATE USER 'wpuser'@'%' IDENTIFIED WITH mysql_native_password BY 'wppassword'; 

    授权用户,输入以下命令授予用户对WordPress数据库的访问权限。

    GRANT ALL ON wordpress.* TO 'wpuser'@'%'; 

    刷新权限,输入以下命令刷新MySQL权限:

    FLUSH PRIVILEGES; 

    至此,完成了 wordpress 的 mysql 数据库部分的配置,输入

    EXIT;

    退出 mysql。

    2、apache服务器的配置

    使用以下命令创建配置文件:

    sudo vim /etc/apache2/sites-available/my_domain.conf

    请将“my_domain”替换为你的域名。
    配置文件内容参考如下:

    <VirtualHost *:443> 
       ServerName my_domain 
       ServerAlias www.my_domain    # SSL 配置 
       SSLEngine on 
       SSLCertificateFile /etc/ssl/my_domain/my_domain.crt 
       SSLCertificateKeyFile /etc/ssl/my_domain/my_domain.key 
       SSLCertificateChainFile /etc/ssl/my_domain/my_domain.crt 
       # 基础配置 
       ServerAdmin webmaster@localhost 
       DocumentRoot /var/www/wordpress 
       ErrorLog ${APACHE_LOG_DIR}/error.log 
       CustomLog ${APACHE_LOG_DIR}/access.log combined 
       # 目录权限  
       <Directory /var/www/wordpress/> 
           AllowOverride All 
           Require all granted 
       </Directory> 
       # ----------------------- 
       # 模块配置部分- 
       # ----------------------- 
       # 静态资源缓存(需已启用 expires_module 和 headers_module)  
       <IfModule mod_expires.c> 
           ExpiresActive On 
           ExpiresByType image/jpeg "access plus 1 year" 
           ExpiresByType text/css "access plus 1 month" 
           ExpiresByType application/javascript "access plus 1 month" 
       </IfModule> 
       <IfModule mod_headers.c> 
           <FilesMatch "\.(js|css|jpg|png|gif|svg|woff2)$"> 
               Header set Cache-Control "public, max-age=31536000" 
           </FilesMatch> 
       </IfModule> 
       # GZIP 压缩(需已启用 deflate_module)l 
       <IfModule mod_deflate.c> 
           AddOutputFilterByType DEFLATE text/html text/css application/javascript text/xml application/json 
       </IfModule> 
    </VirtualHost>

    *ssl 证书可在 cloudflare 里对应域名下的 SSL/TLS > 源服务器 中申请。
    保存退出,启用新网站:

    sudo a2ensite my_domain 

    最后,禁用默认网站,并重启Apache:

    sudo a2dissite 000-default && sudo a2enmod rewrite && sudo a2enmod rewrite && sudo apache2ctl configtest && sudo systemctl restart apache2 
      • 下载WordPress

      运行以下命令以下载并解压 WordPress 文件:

      cd ~ && wget https://wordpress.org/latest.tar.gz && tar -xzvf latest.tar.gz

      移动wordpress到/var/www/下并修改权限:

      mv wordpress /var/www/ && chown -R www-data:www-data /var/www/wordpress && chmod 750 -R /var/www/wordpress/
      • 完成安装

      访问你的域名,在wordpress安装程序引导下完成wordpress的安装。

    1. Archlinux 提升 makepkg 速度

      使用并行编译,在 /etc/makepkg.conf 中找到 MAKEFLAGS,设置为:

      MAKEFLAGS="-j4"

      数字应改为电脑 CPU 核心数(或线程数),如我的电脑cpu为6核12线程,对应的修改为:

      同时,还可以禁止debug包的生成来进一步提升速度:

      OPTIONS=(strip docs !libtool !staticlibs emptydirs zipman purge !debug lto)

      只需在 options 数组选项的 debug 前面添加 !

    2. GDB调试小技巧

      GDB(GNU Debugger)是调试 C/C++ 等程序的强大工具,掌握一些高效技巧能大幅提升调试效率。以下是一些实用技巧:

      一、基础调试命令

      1. 启动调试
        gdb ./program # 调试可执行文件
        gdb -p <pid> # 附加到正在运行的进程
      2. 设置断点
        break main # 在 main 函数设置断点
        break file.c:20 # 在 file.c 的第 20 行设置断点
        break func # 在函数 func 处设置断点
        info breakpoints # 查看所有断点
        delete <num> # 删除断点(num 为断点编号)
      3. 运行与控制
        run <args> # 启动程序并传入参数
        continue # 继续运行到下一个断点
        next (n) # 单步执行(不进入函数)
        step (s) # 单步执行(进入函数)
        finish # 执行完当前函数并返回

      二、查看变量与内存

      1. 打印变量
        print var # 打印变量值
        print *ptr@10 # 打印指针 ptr 指向的 10 个元素
        print/x var # 以十六进制格式打印变量
      2. 自动显示变量
        display var # 每次断点后自动显示变量值
        undisplay <num> # 取消自动显示
      3. 检查内存
        x/s addr # 检查 addr 处的字符串
        # 格式说明:x/[数量][格式][单位]
        # 单位:b(byte), h(half-word), w(word), g(giant word)

        # 以十六进制检查 addr 处的10个字(4字节)
        x/10xw addr

      三、高级调试技巧

      1. 条件断点
        break file.c:20 if i == 5 # 当 i=5 时触发断点
        condition <num> i > 10 # 修改已有断点的条件
      2. 观察点(Watchpoint)
        watch var # 当变量被修改时暂停
        rwatch var # 当变量被读取时暂停
        awatch var # 变量被读写时均暂停
      3. 捕获事件
        catch throw # 捕获 C++ 异常
        catch syscall open # 捕获系统调用(如 open)
      4. 修改运行时的值
        set variable i = 10 # 修改变量 i 的值
        call func() # 强制调用函数
        return 0 # 强制从当前函数返回

      四、堆栈与多线程

      1. 查看堆栈
        backtrace (bt) # 显示调用堆栈
        frame <num> # 切换到指定堆栈帧
        info locals # 查看当前栈帧的局部变量
      2. 多线程调试
        info threads # 查看所有线程
        thread <num> # 切换到指定线程
        break func thread 2 # 在线程 2 的 func 处设置断点

      五、信号处理

      handle SIGSEGV nostop   # 收到 SIGSEGV 时不暂停
      handle SIGINT print # 打印 SIGINT 信号信息

      六、其他实用功能

      1. TUI 模式
        gdb -tui ./program # 启动文本界面(显示代码窗口)
        Ctrl+X+A # 在普通模式和 TUI 模式间切换
      2. 记录执行过程
        record # 开始记录执行过程(反向调试)
        reverse-step # 反向执行(需先执行 record)
      3. 调试崩溃后的 core 文件
        gdb ./program core # 分析崩溃的 core dump 文件

      七、调试脚本

      将常用命令写入 .gdbinit 文件,或通过 source 命令加载脚本:

      gdb -x script.gdb ./program  # 执行 script.gdb 中的命令

      八、常见问题解决

      • 编译时添加调试信息:确保编译时加上 -g 选项(如 gcc -g -o program program.c)。
      • 找不到源码:使用 directory /path/to/source 指定源码路径。
      • 查看寄存器info registersprint $rax
    3. flatpak wine的安装和使用

      1、安装flatpak

      debian系:

      sudo apt install flatpak

      arch系:

      sudo pacman -Syu flatpak

      2、flatpak换源

      sudo flatpak remote-modify flathub --url=https://mirror.sjtu.edu.cn/flathub

      参考https://mirror.sjtu.edu.cn/docs/flathub

      3、安装flatpak版wine

      flatpak install org.winehq.Wine

      按提示选择,回车确定。

      4、运行winetricks

      运行命令:

      flatpak run --command=bash org.winehq.Wine

      在 Wine 环境中启动一个 Bash shell,允许你直接与 Wine 环境交互。运行:

      winetricks

      使用图形界面交互,使用exit命令退出。

    4. 世界,您好!

      欢迎使用 WordPress。这是您的第一篇文章。编辑或删除它,然后开始写作吧!