为了服务器安全加固那点事,我写了个脚本
本文来自我的个人博客为了服务器安全加固那点事我写了个脚本一台新服务器上线后会发生什么前几天买了台雨云的服务器第二天打开终端看一眼/var/log/auth.log。上线不到半小时里面已经躺了上百条Failed password。IP 来自俄罗斯、越南、美国、荷兰还有几个我连名字都叫不上来的地方就是如此神秘呵呵可以拿来补习地理知识了。它们不挑时间凌晨三点也在扫周末也不休息。大部分是字典攻击挨个试 root、admin、user、test 这类弱口令。其实我觉得啊你的服务器只要有一个公网 IP就已经在别人的扫描名单上了。不是“可能会被攻击”是“正在被攻击”。所以每次新机器到手我都会花十几分钟做一遍安全加固改 SSH 端口、关密码登录、装 Fail2ban、配防火墙、设密码策略、查空口令账户……说难不算难每个步骤单独拎出来也就一两行命令。但做多了就腻了。当然如果你安装了宝塔面板等可以很轻松的在面板操作但是不是每个服务器都会安装宝塔面板吧。有时候忙起来忘了做某个步骤过几天想起来再去看日志已经被人扫了几天了。这次趁着有空我把这些事情整理成了一个脚本叫LXSecure。放 GitHub 上了https://github.com/gzy318/LXSecure1. LXSecure 是什么、能做什么简单说就是把安全加固的那些操作按顺序自动化了。一共14 个功能模块每一个都可以单独运行也可以一键全部跑完。用的时候有一个菜单界面选数字就行不需要记任何命令。支持 Debian/Ubuntu、CentOS/RHEL 7、Rocky Linux、AlmaLinux 这些主流发行版。完整功能列表编号功能0退出1系统更新2SSH 安全加固3防火墙配置4Fail2ban5密码策略6文件权限加固7内核参数多场景8审计日志9恶意软件扫描10账户安全检查11AIDE 文件完整性12生成安全报告13自动安全更新14关闭不必要服务15Lynis 安全审计16执行全部加固2. SSH 安全加固SSH 是服务器的入口也是被攻击最多的入口。脚本在这一块做了几件事。2.1 修改 SSH 端口22 是默认端口扫描器第一个扫的就是它。脚本会提示输入一个新端口建议用 10000 到 65535 之间的数。别用 2222、10086 这种太好猜的——扫描器扫完 22 之后会接着扫一批常见的高位端口。改端口有个坑顺序错了你就把自己锁在门外了贼搞笑哈哈特别诡异。正确的顺序是先放行新端口再改配置最后重启服务。脚本的处理顺序是先检测系统用的是 UFW、Firewalld 还是原生 iptables用对应的命令先把新端口放行掉再去改/etc/ssh/sshd_config最后才重启 sshd。2.2 禁用 Root 密码登录、改用密钥改成只允许密钥登录。这一步的前提是你得有一对密钥——公钥放服务器上私钥留本地。脚本给了两个选项可以粘贴自己已有的公钥也可以让脚本直接生成一对新的。2.3 生成 Ed25519 密钥对如果你选自动生成脚本会用ssh-keygen -t ed25519生成一对密钥。Ed25519 是基于椭圆曲线的签名算法256 位的密钥长度就能提供和 RSA 4096 位相当的安全性而且生成和验证速度更快。OpenSSH 从 6.5 版本就开始支持了2014 年之后的系统基本都兼容。密钥生成之后脚本会把公钥写入/root/.ssh/authorized_keys然后提示下载私钥并删除服务器上的副本。私钥不应该留在服务器上这是基本的安全意识。2.4 其他 SSH 加固参数脚本还会自动配置几个额外的 SSH 安全参数1.MaxAuthTries 3单次连接最多尝试 3 次认证超过就断开2.ClientAliveInterval 300300 秒无活动发送心跳包检测连接是否存活3.ClientAliveCountMax 2心跳包超时 2 次就断开连接4.LogLevel VERBOSE记录更详细的登录日志便于事后追溯2.5 实操建议万一新端口连不上请 VNC 救援模式进去修复——所有 VPS 服务商都有这个功能。3. 防火墙配置自动适配、只管放行需要的端口不同 Linux 发行版用的防火墙工具不一样——Ubuntu 默认是 UFWCentOS 7 是 Firewalld老系统可能是原生 iptables。脚本会先检测系统里装了什么然后用对应的方式配置。默认只开放三个端口SSH 端口就是你刚改的那个、80 和 443。其他端口全部关闭。配置的时候脚本会问要不要额外放行其他端口比如 8080、3306 之类的按需添加就行。UFW 启用之前会先把 SSH 端口放行掉——先放行再启用不会出现启用防火墙后把自己踢出去的情况。4. Fail2ban盯着认证日志封 IPFail2ban 的原理很简单盯着认证日志看同一个 IP 如果在短时间内失败次数太多就调用防火墙把它封掉。它和防火墙是配合关系——防火墙定义哪些端口能进Fail2ban 在防火墙里动态添加黑名单。脚本配置了两个 jail1.sshd5 次失败封 1 小时2.sshd-ddos10 次失败封 2 小时为什么要配两个有些攻击是分布式的单个 IP 失败次数不多但整体数量很大sshd-ddos 就是针对这种情况。Fail2ban 的配置文件在/etc/fail2ban/jail.local。如果发现某个 IP 段持续在扫可以手动把bantime改成 8640024 小时甚至更长。日志在/var/log/fail2ban.log封禁不生效的时候去这里看原因。常见问题是日志路径不对——不同发行版 sshd 的日志位置不一样需要确认jail.local里的logpath设置正确。5. 密码策略改 login.defs 和 PAM多用户服务器上密码策略是绕不开的。脚本会改/etc/login.defs里的四个参数1.PASS_MAX_DAYS90 天密码到期必须改2.PASS_MIN_DAYS2 天不能频繁改回旧密码3.PASS_MIN_LEN8 位4.PASS_WARN_AGE7 天到期前提醒同时通过 PAM 模块配置密码复杂度——必须包含大小写字母、数字和特殊字符。Debian/Ubuntu 上装libpam-pwqualityRHEL 系装libpwquality然后修改对应的 PAM 配置文件。6. 内核参数调优三种场景自己选这是 LXSecure 里我个人觉得最有意思的部分。有些脚本是套用同一套内核参数不管什么用途。但跑 Web 服务和跑数据库对内核的要求完全不一样我这个其实是从宝塔面板的Linux工具箱插件中获得的灵感。我分了三种场景6.1 ️ 安全优先——适用于公网 Web 服务器、API 服务开启的关键防护net.ipv4.tcp_syncookies 1防御 SYN flood 攻击net.ipv4.conf.all.rp_filter 1防止 IP 欺骗kernel.dmesg_restrict 1限制普通用户查看内核日志kernel.kptr_restrict 2隐藏内核指针地址kernel.randomize_va_space 2开启 ASLR地址空间布局随机化net.ipv4.tcp_syn_retries 2减少 SYN 重试次数降低半连接消耗net.ipv4.tcp_fin_timeout 15缩短 FIN-WAIT 超时快速释放连接6.2 高性能——适用于数据库服务器、游戏服务器、高并发场景优化的参数net.core.rmem_max 16777216接收缓冲区扩大到 16MBnet.core.wmem_max 16777216发送缓冲区扩大到 16MBfs.file-max 1000000最大文件句柄数提升到 100 万vm.swappiness 10减少磁盘交换优先使用内存net.core.somaxconn 65535增加监听队列长度net.ipv4.tcp_max_syn_backlog 65535增加 SYN 队列长度6.3 ⚖️ 均衡模式——适用于个人开发机、通用场景在安全和性能之间取一个折中值适合大多数情况。各项参数介于前两者之间。这些参数会写入/etc/sysctl.conf然后执行sysctl -p生效。如果不知道选哪个选安全优先就行——大部分场景够用了。以后发现性能不够再单独跑这个模块切到高性能模式。7. AIDE给系统文件拍张快照AIDEAdvanced Intrusion Detection Environment是一个基于主机的入侵检测系统用密码校验和来监控文件和目录的完整性。它做的事情简单说就是拍照。7.1 工作原理第一步是初始化数据库——扫描系统上指定的文件和目录记录每个文件的哈希值支持 MD5、SHA1、SHA256 等、权限、大小、修改时间、访问时间、ctime生成一个基线数据库。第二步是定期对比——把当前状态和基线数据库做对比哪个文件变了、怎么变的一目了然。7.2 实际应用场景假设有人黑进了你的服务器替换了/bin/ps和/bin/netstat让你看不到他正在运行的进程。AIDE 会发现这两个文件的哈希值和初始记录不一样发邮件告警。7.3 使用注意事项首次初始化会花几分钟因为它要扫描整个文件系统。建议在系统刚装好、还没装太多软件的时候跑这样基线数据库比较“干净”。如果等装了一堆服务之后再初始化数据库里会包含大量正常文件的变化排查起来更费劲。AIDE 只做文件完整性检查不检查 rootkit 也不解析日志文件。脚本里配置了每日自动检查结果发到 root 邮箱。如果服务器上配了邮件转发就能收到通知。初始化如果失败大概率是因为/etc/aide/aide.conf里包含了不存在的目录。可以编辑配置文件把那些目录注释掉或者手动创建空目录。这个问题在最小化安装的系统上比较常见。8. auditd内核级的审计日志auditd 是 Linux 内核自带的审计系统比应用层日志更底层、更可靠。8.1 auditd 和 AIDE 的区别这两个东西容易搞混。AIDE 是主动扫描定期去检查文件有没有变化。auditd 是被动监听内核层面实时记录谁在什么时候访问了哪些文件、执行了哪些命令。8.2 脚本配置的审计规则脚本会把规则写入/etc/audit/rules.d/lxsecure.rules用augenrules --load加载。主要监控几类东西关键文件的写操作/etc/passwd、/etc/shadow、/etc/group/etc/sudoers/etc/ssh/sshd_config/etc/crontab敏感系统调用execve执行程序openat打开文件mount挂载文件系统用户管理命令的执行useradd、userdel、usermodsudo 操作日志。8.3 实际应用场景举个例子。你发现服务器上多了一个你不知道的账户。去查 auditd 的日志能看到这个账户是什么时候创建的、从哪个 IP 登录的、创建之前执行过哪些命令。这些信息能帮你判断是被入侵了还是同事误操作。8.4 日志管理auditd 的日志会占用磁盘空间。脚本里限制了日志缓冲区大小-b 8192但如果系统日志量很大建议配置 logrotate 或者定期清理。一般生产环境会保留 30 天到 90 天的审计日志看合规要求。9. rkhunter chkrootkit扫 rootkit这两个都是经典的 rootkit 检测工具侧重点不太一样。9.1 rkhunterRootkit Hunterrkhunter 主要靠特征库匹配检查系统二进制文件有没有被篡改、有没有可疑的内核模块、/dev目录下有没有异常文件。它有自己的数据库安装之后需要先跑一次rkhunter --propupd来生成系统初始状态。能检测大约 58 个已知的 rootkit 和一些嗅探器和后门程序。9.2 chkrootkitchkrootkit 更侧重于检测已知 rootkit 的特征——某个 rootkit 会在系统里留下什么样的文件、什么样的进程、什么样的网络连接。它不需要初始化数据库直接跑就行。两个工具各有优缺点搭配着用效果更好。脚本会把两个都装上并配置 rkhunter 每日自动扫描。10. 账户安全检查空口令和 UID 0这个模块只做检查和报告不做任何修改。10.1 空口令账户检查查/etc/shadow里有没有密码字段为空的账户。空口令账户意味着任何人都可以不输入密码登录如果存在这样的账户脚本会列出来需要手动处理。有些系统默认会有一些无密码的服务账户但它们的 shell 是/sbin/nologin实际上不能登录这种就不需要管。脚本只会列出来让管理员自己判断。10.2 UID 0 异常账户检查查/etc/passwd里除了 root 还有没有其他账户的 UID 是 0。UID 0 是超级用户拥有最高权限。如果自己没有创建过这样的账户那可能是被人留的后门。11. 自动安全更新只装安全更新、不全量升级全量升级在生产环境里是有风险的——可能会引入不兼容的变更导致服务出问题。但安全更新不打又不行。11.1 Debian/Ubuntu用unattended-upgrades脚本配置只允许从*-security源安装更新其他软件包版本保持不变。同时开启自动修复中断的 dpkg、自动删除不再需要的依赖。11.2 RHEL 系CentOS 8/RHEL 8 用dnf-automaticCentOS 7 用yum-cron启用定时自动更新。12. 关闭不必要服务少一个服务就少一个漏洞服务器上有很多默认开启但根本用不上的服务。脚本会禁用三个cups打印服务bluetooth蓝牙avahi-daemonmDNS 广播这些服务在桌面环境里有用但在服务器上完全是多余的。少一个运行中的服务就少一个可能被利用的漏洞入口。13. Lynis深度安全审计Lynis 是一个开源的 Unix/Linux 安全审计工具2007 年就有了执行超过 2000 项配置检查。检查范围很广——系统配置、软件包管理、用户和组、文件系统、网络配置、SSH、Web 服务、数据库等等。这个功能在脚本里是独立运行的不包含在“全部加固”中。因为 Lynis 审计一次大概需要 10 到 20 分钟适合单独执行做深度评估。审计结果会输出到/var/log/lynis_audit.log可以根据报告里的建议进一步优化系统配置。14. 防锁死设计写这个脚本的时候最看重的一个原则是别把用户锁在门外。改 SSH 端口也好、配置防火墙也好最怕的就是操作失误导致 SSH 连不上。特别是对于新手一旦连不上了就慌了。所以脚本里凡是有可能影响 SSH 连接的操作都有保护措施1.改端口先放行新端口 → 再改配置 → 最后重启服务2.配置 UFW先用ufw allow放行 SSH 端口 → 再执行ufw enable3.配置 iptables先把默认策略设成 ACCEPT → 加完所有规则 → 最后把默认策略改成 DROP这样就算某个步骤出错了当前连接也不会断还有机会进去检查和修复。当然如果用户改完端口之后自己手快把终端关了然后发现新端口连不上……那脚本也救不了。这种情况只能去 VPS 后台用 VNC。不过 VNC 算是最后的保险所有 VPS 服务商都有这个功能。15. 一些实操中踩过的坑15.1 VPS 服务商的额外防火墙改 SSH 端口之前确认一下 VPS 服务商有没有额外防火墙。很多服务商在控制面板里还有一个独立的防火墙或者安全组那个不归系统管——改了系统端口但面板防火墙没放行的话照样连不上。15.2 Fail2ban 日志路径问题Fail2ban 的日志在/var/log/fail2ban.log如果发现封禁不生效去这里看。常见原因是日志路径不对不同发行版 sshd 的日志位置不一样需要确认jail.local里的logpath设置正确。15.3 AIDE 初始化失败AIDE 首次初始化如果失败大概率是因为/etc/aide/aide.conf里包含了不存在的目录。可以编辑配置文件把那些目录注释掉或者手动创建空目录。这个问题在最小化安装的系统上比较常见。15.4 auditd 日志膨胀auditd 的日志会占用磁盘空间。脚本里限制了日志缓冲区大小但如果系统日志量很大建议配置 logrotate 或者定期清理。一般生产环境会保留 30 天到 90 天的审计日志看合规要求。16. 怎么用交互式管理安装/卸载/状态/运行/更新bash (curl \-sSL https://raw.githubusercontent.com/gzy318/LXSecure/main/install.sh)直接运行不安装wget https://raw.githubusercontent.com/gzy318/LXSecure/main/lxsecure.sh chmod x lxsecure.sh sudo ./lxsecure.sh跑完之后会在当前目录生成一份安全报告带时间戳里面汇总了所有加固的结果可以存着归档。17.使用截图安装脚本主脚本18. 项目地址GitHubhttps://github.com/gzy318/LXSecure

相关新闻

VS2013 64位C++项目集成ZBar条码识别库完整指南

VS2013 64位C++项目集成ZBar条码识别库完整指南

1. 项目概述与核心需求解析最近在整理一个遗留的工业数据采集项目,客户要求将原有的32位系统升级到64位环境,以支持更大内存的数据处理。其中核心的条码识别模块,之前一直用的是zbar库,但原项目是在VS2010 32位环境下编译的&#…

2026/8/3 2:50:07 阅读更多 →
WPS调用MathType报错“文件未找到”的排查与修复全攻略

WPS调用MathType报错“文件未找到”的排查与修复全攻略

1. 问题现象与核心症结剖析如果你正在用WPS写论文或者技术报告,突然发现之前用得好好的MathType公式编辑器点不开了,弹出一个让人心慌的“运行时错误‘53’:文件未找到”的提示,那感觉就像写到一半笔没水了,而且你还不…

2026/8/3 2:49:06 阅读更多 →
道德经道影书斋注释版 044

道德经道影书斋注释版 044

本章承接四十三章「守柔无为、不妄为」的底层逻辑,向内收敛、反向复盘人心执念,以三组反问拆解世人向外追逐名、货的底层执念;从拓扑维度区分「内在本身」与「外在物象」的层级差异,点明执着外物必然耗损自身势能,推导…

2026/8/3 2:49:06 阅读更多 →

最新新闻

Unity机器人仿真:URDF导入全流程解析与避坑指南

Unity机器人仿真:URDF导入全流程解析与避坑指南

1. 项目概述:为什么Unity与URDF的结合如此重要?如果你正在涉足机器人仿真、数字孪生或者工业元宇宙领域,那么“Unity”和“URDF”这两个词对你来说一定不陌生。Unity早已不是那个单纯的游戏引擎,它凭借其强大的实时渲染能力、丰富…

2026/8/3 3:36:37 阅读更多 →
万能代码模板:提升开发效率的模块化实践

万能代码模板:提升开发效率的模块化实践

1. 项目概述:为什么需要万能代码模板?在软件开发领域,我们经常遇到这样的场景:每次开始新项目都要重新搭建基础框架,反复编写相似的业务逻辑代码,或者在不同项目中复制粘贴相同的工具函数。这不仅浪费时间&…

2026/8/3 3:36:37 阅读更多 →
动态特征规避技术在AI监控系统中的应用与实现

动态特征规避技术在AI监控系统中的应用与实现

1. 动态特征与AI监控系统的攻防本质在当今数字化环境中,AI监控系统已成为网络安全防御的重要组成部分。这类系统通过分析网络流量、用户行为和应用交互中的静态特征(如固定IP、固定请求头、固定API调用模式)来识别潜在威胁。然而,…

2026/8/3 3:36:37 阅读更多 →
Java日志框架选型与最佳实践指南

Java日志框架选型与最佳实践指南

1. 为什么我们需要告别System.out.println 在Java开发中,System.out.println()可能是大多数开发者最早接触的打印日志方式。我刚入行时也习惯在代码里到处写System.out.println("here")来调试,直到有次线上问题排查时,面对成千上万…

2026/8/3 3:36:36 阅读更多 →
Cloudflare国内受限?国产这次争气了,无需自备案,0元上线

Cloudflare国内受限?国产这次争气了,无需自备案,0元上线

前言随着WorkBuddy、Claude Code这类Agent工具逐渐普及,个人开发的门槛确实低了不少,在熊猫看来这其实算是一种AI 平权,只要有想法、能把需求讲清楚,再准备足够的Token,即便不会写代码,也能做出一个专属于自…

2026/8/3 3:36:36 阅读更多 →
磁控溅射 AR 镀膜工艺详解:反射率 0.5% 是如何做到的——悟赫德观复盾的镀膜工程解析

磁控溅射 AR 镀膜工艺详解:反射率 0.5% 是如何做到的——悟赫德观复盾的镀膜工程解析

前言普通钢化膜贴上一块旗舰手机,屏幕反光率瞬间从不足 1% 飙升至 4% 以上,户外强光下屏幕变成一面无法阅读的镜子。解决这一问题的核心手段是 AR(Anti-Reflection,抗反射)镀膜。但同样是宣称“AR 膜”,有的…

2026/8/3 3:35:36 阅读更多 →

日新闻

3个让你工作效率翻倍的Umi-OCR实战技巧:免费离线文字识别完全指南

3个让你工作效率翻倍的Umi-OCR实战技巧:免费离线文字识别完全指南

3个让你工作效率翻倍的Umi-OCR实战技巧:免费离线文字识别完全指南 【免费下载链接】Umi-OCR OCR software, free and offline. 开源、免费的离线OCR软件。支持截屏/批量导入图片,PDF文档识别,排除水印/页眉页脚,扫描/生成二维码。…

2026/8/3 0:00:47 阅读更多 →
[具身智能-181]:PC+服务器+具身机器人:构建具身智能从仿真到量产的闭环迭代混合架构

[具身智能-181]:PC+服务器+具身机器人:构建具身智能从仿真到量产的闭环迭代混合架构

PC服务器具身机器人:构建具身智能从仿真到量产的闭环迭代混合架构一、前言:具身智能需要“混合算力闭环系统”传统人工智能依赖云端静态数据集训练,不具备物理交互能力,无法适应真实世界的不确定性。具身智能(Embodied…

2026/8/3 0:00:47 阅读更多 →
[具身智能-181]:大分布式通信模型对比:看懂为什么 DDS 是 ROS2 底层通信最优解

[具身智能-181]:大分布式通信模型对比:看懂为什么 DDS 是 ROS2 底层通信最优解

前言构建机器人、具身智能这类分布式实时系统,通信底座直接决定整套系统的实时性、容错性、组网能力。分布式领域长期存在 4 类经典通信架构:点对点模式、Broker 中间代理模式、广播模式、以数据为中心(DDS)模式。很多开发者疑惑&…

2026/8/3 0:00:47 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/2 0:00:38 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/3 1:53:31 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/2 0:00:38 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/2 6:34:16 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/2 2:47:48 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/2 0:23:22 阅读更多 →