Linux服务器安全加固参考
Linux系统由于其出色的性能、稳定性、开放源代码的灵活性和可扩展性,以及较低廉的成本,而受到互联网业界广泛关注和应用。这里我结合网上小伙伴的经验和自己收获总结。对Linux服务器安全、防火墙配置和服务器加固方案进行简单的讲解,防止网络上的攻击,文章主要是分享交流参考,欢迎各位大佬指点。
服务器设置大写、小写、特殊字符、数字组成的12-16位的复杂密码 ,也可使用密码生成器自动生成复杂密码,这里给您一个链接参考:https://suijimimashengcheng.51240.com/
echo "root:wgr1TDs2Mnx0XuAv" | chpasswd
设置密码策略
修改文件/etc/login.defs
PASS_MAX_DAYS 99999 密码最长有效期
PASS_MIN_DAYS 0 密码修改之间最小的天数
PASS_MIN_LEN 5 密码长度
PASS_WARN_AGE 7 口令失效前多少天开始通知用户修改密码
对密码强度进行设置
编辑文件/etc/pam.d/password-auth
password requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type= difok=1 minlen=8 ucredit=-1 lcredit=-1 dcredit=-1
difok= 定义新密码中必须要有几个字符和旧密码不同
minlen=新密码的最小长度
ucredit= 新密码中可以包含的大写字母的最大数目。-1 至少一个
lcredit=新密码中可以包含的小写字母的最大数
dcredit=定新密码中可以包含的数字的最大数目
注:这个密码强度的设定只对"普通用户"有限制作用,root用户无论修改自己的密码还是修改普通用户的时候,不符合强度设置依然可以设置成功
对用户的登录次数进行限制
编辑文件 /etc/pam.d/sshd
auth required pam_tally2.so deny=3 unlock_time=150 even_deny_root root_unlock_time300
多次输入密码失败后提示信息如下
pam_tally2 查看被锁定的用户
pam_tally2 --reset -u username 将被锁定的用户解锁
禁止root用户远程登录
禁止ROOT用户远程登录 。打开 /etc/ssh/sshd_config
#PermitRootLogin no
注:生效要重启sshd进程。
限制能su到root的用户
操作方法 #使用命令 vi /etc/pam.d/su 修改配置文件,在配置文件中添加行。例如:只允许cs组用户su到root,则添加 auth required pam_wheel.so group=cs
更改ssh端口
vim /etc/ssh/sshd_config ,更改Port或追加Port
注:生效要重启sshd进程。
安全组关闭没必要的端口
设置系统中英文语言支持
#vi /etc/sysconfig/i18n
LANG="en_US.UTF-8"
SUPPORTED="zh_CN.UTF-8:zh_CN:zh"
SYSFONT="latarcyrheb-sun16"
设置账户保存历史命令条数,超时时间
打开 /etc/profile ,修改如下
HISTSIZE=1000TMOUT=600 五分钟未动,服务器超时自动断开与客户端的链接。
启用日志功能,定期查看系统日志
系统日志(默认)/var/log/messages
cron日志(默认)/var/log/cron
安全日志(默认)/var/log/secure
重要服务器可以将日志定向传输到指定服务器进行分析。
记录所有用户的登录和操作日志
通过脚本代码实现记录所有用户的登录操作日志,防止出现安全事件后无据可查。
.编辑配置文件
[root@root /]# vim /etc/profile
.在配置文件中输入以下内容:
history
USER=`whoami`
USER_IP=`who -u am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'`
if [ "$USER_IP" = "" ]; then
USER_IP=`hostname`
fi
if [ ! -d /var/log/history ]; then
mkdir /var/log/history
chmod 777 /var/log/history
fi
if [ ! -d /var/log/history/${LOGNAME} ]; then
mkdir /var/log/history/${LOGNAME}
chmod 300 /var/log/history/${LOGNAME}
fi
export HISTSIZE=4096
DT=`date +"%Y%m%d_%H:%M:%S"`
export HISTFILE="/var/log/history/${LOGNAME}/${USER}@${USER_IP}_$DT"
chmod 600 /var/log/history/${LOGNAME}/*history* 2>/dev/null
刷新配置立即生效。
[root@root /]# source /etc/profile
对Linux账户进行管理
使用命令 userdel -r 用户名 删除不必要的账号
使用命令 passwd -l 用户名 锁定不必要的账号
使用命令 passwd -u 用户名 解锁必要的账号
使用命令 awk -F: '($7=="/bin/bash"){print $1}' /etc/passwd 查看具有登录权限的用户
使用命令 awk -F: '($3==0)' /etc/passwd 查看UID为0的账号,UID为0的用户会自动切换到root用户,所以危害很大
使用命令 awk -F: '($2=="")' /etc/shadow 查看空口令账号,如果存在空口令用户的话必须设置密码
使用脚本对账户进行管理
#! /bin/bash
\# Date:2020-05-31
\# Function: 对系统中的用户做检查,加固系统
echo "系统中有登录权限的用户有:"
awk -F: '($7=="/bin/bash"){print $1}' /etc/passwd
echo "********************************************"
echo "系统中UID=0的用户有:"
awk -F: '($3=="0"){print $1}' /etc/passwd
echo "********************************************"
N=`awk -F: '($2==""){print $1}' /etc/shadow|wc -l`
echo "系统中空密码用户有:$N"
if [ $N -eq 0 ];then
echo "恭喜你,系统中无空密码用户!!"
echo "********************************************"
else
i=1
while [ $N -gt 0 ]
do
None=`awk -F: '($2==""){print $1}' /etc/shadow|awk 'NR=='$i'{print}'`
echo "------------------------"
echo $None
echo "必须为空用户设置密码!!"
passwd $None
let N--
done
M=`awk -F: '($2==""){print $1}' /etc/shadow|wc -l`
if [ $M -eq 0 ];then
echo "恭喜,系统中已经没有空密码用户了!"
else
echo "系统中还存在空密码用户:$M"
fi
fi
对重要的文件进行锁定,即使ROOT用户也无法删除
chattr 改变文件或目录的扩展属性
lsattr 查看文件目录的扩展属性
chattr +i /etc/passwd /etc/shadow //增加属性
chattr -i /etc/passwd /etc/shadow //移除属性
lsattr /etc/passwd /etc/shadow
使用脚本对重要文件进行锁定
`\`#! /bin/bash``
`\# Date:2020-05-31`
`\# Function: 锁定创建用户和组的文件,使之无法对用户和组进行操作!`
`read -p "警告:此脚本运行后将无法添加删除用户和组!!确定输入Y,取消输入N;Y/N:" i`
`case $i in`
`[Y,y])`
• `chattr +i /etc/passwd`
• `chattr +i /etc/shadow`
• `chattr +i /etc/group`
• `chattr +i /etc/gshadow`
• `echo "锁定成功!"`
`;;`
`[N,n])`
• `chattr -i /etc/passwd`
• `chattr -i /etc/shadow`
• `chattr -i /etc/group`
• `chattr -i /etc/gshadow`
• `echo "取消锁定成功!!"`
`;;`
• `*)`
• `echo "请输入Y/y or N/n"`
`esac`
阻止系统响应任何从外部/内部来的ping请求
echo 1 >/proc/sys/net/ipv4/icmp_echo_ignore_all
DOS攻击防御
防止拒绝服务攻击
TCP SYN保护机制等设置
1、打开 syncookie:
# echo“1”>/proc/sys/net/ipv4/tcp_syncookies //默认为1,一般不用设置
表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;
2、防syn 攻击优化
用vi编辑/etc/sysctl.conf,添加如下行:net.ipv4.tcp_max_syn_backlog = 2048
进入SYN包的最大请求队列.默认1024.对重负载服务器,增加该值显然有好处.可调整到2048.
本文章来源于生活网络整理,只做分享探讨研究。