网安等保 | 主机安全之CentOS8服务器配置优化与安全加固基线文档脚本分享_基线加固脚本-程序员宅基地

技术标签: 安全  运维  服务器  公众号付费专栏  

欢迎关注「全栈工程师修炼指南」公众号

点击  下方卡片 即可关注我哟!

设为星标每天带你 基础入门 到 进阶实践 再到 放弃学习

专注 企业运维实践、网络安全、系统运维、应用开发、物联网实战、全栈文章 等知识分享

  花开堪折直须折,莫待无花空折枝 


作者主页:[ https://www.weiyigeek.top ]  

博客:[ https://blog.weiyigeek.top ]

作者<安全开发运维>答疑交流群,回复【学习交流群】即可加入


本章目录:

5bdd53b40c019ee4e3dcc159817defe8.png

本文为作者原创文章,为尊重作者劳动成果禁止非授权转载,若需转载请在【全栈工程师修炼指南】公众号留言,或者发送邮件到 [[email protected]] 中我将及时回复。

免责申明:本文分享旨在给网络安全从业人员、网站开发人员以及运维管理人员在日常工作中进行安全攻防测试以及防范恶意攻击, 请勿恶意使用下面介绍技术进行非法网络攻击,作者不为此承担任何责任,所有渗透都需获取授权,谨防从入门到入狱!

【中华人民共和国网络安全法】: http://www.npc.gov.cn/npc/c30834/201611/270b43e8b35e4f7ea98502b6f0e26f8a.shtml


0x00 前言简述

描述: 千呼万唤始出来,网安等保系列之Linux系统主机安全加固文章又更新了,由于作者的【安全开发运维】运维学习答疑群(PS: 公众号回复【微信交流群】即可进入哟)的小伙伴们企业中需要针对CentOS8服务器系统进行安全加固,以通过等保3级的主机安全合规检查,作为群主大大的我必须响应群员们的号召,在工作之余,边带娃,边编写该系统加固脚本, 遂在昨日完成该脚本的编写以及验证,可谓是真不容易呀。

c92749c808556928321483d9f70e32cc.jpeg

原文地址:网安等保 | 主机安全之CentOS8服务器配置优化与安全加固基线文档脚本分享当前企业中还有大量的服务器上使用了CentOS8服务器操作系统,为满足于企业中需要针对CentOS8系统进行安全加固的道友,文章脚本中实现了CentOS8 系统基础运维配)、安全加固配置、系统优化配置等方法,若不全之处也希望大佬们多多指正。https://mp.weixin.qq.com/s?__biz=MzIwNDA3ODg3OQ==&mid=2648002806&idx=1&sn=a449482c593bfa8f3915f1cd654095ca&chksm=8ee45a86b993d390cd9bd01ecc51ea4a82fd1395308fd295d15f1b7b08da75b024e740a09613#rd

当前由于 CentOS Linux/Stream 8 即将停止更新维护(EOL)了,作者已经在2021年底基本将企业中CentOS服务器上的业务进行迁移,我是迁移到了Ubuntu和KylinOS 银河麒麟国产Linux系统之上, 当然网上也有其他迁移方案,此处不再累述。

虽然 CentOS 8 生命周期即将结束了,但是企业中还是有大量的服务器机器上使用了CentOS8服务器操作系统,所以本文也满足于企业中需要针对CentOS8系统进行安全加固的道友,也帮助Liunx初学者快速配置一个安全的CentOS8服务器(加固脚本也是值得学习借鉴的哟),文章脚本中实现了CentOS8 系统基础运维配、安全加固配置、系统优化配置等方法,若不全之处也希望大佬们多多指正。

请在【全栈工程师修炼指南】公众号中回复【CentOS8安全加固】或【10006】关键字,获取演示视频、CentOS8安全加固文档和脚本(本文末尾获取下载链接)。

温馨提示: 此处为了防止伸手党,以及尊重作者编写脚本及实践成果,象征性的设置为收费合集(#网络安全攻防等保 点击查看 ),付费后可直接联系作者发加固脚本或者文章末尾获取下载链接,希望大家理解支持!

此处作者我,已经将其写成一个Shell项目,各位看官可以直接运行加固,大大的节省了我们运维人的时间,最后我会将CentOS8安全加固shell脚本,下载链接放在文章末尾, 以供各位看友使用实践参考,若有错误欢迎在【全栈工程师修炼指南】公众号留言。

## 名称: Start::Help 
## 用途:程序执行帮助命令
## 参数: 无
Start::Help ()
{
  echo -e "\nUsage: $0 [--start ] [--network] [--function] [--clear] [--version] [--help]"
  echo -e "Option: "
  echo -e "  --start            Start System initialization and security reinforcement."
  echo -e "  --network          Configure the system network and DNS resolution server."
  echo -e "  --function         PCall the specified shell function."
  echo -e "  --clear            Clear all system logs, cache and backup files."
  echo -e "  --info             Print System information and exit."
  echo -e "  --version          Print version and exit."
  echo -e "  --help             Print help and exit."
  echo -e "\nMail bug reports or suggestions to <[email protected]> or pull request (pr)."
  echo -e "current version : ${VAR_VERSION}"
  log::warning "温馨提示:使用前先请配置机器上网环境及其在config文件夹中的CentOS8.conf配置进行对应配置."
  exit 0
}

a1781fd05c75cfb68354b68d8d172358.png

此加固脚本的使用方法,请参照演示视频:

# 常用命令示例:
# 进行自动安全加固
./CentOS8-InitializeReinforce --start

# 使用function参数指定优化加固
./CentOS8-InitializeReinforce  --function

# 使用info参数打印系统相关信息
./CentOS8-InitializeReinforce  --info

在实践前,也请大家多多支持我的【#网络安全攻防等保(点击查看)】付费合集,后续将推出更多网安入门学习、企业安全实践与漏洞挖掘实践文章, 也将持续更新CentOS7安全加固实践文章以及安全加固脚本。

温馨提示: 针对于 Ubuntu 22.04 以及 KylinOS V10 服务器操作系统,作者都编写对应安全加固实践文章,有想了解的童鞋可以访问如下文章链接:

好了废话不多说,此处我将本文其分为三个章节,没小节包含了配置Shell脚本片段:
第一个章节主要针对 CentOS8 系统初始化运维配置实践,
第二个章节主要针对 CentOS8 系统内核参数及服务优化实践,
第三个章节主要针对 CentOS8 系统安全加固实践,


0x01 主机系统配置

重要提示: 在线上生产环境中,进行系统安全加固操作时,请注意备份操作文件,以便于异常时及时回退。

重要提示: 在线上生产环境中,进行系统安全加固操作时,请注意备份操作文件,以便于异常时及时回退。

重要提示: 在线上生产环境中,进行系统安全加固操作时,请注意备份操作文件,以便于异常时及时回退。

1.主机IP和网关地址设置

描述: 一台新安装的主机必须配置IP地址才能方便我们通过远程连接,所以第一步肯定是把网络打通,主要根据配置的IP地址与网络地址环境变量进行对应设置,例如下述部分脚本片段。

示例片段:

# Modify the IP/MASK and Gateway
VAR_NETINTERFACE=ens192
VAR_IP=192.168.4.201/24
VAR_GATEWAY=192.168.4.1

cp -a /etc/sysconfig/network-scripts/* /tmp

if [ ! -f /opt/init/ ];then 
  mkdir -vp /opt/init/
sudo tee /opt/init/network.sh <<'EOF'
#!/bin/bash
# @Author: WeiyiGeek
# @Description: Configure CentOS Linux/Stream 8 Server Network
# @E-mail: [email protected]
# @Blog: https://www.weiyigeek.top
if [[ $# -lt 4 ]];then
  echo "Usage: $0 NetInterface IP/NETMASK GATEWAY DNS"
  echo "Example: $0 ens192 192.168.12.12/24 192.168.12.1 223.6.6.6"
  echo "@Author: WeiyiGeek"
  echo "@Blog: https://blog.weiyigeek.top"
  exit
fi
echo "Setting Network interface card: ${1}, IP: ${2} , GATEWAY: ${3}"
CURRENT_IP=$(hostname -I | cut -f 1 -d " ")
CURRENT_GATEWAY=$(hostname -I | cut -f 1,2,3,4 -d ".")
CURRENT_FILE=/etc/sysconfig/network-scripts/ifcfg-${1}
CONFIG_IP=${2%%/*}
CONFIG_PREFIX=${2##*/}

echo "Original Network info: IP: ${CURRENT_IP} , GATEWAY: ${CURRENT_GATEWAY}"
echo "Setting Network interface card: ${1}, IP/NETMASK: ${2} , GATEWAY: ${3}, DNS: ${4}"

if [[ -f ${CURRENT_FILE} ]];then
  # 已存在网卡配置文件的情况下
  egrep -q "^\s*ONBOOT=.*$" ${CURRENT_FILE} && sed -ri "s/^\s*ONBOOT=.*$/ONBOOT=yes/" ${CURRENT_FILE}|| echo "ONBOOT=yes" >> ${CURRENT_FILE}
  egrep -q "^\s*BOOTPROTO=.*$" ${CURRENT_FILE} && sed -ri "s/^\s*BOOTPROTO=.*$/BOOTPROTO=static/" ${CURRENT_FILE}|| echo "BOOTPROTO=static" >> ${CURRENT_FILE}
  egrep -q "^\s*IPADDR=.*$" ${CURRENT_FILE} && sed -ri "s/^\s*IPADDR=.*$/IPADDR=${CONFIG_IP}/" ${CURRENT_FILE}|| echo "IPADDR=${CONFIG_IP}" >> ${CURRENT_FILE}
  egrep -q "^\s*PREFIX=.*$" ${CURRENT_FILE} && sed -ri "s/^\s*PREFIX=.*$/PREFIX=${CONFIG_PREFIX}/" ${CURRENT_FILE}|| echo "PREFIX=${CONFIG_PREFIX}" >> ${CURRENT_FILE}
  egrep -q "^\s*GATEWAY=.*$" ${CURRENT_FILE} && sed -ri "s/^\s*GATEWAY=.*$/GATEWAY=${3}/" ${CURRENT_FILE}|| echo "GATEWAY=${3}" >> ${CURRENT_FILE}
  egrep -q "^\s*DNS1=.*$" ${CURRENT_FILE} && sed -ri "s/^\s*DNS1=.*$/DNS1=${4}/" ${CURRENT_FILE}|| echo "DNS1=${4}" >> ${CURRENT_FILE}
else
  nmcli dev show ${1}
  nmcli conn add connection.id ${1}-staic connection.interface-name ${1} connection.autoconnect yes type Ethernet ifname ${1} ipv4.method manual ipv4.address ${2} ipv4.gateway ${3} ipv4.dns ${4} ipv4.ignore-auto-dns true
fi
sudo nmcli c reload

read -t 5 -p "Heavy load network card, It is recommended to enter N during initialization (Y/N): " VERTIFY
if [[ ${VERIFY:="N"} == "Y" || ${VERIFY:="N"} == "y" ]]; then
  sudo nmcli c up ${1}
  sudo nmcli d reapply ${1}
else
  echo "Please reload the network card manually, run sudo nmcli d reapply ${1}."
fi
EOF

# 权限赋予
sudo chmod +x /opt/init/network.sh
/opt/init/network.sh ${VAR_NETINTERFACE} ${VAR_IP} ${VAR_GATEWAY} ${VAR_DNS_SERVER}

2.主机DNS服务器地址配置

描述: 在完成系统主机的IP地址的配置后,便需要为主机配置私有DNS服务器或者公共的DNS服务器,以便解析内部或外部域名。

示例片段:

# Show  Script Execute result (Y/N)
VAR_VERIFY_RESULT=Y
# Modify the DNS server
# DNSPod: 119.29.29.29      Alidns: 223.5.5.5 223.6.6.6
# Google: 8.8.8.8 8.8.4.4   Cloudflare: 1.1.1.1 1.0.0.1
# Baidu: 114.114.114.114
# Internal : Your intranet domain name resolution server
VAR_DNS_SERVER=( "223.5.5.5" "114.114.114.114"  "192.168.4.254")

cp /etc/systemd/resolved.conf /tmp

local flag
# 此处配置的是阿里云IPV4 DNS与阿里云IPV6 DNS
sed -i -e "s/^#FallbackDNS=.*/FallbackDNS=223.6.6.6 2400:3200::1 2400:3200:baba::1/" -e "s/^#DNSSEC=.*/DNSSEC=allow-downgrade/" -e "s/^#DNSOverTLS=.*/DNSOverTLS=opportunistic/" /etc/systemd/resolved.conf

# 此处配置DNSPod 以及 阿里云 DNS
for dns in ${VAR_DNS_SERVER[@]};do 
  grep -q "${dns}" /etc/systemd/resolved.conf 
  if [ $? != 0 ];then  
    echo -e "\033[32mnameserver ${dns} \033[0m]"
    sed -i "/#DNS=/i DNS=${dns}" /etc/systemd/resolved.conf;
  fi
done

# 重启相关服务
systemctl restart systemd-resolved && systemctl enable systemd-resolved

# 创建解析文件映射
find /etc/resolv.conf -delete
ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf

if [[ ${VERIFY:="N"} == "Y" || ${VERIFY:="N"} == "y" ]]; then
  echo "/etc/resolv.conf"
  grep -Ev '^#|^$' /etc/resolv.conf | uniq
  echo "/etc/systemd/resolved.conf"
  grep -Ev '^#|^$' /etc/systemd/resolved.conf | uniq
fi

3.主机系统软件镜像源配置

描述: 使用国外的操作系统,例如CentOS、Ubuntu、Debian、Alpine等操作系统,通常为了加快Linux系统中下载安装软件的速度,我们是需要配置软件镜像源,但此处为了防止小伙伴们更改过该镜像源,我也将各发行版镜像源配置罗列出来。

示例片段:

# 1.获取操作系统发行版
local release
# release=$(grep -e "^VERSION=" /etc/os-release | cut -f 2 -d "=" | tr -d '[:punct:][:space:]')
release=$(cat /etc/redhat-release)
echo -e "\033[32m[${COUNT}] ${release} \033[0m"

# 2.验证CentOS8镜像仓库文件,由于其发行版本有差异此处将Stream版本以及原始版本都进行验证。
# 注意:在2022年1月31日,CentOS 团队从官方镜像中移除CentOS8的所有包,针对过期源设置如下。
# 直接使用yum下载会出现ERROR: Cannot prepare internal mirrorlist: No URLs in mirrorlist
# 故需要设置yum源,否则无法提供下载。
# CentOS 过期源(centos-vault):https://developer.aliyun.com/mirror/centos-vault
# CentOS arm源(centos-altarch):https://developer.aliyun.com/mirror/centos-altarch/
# CentOS Stream源(centos-stream):https://developer.aliyun.com/mirror/centos-stream
# CentOS debuginfo源(centos-debuginfo):https://developer.aliyun.com/mirror/centos-debuginfo/
local repo_name
if [ -f /etc/yum.repos.d/CentOS-Stream-BaseOS.repo ];then
  repo_name="CentOS-Stream-BaseOS.repo"
  echo -e "\033[32m[${COUNT}] 备份 /etc/yum.repos.d/${repo_name} 文件中...... \033[0m"
  # rename '.repo' '.repo.bak' /etc/yum.repos.d/*.repo
  cp /etc/yum.repos.d/${repo_name} ${BACKUPDIR}
  sed -i -e 's|mirrorlist=|#mirrorlist=|g' -e 's|#baseurl=http://mirror.centos.org|baseurl=https://mirrors.aliyun.com|g' /etc/yum.repos.d/CentOS-*
fi

if [ -f /etc/yum.repos.d/CentOS-Base.repo ];then
  repo_name="CentOS-Base.repo"
  echo -e "\033[32m[${COUNT}] 备份 /etc/yum.repos.d/${repo_name} 文件中...... \033[0m"
  rename '.repo' '.repo.bak' /etc/yum.repos.d/*.repo
  cp /etc/yum.repos.d/${repo_name}.bak ${BACKUPDIR}
  # centos8(centos8官方源已下线,建议切换centos-vault源)
  curl -o /etc/yum.repos.d/${repo_name} https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo
  # 删除"mirrors.cloud.aliyuncs.com" 及 "mirrors.aliyuncs.com" 字符串所在的行.
  sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/${repo_name}
  # sed -i 's/releasever\//releasever-stream\//g' /etc/yum.repos.d/${repo_name}
fi

# 清理缓存并创建仓库元数据
sudo dnf clean all && sudo yum makecache

# Centos 8 - Epel 阿里云镜像快速配置
yum install -y epel-release 
sed -i -e 's|metalink=https://mirrors.fedoraproject.org|#metalink=https://mirrors.fedoraproject.org|g' -e 's|#baseurl=https://download.example/pub|baseurl=https://mirrors.aliyun.com|g'  /etc/yum.repos.d/epel.repo
dnf repolist epel -v

read -t ${VAR_VERIFY_TIMEOUT} -p "Please input, Perform system software update and upgrade. (Y/N) : " VERIFY
if [[ ${VERIFY:="N"} == "Y" || ${VERIFY:="N"} == "y" ]]; then
  sudo dnf update -y && sudo dnf upgrade -y
fi

PS: 在2022年1月31日,CentOS 团队从官方镜像中移除CentOS8的所有包, 所以网上设置CentOS8的镜像源地址有变化,建议通过镜像站获取,例如 阿里云的镜像地址:https://developer.aliyun.com/mirror/centos

完整原文地址:网安等保 | 主机安全之CentOS8服务器配置优化与安全加固基线文档脚本分享

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u013072756/article/details/131255888

智能推荐

centos搭建Prometheus基础_centos安装prometheus-程序员宅基地

文章浏览阅读730次,点赞16次,收藏10次。centos搭建prometheus基础_centos安装prometheus

Oracle 数据库加密-程序员宅基地

文章浏览阅读1.1k次。数据加密动态数据(data in motion)和静态数据(data at rest),除了手动加密,其他的加密都需要oracle企业版的高级加密(额外收费——)1 静态数据加密Example:1 创建一个新的表空间createtablespacein_the_cleardatafile'f:\mydb\in_the_clear.dbf'siz..._oracle數據庫 number類型加密

NINE——Django项目之新闻搜索功能实现(搜索功能分析;全文搜索引擎elasticsearch介绍;docker介绍及安装(1)-程序员宅基地

文章浏览阅读629次,点赞5次,收藏17次。当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。缺点:数据量比较大的情况下,查询效率极低。优点:专业的全文检索引擎,效率高。

Linux-Ubuntu c语言程序编译环境设置以及安装Dev-c++编写基于辗转相除法的十进制数转二进制数的C++程序_devc++ linux-程序员宅基地

文章浏览阅读1k次。1.下载VMware虚拟机点击开始下载VMware虚拟机,VMware的版本为17.0.0,需要自行购买或查找对应的激活码。2.下载Ubuntu系统因为Ubuntu官方网站在海外,下载速度极慢,所以推荐选择国内镜像网站以快速下载Ubuntu系统,例如阿里云平台,点击开始下载Ubuntu18.04.6镜像版本。3.VMware虚拟机安装Ubuntu系统根据VMware安装提示可自行完成Ubuntu系统的安装或者自行查找教程,这里便不过多解释。4.Dev-c++的安装进入。_devc++ linux

为myeclipse分配更大的内存_myeclipse扩大内存-程序员宅基地

文章浏览阅读1.4w次,点赞3次,收藏14次。在进行开发大项目时,常常会遇见开发工具卡顿的情况 ,大多数都是因为内存不够的原因造成的,今天学习了为MyEclipse分配更大内存的方法。是通过修改配置文件实现的。一:修改myeclipse.ini文件首先找到MyEclipse的安装目录 打开myeclipse的配置文件 如图选中文件 文档最后三行可以更改数字 根据本机自带物理内存的大小 采用1/4或者1/3适当修改最需要注意的是:在修改完成后_myeclipse扩大内存

java crm 系统 进销存 springmvc SSM项目项目源码-程序员宅基地

文章浏览阅读68次。统介绍:1.系统采用主流的 SSM 框架 jsp JSTL bootstrap html5 (PC浏览器使用)2.springmvc +spring4.3.7+ mybaits3.3 SSM 普通java web(非maven, 附赠pom.xml文件) 数据库:mysql3.开发工具:myeclipse eclipse idea 均可, 没有限制. 我这边myeclipse 2014 导出..._超市进存销库存销售系统源代码ssm javaweb 感兴趣的话点“我想要”和我私聊吧~

随便推点

C#连接SQLite的...方法_app.config <dbproviderfactories> sqlite-程序员宅基地

文章浏览阅读1.3k次。1 SQLite简介  SQLite,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysq_app.config sqlite

如何利用 XMind 高效学习?_学习xmind软件体会-程序员宅基地

文章浏览阅读202次。一、合理分配每日的时间和精力。高效源于精力的有效管理。合理分配学习和娱乐的时间,在专注时集中注意力,在娱乐时尽情放松。XMind 是时间管理神器,把预习、复习、小组作业、社团等事项安排得明明白白。用 XMind 批量整理待办事项调整主题顺序合理安排优先级用快速样式划去完成的任务掌控时间,把握节奏,规划自己的充实生活,达成更多成就。二:高效记录课堂笔记,课上内容全掌握。除了做好预习准备外,高效上课很重要的一点在于,既要全神贯注 follow 老师的思路,还要聪明地记录笔记。用 XMin_学习xmind软件体会

定义“异常类”处理异常_创建一个exception类的子类,代表除数为0异常-程序员宅基地

文章浏览阅读667次。定义异常类处理异常类似上一个博客中的例子输入一个学生的考试总分及科目数,计算并输出该学生的平均分。通过定义异常类的方式来处理除数为0和输入为负的异常。#include <iostream>using namespace std;//定义除数为0异常类class ZeroException{ private: char* msg; public: Zero..._创建一个exception类的子类,代表除数为0异常

马斯克推崇的第一性原理,究竟有多重要?-程序员宅基地

文章浏览阅读2.7k次。职场&认知洞察丨 作者/findyi这是findyi公众号的第79篇原创文章最近,第一性原理这个原本离大众很远的物理概念,被媒体炒的火热。第一性原理最开始是由亚里士多德提出..._马斯克 第一性原理 带电池 成本

多线程详解-程序员宅基地

文章浏览阅读49次。2019独角兽企业重金招聘Python工程师标准>>> ...

微信支付服务器请求错误,windows系统下微信支付调用出错 msxml3.dll-程序员宅基地

文章浏览阅读2.6k次。今天来个用户说微信支付功能出现故障。点击时候时候出现服务器故障500。检查步骤:这些先开起来了详细错误提示后出现提示:msxml3.dll问题为了排除是不是msxml3.dll问题我们就把他当作有问题重新注册一次看。运行中执行:regsvr32%windir%\system32\msxml3.dll/s发现没问题注册成功。那问题就不是出在这里了。检查了服务器方面都没有问题。何况同一台服务器上还..._regsvr32 %windir%\system32\msxml3.dll

推荐文章

热门文章

相关标签