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

下面提供一个更详细、一步步的服务器安全加固指南,适合新手操作。我们将从 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 {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)。


总结

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

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

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

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

相关文章

ESP32通过MQTT连接阿里云平台实现消息发布与订阅

文章目录 前言 一、准备工作 二、阿里云平台配置 三、代码实现 总结 前言 本文将介绍如何使用ESP32开发板通过MQTT协议连接阿里云物联网平台,并实现消息的发布与订阅功能。我们将使用Arduino IDE进行开发,并借助PubSubClient库实现MQTT通信。 一、准备…

Ubuntu下载安装Docker-Desktop

下载 Ubuntu | Docker Docs 预备工作 Ubuntu增加docker apt库-CSDN博客 安装 sudo apt-get updatesudo apt install gnome-terminal# sudo apt install -y docker-composesudo apt-get install ./docker-desktop-amd64.deb 测试 sudo docker run hello-worldHello from D…

Python爬虫实战:获取笔趣阁图书信息,并做数据分析

注意:以下内容仅供技术研究,请遵守目标网站的robots.txt规定,控制请求频率避免对目标服务器造成过大压力! 1. 环境准备与反爬策略 python import requests from bs4 import BeautifulSoup import pandas as pd import re import time import random from fake_useragent …

前端实现防抖功能的详细解读

在前端开发中,防抖(Debounce) 是一种优化技术,用于限制某个函数在短时间内被频繁调用的次数。它的核心思想是:在一定时间内,无论触发多少次事件,只执行最后一次操作。防抖通常用于处理用户输入、…

通俗诠释 DeepSeek-V3 模型的 “671B” ,“37B”与 “128K”,用生活比喻帮你理解模型的秘密!

欢迎来到涛涛聊AI。 在DeepSeek-V3模型的参数描述中,你可能会看到类似“671B 37B 128K”这样的标记。这些字母和数字的组合看起来像密码,但其实它们揭示了模型的“大脑容量”和“工作方式”。我们用日常生活的比喻来解释: 一、数字含义&…

node.js + html调用ChatGPTApi实现Ai网站demo(带源码)

文章目录 前言一、demo演示二、node.js 使用步骤1.引入库2.引入包 前端HTML调用接口和UI所有文件总结 前言 关注博主,学习每天一个小demo 今天是Ai对话网站 又到了每天一个小demo的时候咯,前面我写了多人实时对话demo、和视频转换demo,今天…

unity学习42:动画状态机:混合动画状态 blend tree

目录 1 动画状态机 1.1 新建动画状态 2 混合动画状态 blend Tree 2.1 new blend Tree 2.2 blend tree state 和普通的 state的属性不同 2.3 双击blend tree 进入下一层 blend tree内部 2.3.1 blend tree 内部 2.3.2 blend type 2.3.3 参数类型默认是float&#xff0…

集成测试总结文档

1. 集成测试的定义 集成测试(Integration Testing)是在单元测试之后,将多个独立的软件模块或组件组合在一起进行测试的过程,目的是验证这些模块之间的接口、数据传递、协作逻辑是否符合设计要求,并发现因集成引发的缺…

Mybatisplus——Mybatisplus3.5.2版本使用Page分页插件查询,records有数据但是total显示0

目录 一、问题背景 debug 执行Mybatisplus使用Page分页插件查询时,发现 Page 里面的records有数据但是total显示0。 二、问题产生的原因 未配置MybatisPlus的分页插件拦截器导致的或者因mybatis-plus版本3.4或3.5版本导致原先的分页插件paginationInterceptor无法…

Android10 音频参数导出合并

A10 设备录音时底噪过大,让音频同事校准了下,然后把校准好的参数需要导出来,集成到项目中,然后出包,导出方式在此记录 设备安装debug系统版本调试好后, adb root adb remount adb shell 进入设备目录 导…

C#(Winform)通过添加AForge添加并使用系统摄像机

先展示效果 AForge介绍 AForge是一个专门为开发者和研究者基于C#框架设计的, 也是NET平台下的开源计算机视觉和人工智能库 它提供了许多常用的图像处理和视频处理算法、机器学习和神经网络模型,并且具有高效、易用、稳定等特点。 AForge主要包括: 计算机视觉与人…

后端开发:高效数据库查询优化实战指南

在后端开发中,数据库查询性能直接影响整个应用的响应速度和用户体验。低效的查询可能导致系统响应缓慢,甚至出现卡顿现象。本文将深入探讨数据库查询优化的实用技巧,并结合代码示例,帮助开发者提升数据库操作的效率。 一、理解查…

【视频总结】Deep Dive into LLMs like ChatGPT 深入探索像ChatGPT这样的大语言模型|Andrej Karpathy

【视频总结】Deep Dive into LLMs like ChatGPT 深入探索像ChatGPT这样的大语言模型|Andrej Karpathy 大型语言模型(LLM)工作原理与使用指南核心观点模型训练三阶段1. 预训练阶段2. 后训练阶段(Post-training)3. 强化学…

【苍穹外卖】学习

软件开发整体介绍 作为一名软件开发工程师,我们需要了解在软件开发过程中的开发流程, 以及软件开发过程中涉及到的岗位角色,角色的分工、职责, 并了解软件开发中涉及到的三种软件环境。那么这一小节,我们将从 软件开发流程、角色…

【ISO 14229-1:2023 UDS诊断全量测试用例清单系列:第十五节】

ISO 14229-1:2023 UDS诊断服务测试用例全解析(RoutineControl_0x31服务) 作者:车端域控测试工程师 更新日期:2025年02月14日 关键词:UDS协议、0x31服务、例程控制、ISO 14229-1:2023、ECU测试 一、服务功能概述 0x31服…

yanshee机器人初次使用说明(备注)-PyCharm

准备 需要: 1,(优必选)yanshee机器人Yanshee 开发者说明 2,手机-联网简单操控 / HDMI线与显示器和键鼠标-图形化开发环境 / 笔记本(VNC-内置图形化开发环境/PyCharm等平台)。 3,P…

#渗透测试#批量漏洞挖掘#致远互联AnalyticsCloud 分析云 任意文件读取

免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停…

win11 MBR 启动 如何把我的硬盘改 GPT win11 的 UEFI 启动

bootrec /fixboot bootrec /rebuildbcd bootrec /scanos 相当于你的硬盘从MBR转换为GPT,并从传统的BIOS启动(即MBR)转换为UEFI启动(即GPT),你需要执行以下步骤。请注意,这些步骤涉及数据操作&a…

Flask框架入门完全指南

一、初识Flask:轻量级框架的魅力 1.1 Flask框架定位 Flask作为Python最受欢迎的轻量级Web框架,以"微核心可扩展"的设计哲学著称。其核心代码仅约2000行,却支持通过扩展实现完整Web开发功能。这种设计使得开发者可以: …

SQL与数据库程序设计

1.1986年,10月美国国家标准局颁布了SQL语言的美国标准,称为SQL86 2.SQL(Structured Query Language)又称为结构化查询语言 3.建立索引的主要目的是加快查找的速度 4.在基本表上建立一个或者多个索引 5. 一个基本表是最多只能建立一个聚簇索引 6.CAL…