ubuntu服务器 如何配置安全加固措施
下面提供一个更详细、一步步的服务器安全加固指南,适合新手操作。我们将从 Fail2Ban、SSH(密钥认证及端口更改)、Nginx 速率限制和日志轮转四个方面进行优化,同时补充一些额外的安全建议。
新的服务器,通常我们会创建一个新用户并将其加入 sudo 组,这样你就可以使用新用户登录,然后通过 sudo 命令来执行需要管理员权限的操作。下面是具体步骤:
1. 创建新用户
使用 adduser 命令创建新用户(例如用户名为 newuser):
sudo adduser newuser
系统会提示你设置密码并输入一些用户信息(可以直接回车跳过)。
2. 将新用户添加到 sudo 组
为了让新用户具有管理员权限,需要把他加入 sudo 组:
sudo usermod -aG sudo newuser
提示:
在某些系统中,sudo 组可能被命名为wheel,请根据你的发行版实际情况操作。
3. 测试新用户登录
- 打开一个新的终端或使用 SSH 重新连接服务器,使用新用户登录:
ssh newuser@your_server_ip - 登录后,尝试执行一个需要管理员权限的命令,例如:
系统会提示输入新用户的密码。成功后说明配置无误。sudo apt update
通过这种方式,即使你禁用了 root 的直接远程登录,也能安全地以新用户身份登录,并在需要时通过 sudo 获取管理员权限。
下面是安全加固的配置措施
1. Fail2Ban 安全加固
Fail2Ban 能够自动封禁短时间内
出现多次失败登录的 IP,能有效防止暴力破解。
1.1 安装 Fail2Ban(如未安装)
sudo apt update
sudo apt install fail2ban
1.2 创建自定义配置文件
建议不要直接修改默认配置文件,而是在 /etc/fail2ban/jail.d/ 下创建自定义配置文件,比如 custom.conf。
sudo nano /etc/fail2ban/jail.d/custom.conf
1.3 添加如下内容
[DEFAULT]
# 封禁时间:3600秒(1小时)
bantime = 3600
# 查找时间窗口:300秒(5分钟)
findtime = 300
# 最大失败尝试次数:5次
maxretry = 5[sshd]
enabled = true
port = ssh # 这里使用名称(sshd)或具体数字(如22、2222)都可以
logpath = /var/log/auth.log # 根据系统(Ubuntu 常用 /var/log/auth.log,CentOS 则可能是 /var/log/secure)
提示:
- 如果系统使用了不同的日志路径,请根据实际情况修改。
- 如果需要保护其他服务,可以按相似方式添加更多 jail 配置。
1.4 重启 Fail2Ban 并检查状态
sudo systemctl restart fail2ban
sudo fail2ban-client status sshd
确保看到类似封禁规则已生效的信息。
2. SSH 安全加固
加强 SSH 安全性主要包括使用密钥认证替代密码认证,并视需要修改默认端口。
2.1 生成 SSH 密钥对(本地操作)
如果你还没有 SSH 密钥,可以在客户端生成:
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
一路回车,生成的密钥通常存放在 ~/.ssh/id_rsa 和 ~/.ssh/id_rsa.pub。
2.2 将公钥复制到服务器
使用 ssh-copy-id 工具上传公钥到服务器(假设 SSH 仍在默认端口 22 上):
ssh-copy-id username@your_server_ip
注意:
在执行下一步前,请确保你已经能通过 SSH 密钥成功登录服务器,以免因配置错误导致无法远程连接。
2.3 修改 SSH 配置文件
编辑 /etc/ssh/sshd_config:
sudo nano /etc/ssh/sshd_config
确保进行如下修改:
- 禁用密码认证:
PasswordAuthentication no ChallengeResponseAuthentication no - 启用公钥认证:
PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys - (可选)修改 SSH 监听端口:如果你想更改默认端口,取消注释并修改
Port行。例如:Port 2222
提示:修改 SSH 端口后,记得更新防火墙规则(见下文防火墙部分),并先在新的终端测试连接。
2.4 重启 SSH 服务
sudo systemctl restart sshd
2.5 检查 SSH 配置
在测试 SSH 连接前,建议用以下命令检查配置文件语法是否正确:
sudo sshd -t
没有输出则表示配置正确。
3. 修改 SSH 端口与防火墙设置(可选)
改变 SSH 端口可以降低被自动化攻击的概率,但务必更新防火墙规则。
3.1 更新 SSH 配置文件
如上一步已在 /etc/ssh/sshd_config 中修改 Port 参数(例如设置为 2222)。
3.2 更新防火墙规则
如果使用 UFW(Ubuntu 常用),允许新的 SSH 端口并删除旧端口:
sudo ufw allow 2222/tcp
sudo ufw delete allow 22/tcp
sudo ufw reload
若使用其他防火墙(如 iptables),请根据实际情况调整规则。
4. Nginx 速率限制配置
限制请求速率能有效防止恶意请求或 DDoS 攻击。
4.1 编辑 Nginx 主配置文件
打开 /etc/nginx/nginx.conf 文件:
sudo nano /etc/nginx/nginx.conf
在 http { ... } 块中添加或修改以下内容(确保放在合适的位置):
http {# 定义请求限制区域,基于客户端 IP 地址,每秒允许1个请求limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;server {listen 80;server_name your_domain_or_ip;location /search/ {# 对 /search/ 路径启用速率限制,允许突发5个请求limit_req zone=one burst=5 nodelay;try_files $uri $uri/ =404;}# 其他 location 配置…}
}
4.2 测试并重启 Nginx
测试配置文件语法:
sudo nginx -t
如果无误,重启 Nginx:
sudo systemctl restart nginx
5. 日志轮转(Logrotate)配置
定期清理和压缩日志文件能防止日志无限增长,影响系统性能。
5.1 安装 logrotate(如未安装)
sudo apt install logrotate
5.2 配置全局日志轮转
编辑 /etc/logrotate.conf,确保包含类似配置:
/var/log/*.log {weeklyrotate 4compressdelaycompressmissingoknotifempty
}
5.3 为特定服务(如 SSH)创建日志轮转配置
创建或编辑 /etc/logrotate.d/sshd 文件:
sudo nano /etc/logrotate.d/sshd
添加如下内容(确保路径正确,如 Ubuntu 下 SSH 日志通常为 /var/log/auth.log):
/var/log/auth.log {weeklyrotate 4compressdelaycompressmissingoknotifemptycreate 640 root admsharedscriptspostrotate# 重载 rsyslog 服务以确保日志文件句柄正确切换/usr/lib/rsyslog/rsyslog-rotateendscript
}
提示:文件权限和日志路径需要根据实际系统进行调整。
6. 额外安全建议
6.1 配置防火墙
安装并启用 UFW(简单易用):
sudo apt install ufw
sudo ufw default deny incoming
sudo ufw default allow outgoing
# 允许 HTTP/HTTPS
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# 允许你配置的 SSH 端口(例如2222)
sudo ufw allow 2222/tcp
sudo ufw enable
sudo ufw status verbose
6.2 定期更新系统
保持系统和软件包的更新是防止漏洞的重要手段:
sudo apt update && sudo apt upgrade -y
6.3 限制 root 远程登录
在 /etc/ssh/sshd_config 中设置:
PermitRootLogin no
6.4 安装 Fail2Ban 的邮件通知(可选)
可以设置 Fail2Ban 在封禁时发送邮件通知,便于及时响应攻击:
编辑 /etc/fail2ban/jail.local 或在 custom.conf 中增加:
[DEFAULT]
action = %(action_mwl)s
确保系统已安装邮件传输代理(如 Postfix)。
总结
- Fail2Ban:使用自定义配置文件,合理设置封禁参数,并验证是否生效。
- SSH 加固:生成密钥、上传公钥,禁用密码认证,必要时修改默认端口,并更新防火墙。
- Nginx 速率限制:通过
limit_req_zone和limit_req限制恶意请求。 - 日志轮转:确保日志文件定期清理,防止硬盘占用过高。
- 额外建议:使用 UFW 配置防火墙、限制 root 远程登录、保持系统更新等。
按照以上步骤一步步实施后,您的服务器安全性将大大提高。建议每次修改配置后,都先用测试命令(如 nginx -t、sshd -t)确认无误,并在另一个终端中测试连接,以避免误操作导致服务不可用。
相关文章:
ubuntu服务器 如何配置安全加固措施
下面提供一个更详细、一步步的服务器安全加固指南,适合新手操作。我们将从 Fail2Ban、SSH(密钥认证及端口更改)、Nginx 速率限制和日志轮转四个方面进行优化,同时补充一些额外的安全建议。 新的服务器,通常我们会创建一…...
DeepSeek v3 技术报告阅读笔记
注 本文参考 DeepSeek-v3 / v2 / v1 Technical Report 及相关参考模型论文本文不包括基础的知识点讲解,为笔记/大纲性质而非教程,建议阅读技术报告原文交流可发送至邮箱 henryhua0721foxmail.com 架构核心 核心: MLA 高效推理DeepSeekMOE 更…...
Spring 事务及管理方式
Spring 事务管理是 Spring 框架的核心功能之一,它为开发者提供了一种方便、灵活且强大的方式来管理数据库事务。 1、事务的基本概念 事务是一组不可分割的操作序列,这些操作要么全部成功执行,要么全部失败回滚,以确保数据的一致…...
GESP2024年9月认证C++七级( 第三部分编程题(1)小杨寻宝)
参考程序: #include <bits/stdc.h> using namespace std; const int N 1e510; vector<int> g[N]; // 图的邻接表 int col[N], dep[N], has[N];// 深度优先遍历,计算每个节点的深度 void dfs(int x, int fa) {dep[x] dep[fa] 1; // 计算…...
Pandas数据填充(fill)中的那些坑:避免机器学习中的数据泄露
1. 问题背景 在处理时间序列数据时,经常会遇到缺失值需要填充。Pandas提供了ffill(forward fill)和bfill(backward fill)两种填充方式,但使用不当可能会导致数据泄露,特别是在进行机器学习预测时。 2. 填充方式解析 2.1 基本概念 ffill(forward fill): 用前面的值填充后面的…...
ubuntu 安装vnc之后,本地黑屏,vnc正常
ubuntu 安装vnc之后,本地黑屏,vnc正常 在Ubuntu系统中安装VNC服务器(如TightVNC或RealVNC)后,如果遇到连接时本地屏幕变黑的情况,可能是由于几种不同的配置或兼容性问题。以下是一些解决步骤,可以帮助你解决这个问题&…...
解锁电商数据宝藏:淘宝商品详情API实战指南
在电商蓬勃发展的今天,数据已成为驱动业务增长的核心引擎。对于商家、开发者以及数据分析师而言,获取精准、实时的商品数据至关重要。而淘宝,作为国内最大的电商平台,其海量商品数据更是蕴含着巨大的价值。 本文将带你深入探索淘…...
webshell通信流量分析
环境安装 Apatche2 php sudo apt install apache2 -y sudo apt install php libapache2-mod-php php-mysql -y echo "<?php phpinfo(); ?>" | sudo tee /var/www/html/info.php sudo ufw allow Apache Full 如果成功访问info.php,则环境安…...
在 rtthread中,rt_list_entry (rt_container_of) 已知结构体成员的地址,反推出结构体的首地址
rt_list_entry (rt_container_of)宏定义: /*** rt_container_of - return the start address of struct type, while ptr is the* member of struct type.*/ #define rt_container_of(ptr, type, member) \((type *)((char *)(ptr) - (unsigned long)(&((type *…...
趣味魔法项目 LinuxPDF —— 在 PDF 中启动一个 Linux 操作系统
最近,一位开源爱好者开发了一个LinuxPDF 项目(ading2210/linuxpdf: Linux running inside a PDF file via a RISC-V emulator),它的核心功能是在一个 PDF 文件中启动并运行 Linux 操作系统。它通过巧妙地使用 PDF 文件格式中的 Ja…...
DeepSeek教unity------MessagePack-03
数据契约兼容性 你可以使用 [DataContract] 注解代替 [MessagePackObject]。如果类型用 DataContract 进行注解,可以使用 [DataMember] 注解代替 [Key],并使用 [IgnoreDataMember] 代替 [IgnoreMember]。 然后,[DataMember(Order int)] 的…...
【Linux】Socket编程—TCP
🔥 个人主页:大耳朵土土垚 🔥 所属专栏:Linux系统编程 这里将会不定期更新有关Linux的内容,欢迎大家点赞,收藏,评论🥳🥳🎉🎉🎉 文章目…...
新数据结构(9)——Java异常体系
异常的种类 程序本身通常无法主动捕获并处理错误(Error),因为这些错误通常表示系统级的严重问题,但程序可以捕获并处理异常(Excrption),而Error则被视为一种程序无法或不应尝试恢复的异常类型。…...
一种 SQL Server 数据库恢复方案:解密、恢复并导出 MDF/NDF/BAK文件
方案特色 本方案可以轻松恢复和导出SQL数据库:MDF、NDF 和 BAK 文件。 恢复和导出SQL数据库:主(MDF),辅助(NDF)和备份(BAK)文件分析 SQL Server LOG 数据库事务日志将 …...
NixHomepage - 简单的个人网站
💻 NixHomepage - 简单的个人网站 推荐下个人的开源项目,演示网站,项目链接 https://github.com/nixgnauhcuy/NixHomepage,喜欢的话可以为我的项目点个 Star~ 📷 预览 ⚙️ 功能特性 多平台适配 明亮/暗黑模式切换 W…...
HCIA项目实践---OSPF的知识和原理总结
9.5 OSPF 9.5.1 从哪些角度评判一个动态路由协议的好坏? (1)选路佳(是否会出环) OSPF 协议采用链路状态算法,通过收集网络拓扑信息来计算最短路径,从根本上避免了路由环路的产生。 (…...
Calico网络组件本地部署支持IPv6(Kubernetes)
知其然 问题背景 因项目现场的网络正逐步从IPv4向IPv6迁移,这几年现场服务器基本上都配置了双栈;但随着IPv6铺开,出现了很多纯IPv6的服务器,并且要求通信优先使用IPv6。 在项目建设之初,其实就考虑了上述情况&#…...
【广州大学主办,发表有保障 | IEEE出版,稳定EI检索,往届见刊后快至1个月检索】第二届电气技术与自动化工程国际学术会议 (ETAE 2025)
第二届电气技术与自动化工程国际学术会议 (ETAE 2025) The 2nd International Conference on Electrical Technology and Automation Engineering 大会官网:http://www.icetae.com/【更多详情】 会议时间:2025年4月25-27日 会议地点:…...
Python项目31:待办事项列表应用1.0(命令行界面+Json+类+初学者必做)
------------★Python练手项目源码★------------ Python项目27:用Tkinter写日志管理系统(中下等难度) Python项目26:设计学生成绩管理系统(简易版) Python项目25:带滚动效果的商场抽奖系统&…...
Redis 01 02章——入门概述与安装配置
一、入门概述 (1)是什么 Redis:REmote Dictionary Server(远程字典服务器)官网解释:Remote Dictionary Server(远程字典服务)是完全开源的,使用ANSIC语言编写遵守BSD协议,是一个高…...
Large Language Model Distilling Medication Recommendation Model
摘要:药物推荐是智能医疗系统的一个重要方面,因为它涉及根据患者的特定健康需求开具最合适的药物。不幸的是,目前使用的许多复杂模型往往忽视医疗数据的细微语义,而仅仅严重依赖于标识信息。此外,这些模型在处理首次就…...
2025最新版Node.js下载安装~保姆级教程
1. node中文官网地址:http://nodejs.cn/download/ 2.打开node官网下载压缩包: 根据操作系统不同选择不同版本(win7系统建议安装v12.x) 我这里选择最新版win 64位 3.安装node ①点击对话框中的“Next”,勾选同意后点…...
deepseek:三个月备考高级系统架构师
一、备考总体规划(2025年2月11日 - 2025年5月) 1. 第一阶段:基础夯实(2025年2月11日 - 2025年3月10日) 目标:快速掌握系统架构师考试的核心知识点。 重点内容: 计算机组成原理、操作系统、数据…...
springboot如何将lib和jar分离
遇到一个问题,就是每次maven package或者maven install后target中的jar很大,少的50几MB,大的100多兆 优化前: 优化后: 优化前 优化后压缩率77.2MB4.65MB93% 具体方案: pom.xml中 <build><…...
解锁建造者模式:Java 编程中的对象构建秘籍
系列文章目录 后续补充~~~~ 文章目录 一、引言二、建造者模式原理剖析2.1 定义与概念2.2 模式结构与角色2.2.1 产品(Product)2.2.2 建造者(Builder)2.2.3 具体建造者(ConcreteBuilder)2.2.4 指挥者(Director)2.3 工作流程与交互机制三、建造者模式在 Java 中的优势3.1 …...
RocketMQ和Kafka如何实现顺序写入和顺序消费?
0 前言 先说明kafka,顺序写入和消费是Kafka的重要特性,但需要正确的配置和使用方式才能保证。本文需要解释清楚Kafka如何通过分区来实现顺序性,以及生产者和消费者应该如何配合。 首先,顺序写入。Kafka的消息是按分区追加写入…...
Electron 全面解析:跨平台桌面应用开发指南
引言 在当今多平台并存的数字时代,如何高效开发跨平台桌面应用成为开发者面临的重要挑战。Electron作为GitHub开源的跨平台框架,凭借其独特的Web技术融合能力,已成为构建桌面应用的热门选择。本文将深入探讨Electron的核心原理、开发实践及未…...
Node.js技术原理分析系列——Node.js调试能力分析
本文由体验技术团队屈金雄原创。 Node.js 是一个开源的、跨平台的 JavaScript 运行时环境,它允许开发者在服务器端运行 JavaScript 代码。Node.js 是基于 Chrome V8引擎构建的,专为高性能、高并发的网络应用而设计,广泛应用于构建服务器端应…...
从技术债务到架构升级,滴滴国际化外卖的变革
背 景 商家营销简述 在外卖平台的运营中,我们致力于通过灵活的补贴策略激励商家,与商家共同打造良好的合作关系,也会提供多样化的营销活动,帮助商家吸引更多用户下单。通过这些活动,不仅能够提高商家的销量,…...
DeepSeek教unity------MessagePack-05
动态反序列化 当调用 MessagePackSerializer.Deserialize<object> 或 MessagePackSerializer.Deserialize<dynamic> 时,二进制数据中存在的任何值都将被转换为基本值,即 bool、char、sbyte、byte、short、int、long、ushort、uint、ulong、…...
