今天将带大家入门网络安全linux系统篇安全加固教程,全程干货,建议收藏哈
安全加固方案原则
1.版本升级 对于系统和应用在使用过程中暴露的安全缺陷,系统或应用厂商会及时发布解决问题的升级补丁包。升级系统或应用版本,可有效解决旧版本存在的安全风险。 2.关闭端口服务 在不影响业务系统正常运行情况下,停止或禁用承载业务无关的服务和服务端口,可有效避免无关服务造成的安全风险。 3.修改配置项 操作系统、安全设备、数据库、中间件、第三方应用和业务系统可更改的配置中与安全相关的设置参数等信息,通过修改安全配置,可以为网络和应用提供必要的安全保护。 4.修改代码(可选) 修改代码一般由系统开发商完成,安全加固支持方仅提供加固建议及加固有效性验证。 5.主机和网络ACL策略 主机和网络ACL策略是一类临时安全加固方法。 ACL通常应用在系统的流量控制上,可通过实施ACL有效的部署网络出/入口策略,控制对内网资源的访问能力,来保障资源安全性。 6.部署设备防护(可选) 部署设备防护的安全加固方式一般由设备厂商完成。安全加固测试
加固方向
1.账号管理与认证授权
2.通信协议
3.补丁管理
4.服务进程与启动
5.banner与 自动注销
账号管理与认证授权⭐
为不通的管理员分配不通的账号
目的:根据不同用途设置不同账户账号,提高安全层级
# 创建多用途账号 useradd username passwd username # 修改目录权限 chmod 750 dir chown user:group dir # 普通账户使用特定授权命令 sudo ifconfig修改sudo的提权应用
vim /etc/sudoers 或者 命令visudo testn localhost=NOPASSWD:ALL,usr/sbin/useradd,/usr/sbin/ifconfig testn localhost=NOPASSWD:ALL,!/usr/sbin/ifconfig # jerry可以在本地使用useradd命令 jerry localhost=/usr/sbin/useradd # 注释 testn:用户名 localhost:主机名 NOPASSWD:ALL:sudo时不需要密码 !:不能执行什么命令 usr/sbin/useradd,/usr/sbin/ifconfig:多个命令用,隔开检查高权限文件
过高的权限或在不应该时间段创建或修改的文件
find / -type f \( -perm -00007 \) -a -ctime -1 |xargs -I {} ls -lh {} -ctime:属性变更 -mtime:内容修改 atime:被访问删掉不需要的账号,修改默认账号shell环境
目的:删除系统不需要的默认账号、更改危险账号的默认shell变量,降低被利用的可能性
# 删除/锁定多余用户与组 userdel -r username groupdel groupname passwd -l username # 修改程序账号的登录shell usermod -s /sbin/nologin username限制超级管理员远程登录
目的:限制具备超级权限的用户远程登录
1.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安全日志
# 显示所有登录用户的信息 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:防止使用前三次内设置过的密码centos7以后设置密码复杂性
文件位置 /etc/security/pwquality.conf 命令:authconfig authconfig --passminlen=8 --update # 密码最短8位 authconfig --enablereqlower --update # 包含一个小写 authconfig --enablerequpper --update # 包含一个大写 authconfig --enablereqdigit --update # 包含一个数字 authconfig --enablereqother --update # 包含一个字符设置强制密码历史
目的:防止被社工字典破解
# 修改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限制硬件资源
目的:限制用户对系统资源的使用,减缓DDOS等攻击危害。
1.修改限制文件 vim /etc/security/limits.conf # 加入如下内容 * soft core 0 * 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"禁止任何人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 2.如果需要su切换,将用户加入wheel组 usermod -g wheel luobo去掉所有人SUID和SGID
目的:防止被利用提权
# 查找具有SUID和SGID的对象 find / -type f \( -perm -04000 -o -perm -02000 \) -exec ls -1g {} \; chmod ugo-s file对开放目录设置粘滞位
目的:允许小规模开放目录,用户作为暂存目录使用
# 为/tmp目录添加粘滞位 chmod +t /tmp/ 我们都知道,/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 authpriv.* @@10.0.1.111 注释: @:使用tcp协议 10.0.1.111:把日志内容写入到10.0.1.111机器上 @@:协议udp协议 2.重启rsyslog systemctl restart rsyslog.servicelog(日志服务器):开启配置文件
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
目的:降低被抓包后获取系统关键信息
vim /etc/xinetd.d/telnet disable=yes使用加密的远程管理
目的:使用安全套接字层加密传输信息,避免被侦听敏感信息。
1.修改sshd配置文件 vim /etc/ssh/sshd_config # 更改默认端口 Port 2020 # 禁止root远程登录 PermitRootLogin no # 开启v2版本 Protocol 2 2.重启sshd服务 systemctl restart sshd.service设置访问控制列表
设置访问控制白名单,减少被入侵的风险
# 修改拒绝策略 vim /etc/hosts.deny ALL:ALL # 修改允许策略 vim /etc/hosts.allow # sshd:来访者IP地址 sshd:10.0.1.110 sshd:10.0.1.111固化常用DNS解析
目的:降低被DNS劫持的可能性
修改hosts文件 vim /etc/hosts # 加入解析信息 61.59.123.22 www.baidu.com 访问IP 服务器域名打开syncookie
目的:缓解syn flood攻击
1.修改系统控制文件 vim /etc/sysctl.conf net.ipv4.tcp_syncookies = 1 2.配置生效 sysctl -p不响应ICMP请求
大白话理解:你能ping通别人,别人ping不通你。
目的:不对ICMP请求作出响应,避免泄露信息
1.修改网络策略布尔值 echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all 2.配置生效 sysctl -p禁止处理无源路由
目的:防止被无源数据包利用
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"FTP使用黑白名单限制
目的:防止非法账户访问ftp
1.检查黑名单文件是否包含高危账户 cat /etc/vsftp/ftpusers # 黑名单用户 root bin daemon adm lp sync shutdown halt mail news uucp operator games nobody 2.使用白名单文件 cat /etc/user_list cat /etc/vsftpd/vsftpd.conf # 配置文件中是否存在 userlist_deny=NO userlist_enable=YESFTP设置上传文件后的默认权限
目的:防止被上传执行脚本
检查主配置文件 /etc/vsftpd/vsftpd.conf是否存在如下内容 cat /etc/vsftpd/vsftpd.conf write_enable=YES local_umask=022 anon_umask=022FTP设置banner信息
目的:防止泄露服务信息
检查主配置文件 /etc/vsftpd/vsftpd.conf 是否存在如下内容 cat /etc/vsftpd/vsftpd.conf ftpd_banner=" Authorized users only. All activity may be monitored and reported. "配置可信任的NTP服务器,并确保服务开启
目的:保持时间同步,防止某些服务错误
yum install ntp -y 1.检查主配置文件 /etc/ntp.conf 是否存在如下内容 cat /etc/ntp.conf server X.X.X.X 2.确保服务被启用 systemctl enable ntpd systemctl status ntpd检查账户目录是否存在高危文件.netrd、.rhosts
目的:防止被使用远程登录漏洞
脚本执行无返回值表示正常
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关闭NFS服务
目的:防止被外挂文件系统,导致入侵
# 检查是否存在敏感进程 ps aux |grep -E "lockd | nfsd |statd |mountd" # 检查关闭NFS相关服务 systemctl list-unit-files |grep nfs systemctl disable nfs-client.target补丁⭐
补丁装载
可以使用系统版本为最新并解决安全问题
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与自动注销⭐
隐藏系统提示信息
目的:避免通过系统提示信息获取系统状态
1.查看登录banner信息 cat /etc/issue 2.清空banner文件 echo > /etc/issue设置登录超时注销
目的:防止疏忽导致命令被他人使用
1.修改 /etc/profile vim /etc/profile 在HISTFILESIZE下面加入 TMOUT=180 2.生效 source /etc/profile减少history历史数量
目的:降低之前操作被窃取的风险
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关闭ctrl+alt+del重启功能
目的:防止误操作重启服务器
删除配置文件 rm -f /usr/lib/systemd/system/ctrl-alt-del.target 生效 init q969694)]
banner与自动注销⭐
隐藏系统提示信息
目的:避免通过系统提示信息获取系统状态
1.查看登录banner信息 cat /etc/issue 2.清空banner文件 echo > /etc/issue设置登录超时注销
目的:防止疏忽导致命令被他人使用
1.修改 /etc/profile vim /etc/profile 在HISTFILESIZE下面加入 TMOUT=180 2.生效 source /etc/profile减少history历史数量
目的:降低之前操作被窃取的风险
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关闭ctrl+alt+del重启功能
目的:防止误操作重启服务器
删除配置文件 rm -f /usr/lib/systemd/system/ctrl-alt-del.target 生效 init q网络安全学习资源分享:
给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
因篇幅有限,仅展示部分资料,朋友们如果有需要全套《网络安全入门+进阶学习资源包》,请看下方扫描即可前往获取