安全加固?别跟我谈原则,先问问你的系统“扛不扛揍”!
安全加固,听起来像是在给脆弱的系统穿上盔甲。但别忘了,盔甲再硬,也得看里面的人行不行!那些所谓的“安全方案原则”,真能保证你的服务器固若金汤?我看未必!
- 版本升级?等等,你确定不是在挖坑? 升级,理论上是解决安全问题的最佳途径。但现实是,新版本Bug满天飞,兼容性问题层出不穷。升级一时爽,回头火葬场!我的建议是:升级需谨慎,小步快跑,灰度验证,别把鸡蛋放在一个篮子里。
- 端口服务?关关关,除了关还会啥? 关闭不必要的端口和服务,这操作没毛病。但问题是,你真的清楚哪些服务“无关”吗?别一刀切,把业务也给切没了!服务端口的“生死簿”,必须由业务部门和安全团队共同制定,别拍脑袋!
- 修改配置项?小心改出“幺蛾子”! 修改配置,看似简单,实则步步惊心。一个参数改错,轻则服务崩溃,重则系统瘫痪。修改前,务必备份!务必备份!务必备份! 重要的事情说三遍。
- 代码?别逗了,那是开发的事儿! 修改代码?那是开发工程师的活儿,安全团队最多提供建议。但说实话,开发工程师真的会听你的?安全左移,从需求阶段就介入,否则只能事后诸葛亮。
- ACL?临时抱佛脚,能管啥用? ACL策略,说白了就是“临时工”,只能应对一些突发情况。想靠它来保障安全?别做梦了!ACL只能作为辅助手段,不能作为核心安全策略。
- 设备防护?厂商说了算,你信吗? 部署设备防护,听起来高大上,但实际上,你对这些设备了解多少?厂商的话,听听就好,别全信!设备防护,需要结合实际情况,进行定制化配置,别盲目迷信“最佳实践”。
安全加固,测什么?测你的心跳!
加固方向?别迷路,找准你的“命门”!
- 账号认证:权限这玩意儿,给多了是祸害!
- 通信协议:明文传输?嫌命长?
- 补丁:亡羊补牢,犹未晚矣!
- 服务进程:僵尸进程,必须清理!
- Banner与自动注销:细节决定成败,别掉链子!
账号管理与认证授权:管好你的“钱袋子”!⭐
账号分级?别怕麻烦,安全第一!
目的:不同管理员,不同权限,防止“一锅端”。
# 创建多用途账号,密码必须复杂!
useradd username
passwd username
# 修改目录权限,别乱给!
chmod 750 dir
chown user:group dir
# 普通账户使用特定授权命令,sudo大法好!
sudo ifconfig
Sudo提权?悠着点,别玩脱了!
vim /etc/sudoers # 或者 命令visudo,强烈建议visudo,语法检查更友好!
testn localhost=NOPASSWD:ALL,usr/sbin/useradd,/usr/sbin/ifconfig # 允许testn免密执行useradd和ifconfig
testn localhost=NOPASSWD:ALL,!/usr/sbin/ifconfig # 允许testn免密执行所有命令,但禁止ifconfig
# jerry可以在本地使用useradd命令,注意路径!
jerry localhost=/usr/sbin/useradd
# 注释:
# testn:用户名
# localhost:主机名
# NOPASSWD:ALL:sudo时不需要密码,高危操作!
# !:不能执行什么命令
# usr/sbin/useradd,/usr/sbin/ifconfig:多个命令用逗号隔开
Sudo配置,务必谨慎!权限越小越好!
高权限文件?盯紧了,别被钻了空子!
过高的权限或在不应该时间段创建或修改的文件,都是潜在的风险。
find / -type f ( -perm -00007 ) -a -ctime -1 |xargs -I {} ls -lh {}
# -ctime:属性变更
# -mtime:内容修改
# atime:被访问
定期检查高权限文件,发现异常,立即处理!
默认账号?删删删,一个不留!
目的:删除系统不需要的默认账号、更改危险账号的默认shell变量,降低被利用的可能性。
# 删除/锁定多余用户与组
userdel -r username # 彻底删除用户
groupdel groupname # 删除组
passwd -l username # 锁定用户,使其无法登录
# 修改程序账号的登录shell,防止交互式登录
usermod -s /sbin/nologin username
默认账号,是黑客的最爱!
Root远程登录?想都别想!
目的:限制具备超级权限的用户远程登录,降低风险。
# 1.修改sshd配置文件
vim /etc/ssh/sshd_config
# 禁止root用户远程登录
PermitRootLogin no
# 2.重启sshd服务
systemctl restart sshd
Root远程登录,是自杀行为!
UID为0的用户?留着干嘛,赶紧清理!
目的:减少被越权使用的可能性。
# 1.检查哪些账户的UID为0
awk -F: '($3 == 0) { print $1 }' /etc/passwd
# 2.删除账户,或编辑passwd与shadow文件
userdel -r username
UID为0,意味着拥有Root权限!
安全日志?你的“眼睛”,时刻盯着!
# 显示所有登录用户的信息
last
# 显示登录失败的用户信息
lastb
# 安全日志,重点关注!
cat /var/log/secure
定期分析安全日志,发现异常,及时预警!
高权组的账户?查查查,一个都不能放过!
目的:检查是否有账号获取过高权限。
# 1.uid起始值:正常1000以后,特别关注少于1000
grep -v ^# /etc/login.defs |grep "^GID_MIN"|awk '{print $2}'
# 2.能登录系统用户的组id
awk -F: '$3>1000{print $1}' /etc/passwd |xargs -I {} grep {} /etc/group
# 3.能登录系统用户的用户id
grep -v "/sbin/nologin" /etc/passwd |awk -F : '{print $1}' | xargs -I {} grep {} /etc/group
权限最小化原则,时刻牢记!
密码生存周期?别太长,三个月一换!
目的:对于采用静态密码认证的设备,账户密码的生存周期不长于90天。
# 修改文件密码策略文件
vim /etc/login.defs
PASS_MAX_DAYS 90 # 最长使用期限
PASS_MIN_DAYS 0 # 最短使用期限
PASS_MIN_LEN 8 # 密码最小长度
PASS_WARN_AGE 7 # 最长期限到期前7天提醒更改密码
密码定期更换,防患于未然!
密码强度策略?必须有,必须强!
目的:规范使用高强度密码,延长被爆破的时间。
# 修改pam认证文件
vim /etc/pam.d/system-auth
# 添加、修改内容,注意顺序!
password requisite pam_cracklib.so try_first_pass retry=3 dcredit=-1 lcredit=-1 ucredit=-1 ocredit=-1 minclass=3 minlen=8
# 注释:
# try_first_pass:修改密码前输入当前密码
# local_users_only:本地用户
# retry:重试次数
# authtok_type:修改密码的提示内容
# dcredit=-1:至少一个数字
# lcredit=-1:至少一个小写字母
# ucredit=-1:至少一个大写字母
# ocredit=-1:至少一个特殊字符
# minclass=3:至少三个字符(大小写字母,数字,特殊字符)
# minlen=8:至少八位密码
# remember=3:防止使用前三次内设置过的密码
密码强度不够,等于裸奔!
CentOS 7密码复杂性?更严格,更安全!
# 文件位置 /etc/security/pwquality.conf
# 命令:authconfig,更方便!
authconfig --passminlen=8 --update # 密码最短8位
authconfig --enablereqlower --update # 包含一个小写
authconfig --enablerequpper --update # 包含一个大写
authconfig --enablereqdigit --update # 包含一个数字
authconfig --enablereqother --update # 包含一个字符
CentOS 7,密码策略更强大!
密码历史?记住了,别重样!
目的:防止被社工字典破解。
# 修改pam认证文件
vim /etc/pam.d/system-auth
# 添加、修改内容
password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok remember=5
密码历史记录,防止“旧瓶装新酒”!
账户锁定策略?连续失败,拉黑!
目的:防止被连续试探密码,降低爆破可能性。
vim /etc/pam.d/system-auth
# 加在注释文档后一行就行,连续6次失败,就拉黑
auth required pam_tally2.so deny=6 unlock_time=300 even_deny_root root_unlock_time=60
# 查看登录失败次数
[root@bogon ~]# pam_tally2 --user hello
Login Failures Latest failure From
hello 6 05/31/23 10:36:23 pts/0
# 重置登录失败
pam_tally2 --user hello --reset
账户锁定,是防御爆破的利器!
关键目录权限?别乱动,小心出事!
目的:在设备权限配置能力内,根据用户的企业需要,配置其所需的最小权限,以减少非法访问的可能性。
# 更改账户组文件的权限设置
chmod 644 /etc/passwd
chmod 600 /etc/shadow
chmod 644 /etc/group
# 去除多余的写入操作,例如
chmod -R go-w /etc
权限控制,是安全的基础!
Umask值?改一下,更安全!
目的:修改创建文件或目录时的默认权限,防止属于该组的其他用户级别组的用户修改该用户的文件。
# 修改启动脚本文件
/etc/profile
/etc/csh.login
/etc/csh.cshrc
/etc/bashrc
# 在文件末尾加入umask值
umask 027
Umask值,影响文件默认权限!
硬件资源限制?别放纵,控制住!
目的:限制用户对系统资源的使用,减缓DDOS等攻击危害。
# 1.修改限制文件
vim /etc/security/limits.conf
# 加入如下内容
* soft core 0 # 禁止生成core dump文件
* hard core 0
* hard rss 5000 # 限制最大内存使用量
* hard nproc 20 # 限制最大进程数
# * soft nproc 4096 # 所有的用户默认可以打开最大的进程数为 4096
# root soft nproc unlimited # root 用户默认可以打开最大的进程数 无限制的。
# 2.修改pam的本地登录文件
vim /etc/pam.d/login
# 在文件末尾加入信息
session required /lib64/security/pam_limits.so
# 3.日常收集进程数使用
ps aux |grep httpd |wc -l
硬件资源限制,防止被恶意消耗!
LS和RM别名?加个保险,更放心!
目的:让ls随时看清文件属性,让rm需要确认后删除目标实施方法。
# 1.修改当前用户的登录启动脚本
vim ~/.bashrc
# 追加别名命令
alias ls="ls -alh" # 显示所有文件属性
alias rm="rm -i" # 删除前询问
LS和RM别名,防止误操作!
禁止SU到Root?断了念想,更安全!
目的:避免任何人使用su切换到root,减少提权风险。
# 1.修改su的配置文件
vim /etc/pam.d/su
auth sufficient /lib/security/pam_rootok.so
auth required /lib/security/pam_wheel.so group=wheel # 只有wheel组的用户才能SU
# 2.如果需要su切换,将用户加入wheel组
usermod -g wheel luobo
禁止SU到Root,防止权限滥用!
去掉SUID和SGID?斩草除根,不留后患!
目的:防止被利用提权。
# 查找具有SUID和SGID的对象
find / -type f ( -perm -04000 -o -perm -02000 ) -exec ls -1g {} ;
chmod ugo-s file # 去掉SUID和SGID
SUID和SGID,是提权的“捷径”!
开放目录粘滞位?只许删自己的,不许动别人的!
目的:允许小规模开放目录,用户作为暂存目录使用。
# 为/tmp目录添加粘滞位
chmod +t /tmp/
粘滞位,保护用户文件!
启用日志记录?留个底,心里踏实!
目的:增加审计记录,分布保存日志。
机器准备:
主机名 | IP |
---|---|
node01 | 10.0.1.110 |
log(日志服务器) | 10.0.1.111 |
node01操作:
# 1.修改应用服务器日志配置文件
vim /etc/rsyslog.conf
# 确认关键日志审计是否存在
# *.info;mail.none;authpriv.none;cron.none /var/log/messages
# authpriv.* /var/log/secure
# 添加两行转发日志信息
*.info;mail.none;authpriv.none;cron.none @10.0.1.111 # UDP转发
authpriv.* @@10.0.1.111 # TCP转发
# 注释:
# @:使用udp协议
# @@:协议tcp协议
# 10.0.1.111:把日志内容写入到10.0.1.111机器上
# 2.重启rsyslog
systemctl restart rsyslog.service
log(日志服务器):开启配置文件
# 1.修改应用服务器日志配置文件
vim /etc/rsyslog.conf
# 15 $ModLoad imudp
# 16 $UDPServerRun 514
# 19 $ModLoad imtcp
# 20 $InputTCPServerRun 514
# 22 $template Remote,"/var/log/%$YEAR%-%$MONTH%-%$DAY%/%fromhost-ip%.log"
# 47 #### RULES ####
# 48 :fromhost-ip, !isequal, "127.0.0.1" ?Remote
# 49 & stop
# 2.重启rsyslog
systemctl restart rsyslog.service
# 3.查看日志是否有时间段的目录,有了则成功
ls /var/log
# 4.日志服务器实时查看日志,在客户机器输入 logger luobo
tail -f /var/log/2023-05-31/10.0.1.110.log
日志记录,是事后追责的依据!
重要日志权限?640足矣,别太开放!
# 防止日志泄露敏感信息
ls -la /var/log/
chmod -R 640 /var/log
日志权限,控制访问范围!
关键文件底层属性?锁死它,动不了!
目的:增强关键文件的底层属性,降低篡改风险。
# 1.修改关键文件的日志和底层属性
chattr +a /var/log/messages # 只允许追加
chattr +i /etc/shadow # 禁止修改
chattr +i /etc/passwd # 禁止修改
chattr +i /etc/group # 禁止修改
# 不只限于上述文件,可用lsattr查看更改结果
文件底层属性,是最后的防线!
通信协议:别让你的数据“裸奔”!⭐
Telnet?OUT!赶紧关掉!
目的:降低被抓包后获取系统关键信息
vim /etc/xinetd.d/telnet
disable=yes
Telnet,是明文传输的“活化石”!
加密远程管理?SSH才是王道!
目的:使用安全套接字层加密传输信息,避免被侦听敏感信息。
# 1.修改sshd配置文件
vim /etc/ssh/sshd_config
# 更改默认端口,防止暴力破解
Port 2020
# 禁止root远程登录
PermitRootLogin no
# 开启v2版本,更安全
Protocol 2
# 2.重启sshd服务
systemctl restart sshd.service
SSH,是安全的远程管理工具!
访问控制列表?设个门槛,挡住坏人!
设置访问控制白名单,减少被入侵的风险。
# 修改拒绝策略
vim /etc/hosts.deny
ALL:ALL # 拒绝所有
# 修改允许策略
vim /etc/hosts.allow
# sshd:来访者IP地址
sshd:10.0.1.110
sshd:10.0.1.111
ACL,是简单的访问控制手段!
固化DNS解析?防止劫持,自己做主!
目的:降低被DNS劫持的可能性。
# 修改hosts文件
vim /etc/hosts
# 加入解析信息
61.59.123.22 www.baidu.com # 访问IP 服务器域名
Hosts文件,是你的“私人DNS”!
开启Syncookie?缓解SYN Flood,扛住!
目的:缓解SYN Flood攻击。
# 1.修改系统控制文件
vim /etc/sysctl.conf
net.ipv4.tcp_syncookies = 1
# 2.配置生效
sysctl -p
Syncookie,是防御SYN Flood的“盾牌”!
不响应ICMP?别理它,省点事!
大白话理解:你能ping通别人,别人ping不通你。
目的:不对ICMP请求作出响应,避免泄露信息。
# 1.修改网络策略布尔值
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
# 2.配置生效
sysctl -p
不响应ICMP,防止被探测!
禁止无源路由?别被骗了,假的!
目的:防止被无源数据包利用。
# 1.检查是否开启了路由功能
sysctl -n net.ipv4.conf.all.accept_source_route
# 2.禁止路由
echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route
禁止无源路由,防止被欺骗!
SYN Flood优化?加把劲,再扛扛!
目的:修改半连接上线,缓解SYN Flood攻击。
# 1.查询当前半连接上限
sysctl net.ipv4.tcp_max_syn_backlog
# 2.修改半连接上限
sysctl -w net.ipv4.tcp_max_syn_backlog="2048"
SYN Flood优化,提升防御能力!
FTP黑白名单?管好你的“后花园”!
目的:防止非法账户访问FTP。
# 1.检查黑名单文件是否包含高危账户
cat /etc/vsftp/ftpusers
# 黑名单用户
# root
# bin
# daemon
# ...
# 2.使用白名单文件
cat /etc/user_list
cat /etc/vsftpd/vsftpd.conf
# 配置文件中是否存在
userlist_deny=NO # 允许白名单用户
userlist_enable=YES # 启用白名单
FTP黑白名单,控制访问权限!
FTP默认权限?别乱传,小心病毒!
目的:防止被上传执行脚本。
# 检查主配置文件 /etc/vsftpd/vsftpd.conf是否存在如下内容
cat /etc/vsftpd/vsftpd.conf
write_enable=YES # 允许上传
local_umask=022 # 本地用户上传权限
anon_umask=022 # 匿名用户上传权限
FTP默认权限,防止恶意文件上传!
FTP Banner?亮个身份,别装神秘!
目的:防止泄露服务信息。
# 检查主配置文件 /etc/vsftpd/vsftpd.conf 是否存在如下内容
cat /etc/vsftpd/vsftpd.conf
ftpd_banner=" Authorized users only. All activity may be monitored and reported. "
FTP Banner,声明安全策略!
可信NTP?时间同步,很重要!
目的:保持时间同步,防止某些服务错误。
yum install ntp -y
# 1.检查主配置文件 /etc/ntp.conf 是否存在如下内容
cat /etc/ntp.conf
server X.X.X.X # 可信NTP服务器地址
# 2.确保服务被启用
systemctl enable ntpd
systemctl status ntpd
NTP,保证时间同步!
高危文件?查查查,别留隐患!
目的:防止被使用远程登录漏洞。
脚本执行无返回值表示正常
# 1.检查.netrc脚本
vim find_net.sh
#! /bin/bash
for DIR in `cut -d ":" -f6 /etc/passwd`; do
if [ -e $DIR/.netrc ]; then
echo "$DIR/.netrc"
fi
done
# 执行脚本 脚本执行无返回值表示正常
sh find_net.sh
# 2.检查.rhosts脚本
vim find_rhost.sh
#! /bin/bash
for DIR in `cut -d ":" -f6 /etc/passwd`; do
if [ -e $DIR/.rhosts ]; then
echo "$DIR/.rhosts"
fi
done
# 执行脚本 脚本执行无返回值表示正常
sh find_rhost.sh
.netrc和.rhosts,是远程登录的“钥匙”!
关闭NFS?没必要,就关掉!
目的:防止被外挂文件系统,导致入侵。
# 1.检查是否存在敏感进程
ps aux |grep -E "lockd | nfsd |statd |mountd"
# 2.检查关闭NFS相关服务
systemctl list-unit-files |grep nfs
systemctl disable nfs-client.target
NFS,是文件共享的“通道”!
补丁:亡羊补牢,为时不晚!⭐
补丁?打起来,别犹豫!
可以使用系统版本为最新并解决安全问题。
# 1.使用yum更新(不建议,风险较高)
yum update
# 2.使用rpm安装(推荐,更可控)
# 访问:http://www.redhat.com/corp/support/errata 下载补丁
rpm -Fvh rpm包
# 注意:所有补丁需要在测试环境测试不影响业务服务后才可更新,下载补丁时,一定对文件进行签名合适。
打补丁,是解决安全漏洞的有效手段!
服务进程:砍掉多余的,瘦身!⭐
无用服务?关关关,一个不留!
目的:关闭无用服务,提高系统性能,减低漏洞风险。
# 1.检查有哪些自启动服务,并记录列表
systemctl list-unit-files |grep enabled
# 2.禁用无用服务
systemctl stop 服务名
systemctl disabled 服务名
关闭无用服务,减少攻击面!
建议关闭的服务?看看你的,有没有!
Banner与自动注销:细节决定成败!⭐
隐藏Banner?别泄露,保持神秘!
目的:避免通过系统提示信息获取系统状态。
# 1.查看登录banner信息
cat /etc/issue
# 2.清空banner文件
echo > /etc/issue
隐藏Banner,防止信息泄露!
登录超时?别挂机,自动注销!
目的:防止疏忽导致命令被他人使用。
# 1.修改 /etc/profile
vim /etc/profile
# 在HISTFILESIZE下面加入
TMOUT=180 # 180秒后自动注销
# 2.生效
source /etc/profile
登录超时,防止他人滥用!
历史命令?少一点,更安全!
目的:降低之前操作被窃取的风险。
# 1.修改/etc/profile
vim /etc/profile
# 历史记录条数,建议写30-50就行
HISTSIZE=50
# 2.生效
source /etc/profile
历史命令,可能泄露敏感信息!
跳过GRUB?别乱动,保护引导!
目的:防止在grub菜单对引导过程进行修改。
# 修改grub配置文件
vim /boot/grub2/grub.cfg
# 修改grub菜单等待时间
set timeout=0 # 立即启动
跳过GRUB,防止恶意篡改!
关闭Ctrl+Alt+Del?防止手抖,误重启!
目的:防止误操作重启服务器。
# 删除配置文件
rm -f /usr/lib/systemd/system/ctrl-alt-del.target
# 生效
init q
关闭Ctrl+Alt+Del,防止误操作!
```
网络安全学习资源分享:
给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
因篇幅有限,仅展示部分资料,朋友们如果有需要全套《网络安全入门+进阶学习资源包》,需要点击下方链接即可前往获取
读者福利 |
CSDN大礼包:《网络安全入门&进阶学习资源包》免费分享 (安全链接,放心点击)

👉1.成长路线图&学习规划👈
要学习一门新的技术,作为新手一定要先学习成长路线图,方向不对,努力白费。
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图&学习规划。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
👉2.网安入门到进阶视频教程👈
很多朋友都不喜欢晦涩的文字,我也为大家准备了视频教程,其中一共有21个章节,每个章节都是当前板块的精华浓缩。(全套教程文末领取哈)
👉3.SRC&黑客文档👈
大家最喜欢也是最关心的SRC技术文籍&黑客技术也有收录
SRC技术文籍:
黑客资料由于是敏感资源,这里不能直接展示哦!(全套教程文末领取哈)
👉4.护网行动资料👈
其中关于HW护网行动,也准备了对应的资料,这些内容可相当于比赛的金手指!
👉5.黑客必读书单👈
👉6.网络安全岗面试题合集👈
当你自学到这里,你就要开始思考找工作的事情了,而工作绕不开的就是真题和面试题。
所有资料共282G,朋友们如果有需要全套《网络安全入门+进阶学习资源包》,可以扫描下方二维码或链接免费领取~
读者福利 |
CSDN大礼包:《网络安全入门&进阶学习资源包》免费分享 (安全链接,放心点击)
吧