centos 安全配置基线
centos 安全配置基线
- 一、系统防火墙及SE系统
- 1. 系统自带防火墙iptables(Centos6)
- 基础命令
- 查看防火墙设置
- 使用命令查看防火墙设置
- 使用命令清除防火墙
- 设置防火墙策略
- 开放指定的端口
- 屏蔽IP
- 2. 系统自带防火墙firewalled(Centos7)
- 基础命令
- 3. 开启SELinux服务(Centos7)
- 查看命令
- 二、身份鉴别
- 1.设置密码复杂度策略
- 2.设置登录策略
- (1)修改`/etc/pam.d/system-auth`,修改复杂度策略。
- (2)记录用户登录失败次数并锁定
- (3)如果启用了SSH远程登录,可以通过命令看配置
- 三、访问控制
- 1.设置root用户ssh登录策略
- 禁止root用户远程ssh登录
- 2.禁止无用的系统用户登录
- 3.检查是否存在除root以外的UID=0的用户
- 4.允许或禁止用户或组通过ssh登录
- 5.检查新建文件系统权限默认值
- 6.查看重点文件权限是否合理
- 四、安全审计
- 1. 查看进程运行是否正常
- 2.系统默认日志记录范围是否覆盖
- 3. 查看系统登录日志
- 五、入侵防范
- 1. 查看自身入侵可疑日志
- 2. 最小安装原则
- 3. 检查运行服务
- 4. 检查服务运行情况
- 六、资源控制
- 1.TCP Wrappers程序管控
- 2.设置登录超时时间
- 3. 设置普通用户最大进程数、CPU、内存等
- 4.适当关闭外设-U盘、光盘等
CentOS 是一个广泛使用的操作系统,为了确保系统的安全性,需要遵循一系列的安全基线。以下是详细的 CentOS 安全基线配置建议:
一、系统防火墙及SE系统
1. 系统自带防火墙iptables(Centos6)
防火墙会从上至下的顺序来读取配置的策略规则,在找到匹配项后就立即结束匹配工作并去执行匹配项中定义的行为(即放行或阻止)。如果在读取完所有的策略规则之后没有匹配项,就去执行默认的策略。
一般而言,防火墙策略规则的设置有两种:一种是“通”(即放行),一种是“堵”(即阻止)。当防火墙的默认策略为拒绝时(堵),就要设置允许规则(通),否则谁都进不来;如果防火墙的默认策略为允许时,就要设置拒绝规则,否则谁都能进来,防火墙也就失去了防范的作用
基础命令
- 启动:
service iptables start - 关闭:
service iptables stop - 查看状态:
iptables -V - 重启 :
service iptables restart
查看防火墙设置
主要分为5种规则类型数据包:
进行路由选择前处理数据包(PREROUTING);
处理流入的数据包(INPUT);
处理流出的数据包(OUTPUT);
处理转发的数据包(FORWARD);
进行路由选择后处理数据包(POSTROUTING)
使用命令查看防火墙设置
iptables -L
使用命令清除防火墙
iptables -F
设置防火墙策略
使用iptables命令进行添加删减。
开放指定的端口
iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT #允许本地回环接口(即运行本机访问本机)
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT #允许已建立的或相关连的通行
iptables -A OUTPUT -j ACCEPT #允许所有本机向外的访问
iptables -A INPUT -p tcp --dport 22 -j ACCEPT #允许访问22端口
iptables -A INPUT -p tcp --dport 80 -j ACCEPT #允许访问80端口
iptables -A INPUT -p tcp --dport 21 -j ACCEPT #允许ftp服务的21端口
iptables -A INPUT -p tcp --dport 20 -j ACCEPT #允许FTP服务的20端口
iptables -A INPUT -j reject #禁止其他未允许的规则访问
iptables -A FORWARD -j REJECT #禁止其他未允许的规则访问
屏蔽IP
iptables -I INPUT -s 123.45.6.7 -j DROP #屏蔽单个IP的命令
iptables -I INPUT -s 123.0.0.0/8 -j DROP #封整个段即从123.0.0.1到123.255.255.254的命令
iptables -I INPUT -s 124.45.0.0/16 -j DROP #封IP段即从123.45.0.1到123.45.255.254的命令
iptables -I INPUT -s 123.45.6.0/24 -j DROP #封IP段即从123.45.6.1到123.45.6.254的命令
或者直接在路径/etc/sysconfig下,对文件iptables编辑。
配置完成记得重启防火墙命令
2. 系统自带防火墙firewalled(Centos7)
基础命令
- 启动:
systemctl start firewalld - 重启:
systemctl restart firewalld - 关闭:
systemctl stop firewalld - 查看状态:
systemctl status firewalld - 开机禁用 :
systemctl disable firewalld - 开机启用 :
systemctl enable firewalld
前台可视化界面-防火墙设置也可以设置
3. 开启SELinux服务(Centos7)
SELinux(Security-Enhanced Linux)是美国国家安全局在Linux开源社区的帮助下开发的一个强制访问控制(MAC,Mandatory Access Control)的安全子系统。RHEL7系统使用SELinux技术的目的是为了让各个服务进程都受到约束,使其仅获取到本应获取的资源。
简单概述下基本的三种安全访问控制类型
- MAC(强制访问控制类型)
- DAC(自主访问控制类型) --通常就是ACL策略居多
- RABC(基于角色访问控制类型)
安全性MAC>RABC>DAC
SELinux 有三种工作模式,分别是
enforcing:强制模式。违反 SELinux 规则的行为将被阻止并记录到日志中,并且自动拦截
permissive:宽容模式。违反 SELinux 规则的行为只会记录到日志中,只告警不拦截。一般为调试用。
disabled:关闭 SELinux。不拦截不告警。
配置文件路径:/etc/selinux,通过查看config,了解目前运行状态
查看命令
cat config
或者使用命令进行查询
[root@localhost selinux]# getenforce
Enforcing
[root@localhost selinux]#
临时修改命令(不用重启机器):[root@localhost selinux]# setenforce 0 --0设为宽容莫斯
[root@localhost selinux]# getenforce
Permissive
[root@localhost selinux]# setenforce 1 --1设为强制模式
[root@localhost selinux]# getenforce
Enforcing
[root@localhost selinux]#
二、身份鉴别
1.设置密码复杂度策略
通过设置/etc/login.defs文件,进行密码策略设置
PASS_MAX_DAYS 90
#密码最大有效期
PASS_MIN_DAYS 2
#两次修改密码的最小间隔时间
PASS_MIN_LEN 12
#密码最小长度
PASS_WARN_AGE 7
#密码过期前多少天开始提示
上述对新增用户有效,如需修改现有策略,需使用
chage命令
2.设置登录策略
使用cracklib模块设置密码复杂度
通过命令
rpm -qa|grep cracklib --查看服务是否运行
(1)修改/etc/pam.d/system-auth,修改复杂度策略。
centos 6 找到 password requisite pam_cracklib.so这么一行替换成如下:
password requisite pam_cracklib.so retry=3 difok=3 minlen=12 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1
centos 7 找到password requisite pam_pwquality.so这么一行替换成如下:
password requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type= minlen=12 lcredit=-1 ucredit=-1 dcredit=-1 ocredit=-1 enforce_for_root
参数含义:
#retry 允许重试的次数
#difok=N:新密码必需与旧密码不同的位数 difok=3 新密码必须与旧密码有3位不同
#ucredit=N 当N>0时表示新密码中大写字母出现的最多次数;当N<0时表示新密码中大写字母出现最少次数
#lcredit=N 当N>0时表示新密码中小写字母出现的最多次数;当N<0时表示新密码中小写字母出现最少次数
#dcredit=N: N >= 0:密码中最多有多少个数字;N < 0密码中最少有多少个数字. dcredit=-1 密码中最少有1个数字
#ocredit=N:特殊字母的个数 ocredit=-1 密码中至少有1个特殊字符
#enforce_for_root 确保即使是root用户设置密码,也应强制执行复杂性策略。
(2)记录用户登录失败次数并锁定
在/etc/pam.d/system-auth中“#%PAM-1.0”下面一行加入
auth required pam tally2.so onerr=fail deny=10 no magic root unlock time=300
注意:一定要加在#%PAM-1.0下面一行
参数说明:
deny[=n]最大尝试次数,超过锁定unlock_time解锁时间even_deny_root同时限制root用户root_unlock_time[=n]设定root锁定后,多少时间解锁quiet不对已锁定用户发出提示消息
root策略建议谨慎设置,否则很容易导致无法解锁root
设置了unlock_time会自动解锁。否则需要手动解锁。
运行命令pam_tally2 -u 用户 -r
(3)如果启用了SSH远程登录,可以通过命令看配置
more /etc/ssh/sshd_config
设置LoginGraceTime 15m #账号锁定时间15分钟
MaxAuthTries 3 #账号锁定阈值
三、访问控制
1.设置root用户ssh登录策略
禁止root用户远程ssh登录
通过修改 /etc/ssh/sshd_config,将参数修改#PermitRootLogin no
重启ssh服务
service sshd restart
2.禁止无用的系统用户登录
通过命令 usermod -s /sbin/nologin 用户 --禁止用户远程登录
通过命令 usermod -s /bin/bash 用户名 --恢复允许用户远程登录
查看/etc/passwd 表示用户是否可以登录。
3.检查是否存在除root以外的UID=0的用户
通过命令 awk -F: '($3==0){print $1}' /etc/passwd --输出当前uid=0的用户
4.允许或禁止用户或组通过ssh登录
设置ssh用户白名单、黑名单
vi /etc/ssh/sshd_config
增加用户(允许、白名单)
AllowUsers 用户1 用户2
或
添加用户组
AllowGroups 组1 组2
PS:取交集,意思两个同时允许才可以。其他禁止
取消用户(禁止、黑名单)
DenyUsers 用户1
或
DenyGroups 组1
PS:取并集,有一个设置了不允许都会不允许。
5.检查新建文件系统权限默认值
通过umask,权限掩码值检查当前用户新建文件、文件夹默认权限。root用户正常是022。
022的意思是,用文件夹最大权限777(rwxrwxrwx)-当前设置权限755(rwx-r-xr-x) = 022,为什么文件夹默认配置了执行-x权限,因为文件夹没执行的话进不去,就没意义了。
而文件权限默认都没有执行,所以就是默认最大666(rw-rw-rw)-644(rw-r–r–=002)。
普通用户默认值是002
6.查看重点文件权限是否合理
如/etc/shadow /etc/passwd(744)
/etc/group
/etc/inittab
/etc/lilo.conf
/etc/grub.conf
/etc/xinetd.conf
/etc/crontab
/etc/securetty
/etc/rc.d/init.d
/var/log/messages
/var/log/wtmp
/var/run/utmp
/var/spool/cron
/usr/sbin/init
/etc/login.defs(644)
/etc/*.conf
/sbin/bin
/etc/init.d
/etc/xinetd.d 等等
四、安全审计
本地安全审计日志功能是否正常打开运行
安装第三方工具等
1. 查看进程运行是否正常
[root@localhost selinux]# ps -ef |grep syslogd --查看进程服务情况
[root@localhost selinux]# ps aux|grep syslogd
[root@localhost selinux]# ps -ef|grep auditd --查看守护进程情况
2.系统默认日志记录范围是否覆盖
查看/etc/rsyslog.conf配置文件。
3. 查看系统登录日志
命令lastlog --查询登录用户、端口、时间等
命令last -x --显示系统关闭、用户登录和退出的历史
命令lastb --列出失败尝试的登录信息
五、入侵防范
能记录、检测到入侵行为,能记录入侵者ip、主机名、时间等。建议有条件安装第三方设备如HIDS、NIDS等。
1. 查看自身入侵可疑日志
通过查看日志,可疑识别非法访问或可疑的暴力破解。
more /var/log/secure | grep fail
2. 最小安装原则
3. 检查运行服务
命令service --status-all --检查是否有非必要服务,如ftp、smtp等
4. 检查服务运行情况
netstat-lp(查看开启服务)
netstat -an(查看开启的端口)
netstat-anlp(查看开启的端口及服务)
六、资源控制
1.TCP Wrappers程序管控
通过设置/etc/hosts.allow和/etc/hosts.deny文件
顺序:
1./etc/hosts.allow
2./etc/hosts.deny
3.以上都不符合,则放行
/etc/hosts.allow#ssh允许单个ip
sshd:192.168.220.1#ssh允许ip段
sshd:192.168.220.#telnet允许单个ip
in.telnetd:192.168.220.1#telnet允许ip段
in.telnetd:192.168.221.
/etc/hosts.deny
sshd:ALL
in.telnetd:ALL
#禁止相关服务
2.设置登录超时时间
通过命令查看cat /etc/profile |grep TMOUT
vi /etc/profile 添加export TMOUT=600 --600秒超时
3. 设置普通用户最大进程数、CPU、内存等
进入 /etc/security/limits.conf 文件下,
增加代码
roxy soft nproc 10240
roxy hard nproc 10240
roxy soft nofile 10240
roxy hard nofile 10240
注:roxy 为需要修改线程数的用户名,10240 为设置的进程数和文件数限制,可根据需要修改。
也可以用ulimit命令
4.适当关闭外设-U盘、光盘等
在vi /etc/modprobe.d/blacklist.conf里添加一行:
blacklist usb-storage
执行命令生效modprobe -r usb-storage
相关文章:
centos 安全配置基线
centos 安全配置基线 一、系统防火墙及SE系统1. 系统自带防火墙iptables(Centos6)基础命令查看防火墙设置使用命令查看防火墙设置使用命令清除防火墙设置防火墙策略开放指定的端口屏蔽IP 2. 系统自带防火墙firewalled(Centos7)基础…...
高级编程语言的基本语法在CPU的眼中是什么样的呢?
任何一门高级编程语言,就一定存在下面这几个语法元素 变量类型数组控制语句(条件,循环)运算符(算术运算,布尔运算,赋值运算,关系运算,位运算)函数 而本节探…...
Redis 性能优化:多维度技术解析与实战策略
文章目录 1 基准性能2 使用 slowlog 优化耗时命令3 big key 优化4 使用 lazy free 特性5 缩短键值对的存储长度6 设置键值的过期时间7 禁用耗时长的查询命令8 使用 Pipeline 批量操作数据9 避免大量数据同时失效10 客户端使用优化11 限制 Redis 内存大小12 使用物理机而非虚拟机…...
.netframwork模拟启动webapi服务并编写对应api接口
在.NET Framework环境中模拟启动Web服务,可以使用几种不同的方法。一个常见的选择是利用HttpListener类来创建一个简单的HTTP服务器,或者使用Owin/Katana库来自托管ASP.NET Web API或MVC应用。下面简要介绍Owin/Katana示例代码。这种方法更加灵活&#x…...
MongoDB 学习指南与资料分享
MongoDB学习资料 MongoDB学习资料 MongoDB学习资料 在数据爆炸的当下,MongoDB 作为非关系型数据库的佼佼者,以其独特优势在各领域发光发热。无论是海量数据的存储,还是复杂数据结构的处理,MongoDB 都能轻松应对。接下来…...
【Azure 架构师学习笔记】- Azure Function (2) --实操1
本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Function 】系列。 接上文【Azure 架构师学习笔记】- Azure Function (1) --环境搭建和背景介绍 前言 上一文介绍了环境搭建,接下来就在本地环境下使用一下。 环境准备 这里我下载了最新的VS studio&…...
扫描深度?滤光片和偏振片区别?
扫描深度 https://www.shining3d.cn/chike/kousao/aoralscan-wireless.html 是指扫描仪能够准确捕捉和测量的最大距离范围。这一参数对于不同类型的三维扫描仪和应用场景非常重要,具体含义包括: 扫描范围 定义: 扫描深度通常指从扫描仪到被扫描物体表…...
HJ4 字符串分隔(Java版)
一、试题地址 字符串分隔_牛客题霸_牛客网 二、试题内容 描述 对于给定的由小写字母和数字混合构成的字符串 s ,你需要按每 8 个字符换一行的方式书写它,具体地: 书写前 8 个字符,换行;书写接下来的 88 个字符&am…...
【脑机接口数据处理】matlab读取ns6 NS6 ns5NS5格式脑电数据
文章目录 MATLAB函数openNSx详解:轻松读取NSx文件函数概述下载文件基本用法注意事项示例 结论 MATLAB函数openNSx详解:轻松读取NSx文件 在神经科学和生物医学工程领域,处理神经信号数据是一项常见且重要的任务。NSx文件格式是一种用于存储神…...
用C++实现一个基于模板的观察者设计模式
观察者模式 定义 观察者模式(Observer Pattern)是一种行为型设计模式,用于定义对象间的一对多依赖关系,使得当一个对象状态发生变化时,其所有依赖它的对象都会收到通知并自动更新。 核心概念 角色定义 Subject(被观察者): 持有观察者列表,维护观察者的注册和移除。 …...
【华为路由/交换机的ftp文件操作】
华为路由/交换机的ftp文件操作 PC:10.0.1.1 R1:10.0.1.254 / 10.0.2.254 FTP:10.0.2.1 S1:无配置 在桌面创建FTP-Huawei文件夹,里面创建config/test.txt。 点击上图中的“启动”按钮。 然后ftp到server,…...
微信小程序 实现拼图功能
微信小程序 实现拼图 效果示例功能描述代码示例 效果示例 微信小程序 碎片拼图 功能描述 在微信小程序中,实现一个简单的拼图小游戏。用户需要将四张碎片图片拖动到目标图片的正确位置,具体功能如下: 拖动功能: 用户可以通过手指…...
深度学习项目--基于LSTM的火灾预测研究(pytorch实现)
🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 前言 LSTM模型一直是一个很经典的模型,这个模型当然也很复杂,一般需要先学习RNN、GRU模型之后再学,GRU、LSTM的模型讲解将…...
AI时代下 | 通义灵码冲刺备战求职季
AI时代下 | 通义灵码冲刺备战求职季 什么是通义灵码使用智能编程助手备战求职靠谱吗体验心得 AI时代下,备战求职季有了不一样的方法,使用通义灵码冲刺备战求职季,会有什么样的体验? 什么是通义灵码 在开始话题之前,首…...
当comfyui-reactor-node 安装失败urllib.error.HTTPError: HTTP Error 403: Forbidden解决方法
comfyUI 节点comfyui-reactor-node 安装 python install 时 报错 urllib.error.HTTPError: HTTP Error 403: Forbidden 如下: (xxx) xxxxxxx:~/sdb/Q/ComfyUI/custom_nodes/comfyui-reactor-node$ python install.py Traceback (most recent call last): File …...
SSE 实践:用 Vue 和 Spring Boot 实现实时数据传输
前言 大家好,我是雪荷。最近我在灵犀 BI 项目中引入了 SSE 技术,以保证图表的实时渲染,当图表渲染完毕服务端推送消息至浏览器端触发重新渲染。 什么是 SSE? SSE 全称为 Server-Send Events 意思是服务端推送事件。 SSE 相比于 …...
TouchGFX学习笔记(一)
配置请参考链接:TouchGFX超低配置移植教程-CSDN博客 一,显示配置 1.适当增加堆栈大小 2.适当增大缓冲大小 双重缓冲消除了任何撕裂的风险,无论渲染下一帧需要多长时间,因为TfT控制器,例如,总是可以访问最…...
Java算法 二叉树入门 力扣简单题相同的树 翻转二叉树 判断对称二叉树 递归求二叉树的层数
目录 模版 先序遍历 中序遍历 后序遍历 力扣原题 相同的二叉树 力扣原题 翻转二叉树 遍历树的层数 题目 静态变量 核心逻辑 模版 // 二叉树public static class Node{public int value;public Node left;public Node right;public Node(int v) {valuev;}} 先序遍历 …...
如何将 session 共享存储到 redis 中
文章目录 一. 分布式 session 登录1.1 什么是分布式?1.2 Session 共享1.3 为什么服务器 A 登录后,请求发到服务器 B,不认识该用户?1.4 共享存储 二. Session 共享实现Redis三. 测试session共享四. cookie设置4.1 前端4.2 后端 一.…...
vue3学习三
五 计算属性 定义 选项式 export default {data(){return {num:1}},computed:{num1(){this.num1}} } 组合式 import {ref,computed} from vuelet numref(0); //仅读 let num1 computed(()>{return num.value1 }) 计算时依赖的变量数据发生变化,则计算属性…...
【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...
微信小程序 - 手机震动
一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注:文档 https://developers.weixin.qq…...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...
【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...
ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...
使用LangGraph和LangSmith构建多智能体人工智能系统
现在,通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战,比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...
JS手写代码篇----使用Promise封装AJAX请求
15、使用Promise封装AJAX请求 promise就有reject和resolve了,就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...
一些实用的chrome扩展0x01
简介 浏览器扩展程序有助于自动化任务、查找隐藏的漏洞、隐藏自身痕迹。以下列出了一些必备扩展程序,无论是测试应用程序、搜寻漏洞还是收集情报,它们都能提升工作流程。 FoxyProxy 代理管理工具,此扩展简化了使用代理(如 Burp…...
使用homeassistant 插件将tasmota 接入到米家
我写一个一个 将本地tasmoat的的设备同通过ha集成到小爱同学的功能,利用了巴法接入小爱的功能,将本地mqtt转发给巴法以实现小爱控制的功能,前提条件。1需要tasmota 设备, 2.在本地搭建了mqtt服务可, 3.搭建了ha 4.在h…...
设计模式-3 行为型模式
一、观察者模式 1、定义 定义对象之间的一对多的依赖关系,这样当一个对象改变状态时,它的所有依赖项都会自动得到通知和更新。 描述复杂的流程控制 描述多个类或者对象之间怎样互相协作共同完成单个对象都无法单独度完成的任务 它涉及算法与对象间职责…...
