ubuntu服务器 如何配置安全加固措施

news2025/2/18 23:57:11

下面提供一个更详细、一步步的服务器安全加固指南,适合新手操作。我们将从 Fail2Ban、SSH(密钥认证及端口更改)、Nginx 速率限制和日志轮转四个方面进行优化,同时补充一些额外的安全建议。


新的服务器,通常我们会创建一个新用户并将其加入 sudo 组,这样你就可以使用新用户登录,然后通过 sudo 命令来执行需要管理员权限的操作。下面是具体步骤:


1. 创建新用户

使用 adduser 命令创建新用户(例如用户名为 newuser):

sudo adduser newuser

系统会提示你设置密码并输入一些用户信息(可以直接回车跳过)。


2. 将新用户添加到 sudo 组

为了让新用户具有管理员权限,需要把他加入 sudo 组:

sudo usermod -aG sudo newuser

提示
在某些系统中,sudo 组可能被命名为 wheel,请根据你的发行版实际情况操作。


3. 测试新用户登录

  1. 打开一个新的终端或使用 SSH 重新连接服务器,使用新用户登录:
    ssh newuser@your_server_ip
    
  2. 登录后,尝试执行一个需要管理员权限的命令,例如:
    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 {
    weekly
    rotate 4
    compress
    delaycompress
    missingok
    notifempty
}

5.3 为特定服务(如 SSH)创建日志轮转配置

创建或编辑 /etc/logrotate.d/sshd 文件:

sudo nano /etc/logrotate.d/sshd

添加如下内容(确保路径正确,如 Ubuntu 下 SSH 日志通常为 /var/log/auth.log):

/var/log/auth.log {
    weekly
    rotate 4
    compress
    delaycompress
    missingok
    notifempty
    create 640 root adm
    sharedscripts
    postrotate
        # 重载 rsyslog 服务以确保日志文件句柄正确切换
        /usr/lib/rsyslog/rsyslog-rotate
    endscript
}

提示:文件权限和日志路径需要根据实际系统进行调整。


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)。


总结

  1. Fail2Ban:使用自定义配置文件,合理设置封禁参数,并验证是否生效。
  2. SSH 加固:生成密钥、上传公钥,禁用密码认证,必要时修改默认端口,并更新防火墙。
  3. Nginx 速率限制:通过 limit_req_zonelimit_req 限制恶意请求。
  4. 日志轮转:确保日志文件定期清理,防止硬盘占用过高。
  5. 额外建议:使用 UFW 配置防火墙、限制 root 远程登录、保持系统更新等。

按照以上步骤一步步实施后,您的服务器安全性将大大提高。建议每次修改配置后,都先用测试命令(如 nginx -tsshd -t)确认无误,并在另一个终端中测试连接,以避免误操作导致服务不可用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2299072.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DeepSeek v3 技术报告阅读笔记

注 本文参考 DeepSeek-v3 / v2 / v1 Technical Report 及相关参考模型论文本文不包括基础的知识点讲解,为笔记/大纲性质而非教程,建议阅读技术报告原文交流可发送至邮箱 henryhua0721foxmail.com 架构核心 核心: MLA 高效推理DeepSeekMOE 更…

GESP2024年9月认证C++七级( 第三部分编程题(1)小杨寻宝)

参考程序&#xff1a; #include <bits/stdc.h> using namespace std; const int N 1e510; vector<int> g[N]; // 图的邻接表 int col[N], dep[N], has[N];// 深度优先遍历&#xff0c;计算每个节点的深度 void dfs(int x, int fa) {dep[x] dep[fa] 1; // 计算…

解锁电商数据宝藏:淘宝商品详情API实战指南

在电商蓬勃发展的今天&#xff0c;数据已成为驱动业务增长的核心引擎。对于商家、开发者以及数据分析师而言&#xff0c;获取精准、实时的商品数据至关重要。而淘宝&#xff0c;作为国内最大的电商平台&#xff0c;其海量商品数据更是蕴含着巨大的价值。 本文将带你深入探索淘…

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&#xff0c;则环境安…

在 rtthread中,rt_list_entry (rt_container_of) 已知结构体成员的地址,反推出结构体的首地址

rt_list_entry (rt_container_of)宏定义&#xff1a; /*** 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 操作系统

最近&#xff0c;一位开源爱好者开发了一个LinuxPDF 项目&#xff08;ading2210/linuxpdf: Linux running inside a PDF file via a RISC-V emulator&#xff09;&#xff0c;它的核心功能是在一个 PDF 文件中启动并运行 Linux 操作系统。它通过巧妙地使用 PDF 文件格式中的 Ja…

【Linux】Socket编程—TCP

&#x1f525; 个人主页&#xff1a;大耳朵土土垚 &#x1f525; 所属专栏&#xff1a;Linux系统编程 这里将会不定期更新有关Linux的内容&#xff0c;欢迎大家点赞&#xff0c;收藏&#xff0c;评论&#x1f973;&#x1f973;&#x1f389;&#x1f389;&#x1f389; 文章目…

新数据结构(9)——Java异常体系

异常的种类 程序本身通常无法主动捕获并处理错误&#xff08;Error&#xff09;&#xff0c;因为这些错误通常表示系统级的严重问题&#xff0c;但程序可以捕获并处理异常&#xff08;Excrption&#xff09;&#xff0c;而Error则被视为一种程序无法或不应尝试恢复的异常类型。…

NixHomepage - 简单的个人网站

&#x1f4bb; NixHomepage - 简单的个人网站 推荐下个人的开源项目&#xff0c;演示网站&#xff0c;项目链接 https://github.com/nixgnauhcuy/NixHomepage&#xff0c;喜欢的话可以为我的项目点个 Star~ &#x1f4f7; 预览 ⚙️ 功能特性 多平台适配 明亮/暗黑模式切换 W…

HCIA项目实践---OSPF的知识和原理总结

9.5 OSPF 9.5.1 从哪些角度评判一个动态路由协议的好坏&#xff1f; &#xff08;1&#xff09;选路佳&#xff08;是否会出环&#xff09; OSPF 协议采用链路状态算法&#xff0c;通过收集网络拓扑信息来计算最短路径&#xff0c;从根本上避免了路由环路的产生。 &#xff08…

Calico网络组件本地部署支持IPv6(Kubernetes)

知其然 问题背景 因项目现场的网络正逐步从IPv4向IPv6迁移&#xff0c;这几年现场服务器基本上都配置了双栈&#xff1b;但随着IPv6铺开&#xff0c;出现了很多纯IPv6的服务器&#xff0c;并且要求通信优先使用IPv6。 在项目建设之初&#xff0c;其实就考虑了上述情况&#…

【广州大学主办,发表有保障 | IEEE出版,稳定EI检索,往届见刊后快至1个月检索】第二届电气技术与自动化工程国际学术会议 (ETAE 2025)

第二届电气技术与自动化工程国际学术会议 (ETAE 2025) The 2nd International Conference on Electrical Technology and Automation Engineering 大会官网&#xff1a;http://www.icetae.com/【更多详情】 会议时间&#xff1a;2025年4月25-27日 会议地点&#xff1a…

Python项目31:待办事项列表应用1.0(命令行界面+Json+类+初学者必做)

------------★Python练手项目源码★------------ Python项目27&#xff1a;用Tkinter写日志管理系统&#xff08;中下等难度&#xff09; Python项目26&#xff1a;设计学生成绩管理系统&#xff08;简易版&#xff09; Python项目25&#xff1a;带滚动效果的商场抽奖系统&…

Redis 01 02章——入门概述与安装配置

一、入门概述 &#xff08;1&#xff09;是什么 Redis&#xff1a;REmote Dictionary Server&#xff08;远程字典服务器&#xff09;官网解释&#xff1a;Remote Dictionary Server(远程字典服务)是完全开源的&#xff0c;使用ANSIC语言编写遵守BSD协议&#xff0c;是一个高…

Large Language Model Distilling Medication Recommendation Model

摘要&#xff1a;药物推荐是智能医疗系统的一个重要方面&#xff0c;因为它涉及根据患者的特定健康需求开具最合适的药物。不幸的是&#xff0c;目前使用的许多复杂模型往往忽视医疗数据的细微语义&#xff0c;而仅仅严重依赖于标识信息。此外&#xff0c;这些模型在处理首次就…

2025最新版Node.js下载安装~保姆级教程

1. node中文官网地址&#xff1a;http://nodejs.cn/download/ 2.打开node官网下载压缩包&#xff1a; 根据操作系统不同选择不同版本&#xff08;win7系统建议安装v12.x&#xff09; 我这里选择最新版win 64位 3.安装node ①点击对话框中的“Next”&#xff0c;勾选同意后点…

springboot如何将lib和jar分离

遇到一个问题&#xff0c;就是每次maven package或者maven install后target中的jar很大&#xff0c;少的50几MB&#xff0c;大的100多兆 优化前&#xff1a; 优化后&#xff1a; 优化前 优化后压缩率77.2MB4.65MB93% 具体方案&#xff1a; pom.xml中 <build><…

RocketMQ和Kafka如何实现顺序写入和顺序消费?

0 前言 先说明kafka&#xff0c;顺序写入和消费是Kafka的重要特性&#xff0c;但需要正确的配置和使用方式才能保证。本文需要解释清楚Kafka如何通过分区来实现顺序性&#xff0c;以及生产者和消费者应该如何配合。   首先&#xff0c;顺序写入。Kafka的消息是按分区追加写入…

Node.js技术原理分析系列——Node.js调试能力分析

本文由体验技术团队屈金雄原创。 Node.js 是一个开源的、跨平台的 JavaScript 运行时环境&#xff0c;它允许开发者在服务器端运行 JavaScript 代码。Node.js 是基于 Chrome V8引擎构建的&#xff0c;专为高性能、高并发的网络应用而设计&#xff0c;广泛应用于构建服务器端应…

从技术债务到架构升级,滴滴国际化外卖的变革

背 景 商家营销简述 在外卖平台的运营中&#xff0c;我们致力于通过灵活的补贴策略激励商家&#xff0c;与商家共同打造良好的合作关系&#xff0c;也会提供多样化的营销活动&#xff0c;帮助商家吸引更多用户下单。通过这些活动&#xff0c;不仅能够提高商家的销量&#xff0c…