logo NodeSeekbeta

装完系统第一步你们都做什么,分享一下我的 checklist

每次拿到新鸡装完系统都要从头配一遍,索性整理了个 checklist:

  1. 改 ssh 端口、禁密码登录、只留密钥
  2. 装 fail2ban,把自己常用 IP 加白名单
  3. 开 BBR,看情况调一下内核参数
  4. 装探针 agent,看下线路和延迟
  5. 加 swap,小内存的鸡不加容易 OOM
  6. 设时区和 NTP,不然日志时间对不上
  7. 最后打个干净快照

佬们还有哪些是必做的?感觉每次都会漏一两项。

12
  • 我的全过程,在考虑要不要让AI优化下,网上收集整合的

    更新软件包和系统并清理"孤儿包"

    # Debian/Ubuntu 系统(apt)
    apt update && apt upgrade -y && apt dist-upgrade -y && apt full-upgrade -y && apt autoremove -y
    # CentOS/RHEL 8+(dnf)
    sudo dnf check-update && sudo dnf upgrade -y && sudo dnf distro-sync -y && sudo dnf autoremove -y
    # CentOS/RHEL 7及之前(yum)
    sudo yum check-update && sudo yum update -y && sudo yum upgrade -y && sudo yum autoremove -y
    # Fedora(dnf) 
    sudo dnf check-update && sudo dnf upgrade -y && sudo dnf autoremove -y
    # Arch Linux(pacman) 
    sudo pacman -Sy && sudo pacman -Syu --noconfirm && sudo pacman -Rns $(pacman -Qdtq) --noconfirm
    

    系统参数优化

    • 内核参数调整:例如,增加 TCP 缓冲区大小、修改系统队列长度等,这些改变有助于提高网络吞吐量和减少延迟。
    • 性能优化:安装和配置 Tuned 和其他系统性能优化工具来自动调整和优化服务器的运行状态。
    • 资源限制:例如,设置文件打开数量的限制,这可以防止某些类型的资源耗尽攻击。
    #
    bash <(wget -qO- https://raw.githubusercontent.com/jerry048/Tune/main/tune.sh) -t
    

    网络加速

    # bbr 加速
    # 法1
    echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
    echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf
    sysctl -p
    sysctl net.ipv4.tcp_available_congestion_control
    lsmod | grep bbr
    # TCP加速 一键安装管理脚本 94ish.me
    wget -N --no-check-certificate "https://raw.githubusercontent.com/chiakge/Linux-NetSpeed/master/tcp.sh" && chmod +x tcp.sh && ./tcp.sh
    # TCP加速 一键安装管理脚本  推荐
    wget -O tcpx.sh "https://github.com/ylx2016/Linux-NetSpeed/raw/master/tcpx.sh" && chmod +x tcpx.sh && ./tcpx.sh
    # 法4
    bash <(wget -qO- https://raw.githubusercontent.com/jerry048/Tune/main/tune.sh) -x
    sudo reboot
    lsmod | grep bbr
    # 法5
    wget --no-check-certificate https://github.com/teddysun/across/raw/master/bbr.sh && chmod +x bbr.sh && ./bbr.sh
    

    安装swap

    bash <(wget -qO- https://fool.im/swap.sh)
    

    修改时区

    apt install -y locales
    echo "Asia/Shanghai" > /etc/timezone && \
        dpkg-reconfigure -f noninteractive tzdata && \
        sed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen && \
        echo 'LANG="en_US.UTF-8"'>/etc/default/locale && \
        dpkg-reconfigure --frontend=noninteractive locales && \
        update-locale LANG=en_US.UTF-8
    
    echo "Asia/Shanghai" > /etc/timezone
    #方法2
    apt install sudo curl wget nano -y
    sudo timedatectl set-timezone Asia/Shanghai
    timedatectl
    
    

    修改日志最大容量

    # 修改日志最大容量
    echo "SystemMaxUse=512M" >> /etc/systemd/journald.conf
    echo "SystemMaxFileSize=32M" >> /etc/systemd/journald.conf
    echo "RuntimeMaxUse=32M" >> /etc/systemd/journald.conf
    echo "RuntimeMaxFileSize=4M" >> /etc/systemd/journald.conf
    systemctl restart systemd-journald.service
    

    SSH

    # SSH
    sed -i 's/^Port.*$/Port 2233/' /etc/ssh/sshd_config
    # 设置如果用户不能成功登录,在切断连接之前服务器需要等待的时间(以秒为单位)。
    sed -i 's/^#LoginGraceTime.*$/LoginGraceTime 30/' /etc/ssh/sshd_config
    # 最大尝试次数
    sed -i 's/^#MaxAuthTries.*$/MaxAuthTries 3/' /etc/ssh/sshd_config
    # 开启 RSA
    sed -i 's/^#RSAAuthentication.*$/RSAAuthentication yes/' /etc/ssh/sshd_config
    # 是否使用公钥验证
    sed -i 's/^#PubkeyAuthentication/PubkeyAuthentication/' /etc/ssh/sshd_config
    sed -i 's/^#AuthorizedKeysFile/AuthorizedKeysFile/' /etc/ssh/sshd_config
    # 超时
    sed -i 's/^#TCPKeepAlive/TCPKeepAlive/' /etc/ssh/sshd_config
    sed -i 's/^#ClientAliveInterval.*$/ClientAliveInterval 600/' /etc/ssh/sshd_config
    sed -i 's/^#ClientAliveCountMax.*$/ClientAliveCountMax 3/' /etc/ssh/sshd_config
    

    防止爆破Fail2ban

    安装Fail2ban

    apt install fail2ban rsyslog python3-systemd
    

    配置Fail2Ban

    fail2ban 的配置文件通常位于 /etc/fail2ban/ 目录下,fail2ban 的.conf 配置文件都是可以被.local 覆盖,所以配置方式建议是添加.local 文件,不修改原来的配置文件
    
    nano /etc/fail2ban/jail.local
    
    配置文件如下
    
    [DEFAULT]
    #忽略的IP列表,不受设置限制(白名单)
    ignoreip = 127.0.0.1/8
    
    #允许ipv6
    allowipv6 = auto
    
    #日志修改检测机制(gamin、polling和auto这三种)
    backend = systemd
    
    #针对各服务的检查配置,如设置bantime、findtime、maxretry和全局冲突,服务优先级大于全局设置
    
    [sshd]
    #是否激活此项(true/false)
    enabled = true
    #过滤规则filter的名字,对应filter.d目录下的sshd.conf
    filter = sshd
    #ssh端口
    port = ssh
    #动作的相关参数
    action = iptables[name=SSH, port=ssh, protocol=tcp]
    #检测的系统的登陆日志文件
    #debian:logpath = /var/log/auth.log
    #centos:logpath = /var/log/secure
    logpath = /var/log/auth.log
    #屏蔽时间,单位:秒
    #配置 IP 封禁的持续时间(years/months/weeks/days/hours/minutes/seconds)
    bantime = 1w
    #是否开启增量禁止,可选
    bantime.increment = true
    #如果上面为false则不生效,增量禁止的指数因子,这里设置为168的意思就是每次增加 168*(2^ban次数) (封禁时长类似这样 - 1小时 -> 7天 -> 14天 ...):
    bantime.factor = 2
    #最大封禁时间,8w 表示8周,可选
    bantime.maxtime = 8w
    #配置计算封禁 IP 的具体滑动窗口大小
    #这个时间段内超过规定次数会被ban掉
    findtime = 5m
    
    #最大尝试次数
    maxretry = 3
    
    #禁止 Nginx 目录扫描的规则
    [nginx-dir-scan]
    #启用该规则
    enabled = true
    #使用 nginx-dir-scan 过滤器来检测恶意扫描行为
    filter = nginx-dir-scan
    #通过 iptables 阻止恶意 IP 地址访问端口 443(HTTPS)
    action = iptables[name=nginx-dir-scan, port="http,https", protocol=tcp]
    #指定 Nginx 访问日志的路径,注意替换为实际路径
    logpath = /www/wwwlogs/*access.log
    #如果同一 IP 地址在 findtime 时间窗口内扫描超过 1 次,则触发封禁
    maxretry = 1
    #封禁 IP 9 天(单位:秒,1天=86400秒)
    bantime = 9d
    #查找恶意扫描行为的时间窗口为 5 分钟(300秒)
    findtime = 5m
    
    #防御 Nginx CC 攻击的规则
    [nginx-cc]
    #启用该规则
    enabled = true
    #监控 HTTP(端口 80)和 HTTPS(端口 443)端口
    port = http,https
    #使用 nginx-cc 过滤器来检测可能的 CC 攻击
    filter = nginx-cc
    #执行 Fail2ban 默认动作,包含邮件通知
    action = %(action_mwl)s
    #如果同一 IP 在 60 秒内请求超过 20 次,则触发封禁
    maxretry = 20
    #设置请求计数的时间窗口为 60 秒
    findtime = 60
    #封禁 IP 9 天(单位:秒,1天=86400秒)
    bantime = 9d
    #指定 Nginx 访问日志路径,注意替换为实际路径
    logpath = /www/wwwlogs/*access.log
    
    #检测HTTP身份验证失败的尝试
    #Nginx配置文件http{内添加 limit_req_zone \$binary_remote_addr zone=example_zone:10m rate=1r/s; }
    [nginx-http-auth]
    enabled = true
    filter = nginx-http-auth
    mode = fallback
    port = http,https
    logpath = /www/wwwlogs/*error.log
    #新加
    maxretry = 3
    bantime = 3600
    action = iptables[name=nginx-limit-req, port="http,https", protocol=tcp]
    
    
    #检测NGINX的请求限制
    [nginx-limit-req]
    enabled = true
    filter = nginx-limit-req
    port = http,https
    logpath = /www/wwwlogs/*access.log
    #新加
    action = iptables[name=nginx-limit-req, port="http,https", protocol=tcp]
    maxretry = 5
    bantime = 3600
    
    #检测潜在的恶意机器人搜索
    [nginx-botsearch]
    enabled = true
    filter = nginx-botsearch
    port = http,https
    logpath = /www/wwwlogs/*access.log
    #新加
    action = iptables[name=nginx-botsearch, port="http,https", protocol=tcp]
    maxretry = 5
    bantime = 3600
    
    #检测Nginx错误请求
    [nginx-bad-request]
    enabled = true
    filter = nginx-bad-request
    port = http,https
    logpath = /www/wwwlogs/*access.log
    action = iptables[name=nginx-bad-request, port="http,https", protocol=tcp]
    maxretry = 5
    bantime = 3600
    
    #检测PHP中的URL打开尝试
    [php-url-fopen]
    enabled = true
    filter = php-url-fopen
    port = http,https
    logpath = /www/wwwlogs/*access.log
    action = iptables[name=php-url-fopen, port="http,https", protocol=tcp]
    maxretry = 5
    bantime = 3600
    

    可选配置

    # 防御 FTP 暴力破解攻击的规则 - 仅发出警告
    [vsftpd-notification]
    # 启用该规则
    enabled = true
    # 使用 vsftpd 过滤器来检测暴力破解攻击
    filter = vsftpd
    # 发送警告邮件,并附带 WHOIS 信息
    action = sendmail-whois[name=VSFTPD, [email protected]]
    # 指定 FTP 服务的日志路径
    logpath = /var/log/vsftpd.log
    # 如果同一 IP 在 findtime 时间窗口内尝试登录超过 5 次,则触发警告
    maxretry = 5
    # 封禁 IP 9 天(单位:秒,1天=86400秒)
    bantime = 9d
    
    # 防御 FTP 暴力破解攻击的规则 - 封禁恶意 IP
    [vsftpd-iptables]
    # 启用该规则
    enabled = true
    # 使用 vsftpd 过滤器来检测暴力破解攻击
    filter = vsftpd
    # 通过 iptables 阻止攻击者的 IP 访问 FTP 端口(21)
    action = iptables[name=VSFTPD, port=ftp, protocol=tcp]
    # 发送警告邮件,并附带 WHOIS 信息
    sendmail-whois[name=VSFTPD, [email protected]]
    # 指定 FTP 服务的日志路径
    logpath = /var/log/vsftpd.log
    # 如果同一 IP 在 findtime 时间窗口内尝试登录超过 5 次,则触发封禁
    maxretry = 5
    # 封禁 IP 9 天(单位:秒,1天=86400秒)
    bantime = 9d
    

    过滤器

    nginx-cc
    nano /etc/fail2ban/filter.d/nginx-cc.conf
    
    #填写如下内容
    [Definition]
    failregex = <HOST> -.*- .*HTTP/1.* .* .*$
    ignoreregex =
    
    nginx-dir-scan
    nano /etc/fail2ban/filter.d/nginx-dir-scan.conf
    
    [Definition]
    failregex = <HOST> -.*- .*Mozilla/4.0* .* .*$
    ignoreregex =
    

    常用命令

    # 设置开机自动启动 fail2ban
    sudo systemctl enable fail2ban
    
    # 重新启动 fail2ban
    sudo systemctl restart fail2ban
    
    # 停止 fail2ban 的状态
    sudo systemctl stop fail2ban
    
    # 查看 fail2ban 的状态
    sudo systemctl status fail2ban
    
    # 查看所有可用 jail 的状态
    fail2ban-client status
    
    # 验证配置是否生效
    tail -f /var/log/auth.log
    fail2ban-client status sshd
    
    # 解封所有IP
    fail2ban-client unban --all
    
    # 解封指定IP
    # fail2ban-client unban <IP> ... <IP>
    fail2ban-client unban 1.1.1.1
    
    #删除特定服务的(如sshd)被ban IP
    fail2ban-client set sshd delignoreip 1.1.1.1
    
    # 完全卸载fail2ban
    sudo apt remove fail2ban && apt purge fail2ban && apt autoremove
    rm /etc/fail2ban/ -rf
    
    # 显示配置以及错误
    sudo fail2ban-client -d
    

    删除多余日志

    #fail2ban日志 开机自删+定时删日志
    logdelete="./fail2banlogdelete.sh"
    cat>"${logdelete}"<<EOF
    #!/bin/bash
    find /path/to/nginx/ -mtime +15 -name "*.log" | xargs -i mv {} /root/RecycleBin/;
    find /usr/local/nginx/logs/ -mtime +15 -name "*.log" | xargs -i mv {} /root/RecycleBin/;
    find /var/log/ -mtime +15 -name "*.log" | xargs -i mv {} /root/RecycleBin/;
    find /root/RecycleBin/ -name "*.log" -exec rm -rf {} \;
    EOF
    cp ./fail2banlogdelete.sh /etc/init.d/
    #读挡并赋予权限
    chmod +777 /etc/init.d/fail2banlogdelete.sh
    update-rc.d ./fail2banlogdelete.sh defaults 90
    cd
    (echo "0 0 */15 * * bash /etc/init.d/fail2banlogdelete.sh >>/dev/null 2>&1" ; crontab -l )| crontab
    cd
    

    一键生成密钥

    wget -O key.sh https://raw.githubusercontent.com/yuju520/Script/main/key.sh && chmod +x key.sh && clear && ./key.sh
    

    Docker

    安装

    # 海外服务器 方法1
    wget -qO- get.docker.com | bash
    # 海外服务器 方法2
    curl -fsSL https://get.docker.com -o get-docker.sh && sh get-docker.sh
    # 大陆服务器
    curl https://install.1panel.live/docker-install -o docker-install && sudo bash ./docker-install && rm -f ./docker-install
    # 开机自启
    sudo systemctl enable docker
    # 卸载
    sudo apt-get purge docker-ce docker-ce-cli containerd.io
    sudo apt-get remove docker docker-engine
    sudo rm -rf /var/lib/docker
    sudo rm -rf /var/lib/containerd
    # 查看docker 版本
    docker -v
    # 查看docker compose版本 Docker18.06.0-ce 版本就开始自带 Docker Compose
    docker compose version
    

    Linux硬盘清理

    systemd-journal 日志清理

    设置
    • 打开配置文件
    nano /etc/systemd/journald.conf
    
    • 填写
    SystemMaxUse=5M
    SystemMaxFileSize=2M
    SystemKeepFiles=1
    
    • 清理日志
    journalctl --vacuum-time=1week
    
    • 重启
    systemctl restart systemd-journald
    
  • 好复杂, 我都是进系统后 upload一下,然后看看BBR开没开,没开打开默认bbr,一键脚本走起,然后退出ssh,流程不超过五分钟吧,毕竟可以节约一点时间玩会游戏了

  • 写成脚本就不会漏了

  • 让agent把你这些步骤形成skill,下次直接复用好了

  • 现在一般都用 ai 初始化吧,我所有 vps 都是 ai 管理

  • 改证书登录

  • 直接把ip root passwd丢给AI

  • 个人自用脚本:

    1,基础开荒

    https://github.com/BeacherZ/vps99.sh

    (极简版系统没有swap,推荐用这个脚本开启物理内存ZRAM(swap plus😜),压榨512m内存且不占用宝贵的1G硬盘空间,另外此脚本还能部署Cron定时清理空间的 /root/vps99clean.sh 子脚本,非常契合1G硬盘长期稳定使用)

    2,SSH改密钥登录&Fail2Ban

    https://github.com/BeacherZ/key.sh

    (请谨慎操作,改完密钥登录不要关闭ssh窗口,新开一个窗口测试密钥登录成功后再禁止密码登录)

    没有合二为一是因为ssh脚本二级菜单有点多🥲

  • 装上codex。然后让他跑一边,随时连

  • 话说快照是在控制台打吗?没留意,是不是收费的

12

你好啊,陌生人!

我的朋友,看起来你是新来的,如果想参与到讨论中,点击下面的按钮!

📈用户数目📈

目前论坛共有72265位seeker

🎉欢迎新用户🎉