记录技术收获,分享个人心得

人生如负重远行,不可急于求成

Linux系统安全加固

        最近总结了一下linux服务器的安全加固问题,主要针对web服务器,centos系统和ubuntu系统,下面是我罗列的比较常规的安全设置项目,大家不一定每项都进行设置,但是要清楚原理,理论上来讲 都设置后服务器会非常安全,如果存在挂马的问题,基本是程序漏洞导致。由于linux系统上设置非常繁琐,不清楚的人可能会改错配置文件,所以写了一个shell脚本来方便在服务器上自定义设置,可以下载:

点击跳转下载链接

服务器上可直接运行:

wget http://www.gaoshan.me/download/shell/linux_safe.sh && chmod +x linux_safe.sh && bash linux_safe.sh

以下是安全加固的流程

1、  帐号安全设置:

(1)      配置/etc/login.defs,修改PASS_MIN_LEN,设置帐号密码的最小长度值,建议在6位以上

(2)      启用安全的密码策略,设置密码不能和旧密码一样,同时包含大小写字幕,数字,特殊字符

a、Ubuntu系统需要安装libpam-cracklib

$ sudo apt-get install libpam-cracklib –y

然后修改/etc/pam.d/common-password

添加

password   
requisite    pam_cracklib.so
retry=3 minlen=密码长度 difok=3 ucredit=-1
lcredit=-1 dcredit=-1 ocredit=-1

b、centos系统将规则添加到/etc/pam.d/system-auth

password   
requisite    pam_cracklib.so
retry=3 minlen=密码长度 difok=3 ucredit=-1
lcredit=-1 dcredit=-1 ocredit=-1

(3)      对账户登录失败做安全限制,比如登录失败三次锁定60

添加配置

auth required pam_tally2.so deny=3
unlock_time=60

到文件/etc/pam.d/sshd

(4)      创建普通用户,禁止root登录,使用普通用户sudo或者su切换为root进行管理(可选)

(5)      检查服务器内的帐号,

A、  锁定不需要的有登录权限的用户

B、  检查/etc/passwd 第三列UID0的用户(会自动切换成root),建议删除

C、  检查/etc/shadow第二列,将空密码的用户设置密码

2、  网络安全设置

(1)      设置主机禁止icmp包,禁ping

(2)      通过在/etc/sysctl.conf中添加配置,进行网络安全防护,该配置可在网上搜索相应的配置项,常见的可设置:

net.ipv4.tcp_syncookies 1 syn_flood启用cookie

net.ipv4.tcp_fin_timeout 2 减少处于FIN-WAIT-2连接状态的时间,使系统可以处理更多的连接

net.ipv4.tcp_synack_retries 3 减少发送syn+ack包时重试次数(缓解SYN攻击)

net.ipv4.tcp_syn_retries 3 减少发送syn包时重试次数(缓解SYN攻击)

net.ipv4.tcp_max_syv_backlog 4096 增加backlog队列(缓解SYN攻击)

3、  系统安全设置

1)锁定核心配置文件,使用chattr +i /etc/passwd
/etc/shadow /etc/group /etc/gshadow /etc/gshadow /etc/fstab

2)增加系统文件描述符(可以避免因为这个值太小而引起的Too many open
files
的错误)

用户描述符,可通过ulimit –n查看,如需修改可将配置写入/etc/security/limits.conf

系统总文件描述符fs.file-max=1048575 >> /etc/sysctl.conf

(3)      设置默认的umask值,增强安全性

目前系统默认值一般是0022,我们可调整为0027,修改/etc/profile实现

(4)      记录所有用户的登录和操作日志

将如下代码写入/etc/profile文件底部

history
2.      USER=`whoami`
3.      USER_IP=`who -u am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'`
4.      if [ "$USER_IP" = "" ]; then
5.      USER_IP=`hostname`
6.      fi
7.      if [ ! -d /var/log/history ]; then
8.      mkdir /var/log/history
9.      chmod 777 /var/log/history
10.    fi
11.    if [ ! -d /var/log/history/${LOGNAME} ]; then
12.    mkdir /var/log/history/${LOGNAME}
13.    chmod 300 /var/log/history/${LOGNAME}
14.    fi
15.    export HISTSIZE=4096
16.    DT=`date +"%Y%m%d_%H:%M:%S"`
17.    export HISTFILE="/var/log/history/${LOGNAME}/${USER}@${USER_IP}_$DT"
18.    chmod 600 /var/log/history/${LOGNAME}/*history* 2>/dev/null

保存后的效果是会记录每个登录用户的操作命令,登录时间,日志存放在/var/log/history/用户名 的目录下,每次用户退出登陆后会生成日志。增加操作系统操作的安全性。

4、  时间同步设置

Ubuntu系统可设置

timedatectl set-timezone Asia/Shanghai 可将配置加入计划任务

echo “*/5 * * * * root timedatectl
set-timezone Asia/Shanghai” >> /etc/crontab

centos系统可设置

ntpdate time.windows.com || timedatectl set-timezone
Asia/Shanghai

echo “*/5 * * * * /usr/sbin/ntpdate
time.windows.com” >> /etc/crontab

5、  端口安全设置

1)屏蔽所有udp端口

只开放时间同步的123dns53端口,也可根据用户使用情况屏蔽部分tcp端口

2)修改远程端口(可选)

如果用户是默认的配置,可以修改一个远程端口,告知他以增强安全性

6、  安全软件安装

安装云锁,保留默认设置即可,开启操作系统安全加固

参考文章:

https://help.aliyun.com/knowledge_detail/49809.html

https://www.cnblogs.com/doublexi/p/9720122.html

———————————————————————————–

安全加固脚本下载(点击下载)http://www.gaoshan.me/download/shell/linux_safe.sh 

脚本使用说明:

服务器上执行:

wget http://www.gaoshan.me/download/shell/linux_safe.sh && chmod +x linux_safe.sh && bash linux_safe.sh

目前脚本经过我在实际网站运行环境测试,支持centos6,7、ubuntu系统,下载后执行脚本

# bash safe.sh

1、  帐号安全设置

(1)     设置帐号密码最小长度(输入数字,建议6位以上)

《Linux系统安全加固》

说明:需要输入至少6位以上纯数字作为密码长度

写入配置文件:

/etc/login.defs

参数:

PASS_MIN_LEN

(2)     是否启用密码强度策略? ( y设置 n跳过)

《Linux系统安全加固》

说明:这里会要求设置帐号最小长度位(以上面设置默认一致),新密码不能和旧密码相同,同时包含大字母、小写字母和数字

Centos写入配置:

/etc/pam.d/system-auth

参数:

password   
requisite     pam_pwquality.so
try_first_pass local_users_only retry=3 authtok_type=  difok=3 minlen=’$len’ ucredit=-1 lcredit=-1
dcredit=-1

Ubuntu写入配置:

/etc/pam.d/common-password

参数:

password   
requisite    pam_cracklib.so
retry=3 minlen=’$len’ difok=3 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1

(3)     是否对账户登录失败做限制?[y继续n跳过]

y会询问是否针对root也这样设置[y继续n跳过]

《Linux系统安全加固》

《Linux系统安全加固》

说明:登录失败3次锁定60

写入配置:

/etc/pam.d/sshd

参数:

auth required pam_tally2.so deny=3
unlock_time=60
(如果是对root限制,再增加配置even_deny_root root_unlock_time60

(4)     是否禁止root账户ssh登录?[y继续n跳过]

如果设置y,禁止root登录后需要创建普通用户登录管理[y继续n跳过]

《Linux系统安全加固》   

N跳过设置

《Linux系统安全加固》

写入配置:

/etc/ssh/sshd_config

参数:

PermitRootLogin No

A、这里在新建用户的同时,会将新建的用户分配到wheel组中,这样只有这个新建的用户才能suroot账号下

写入配置:

/etc/login.defs

参数:SU_WHEEL_ONLY yes

写入配置:

/etc/pam.d/su

参数:

Ubuntuauth required
pam_wheel.so

Centosauth            required        pam_wheel.so use_uid

B、新建的用户允许使用基本的命令:

写入配置:

/etc/sudoers

参数:

Ubuntu:%sudo   ALL=(ALL:ALL) ALL

Centos: %wheel  ALL=(ALL)       ALL

(5)     服务器帐号安全检测

这里会检测三项

A、 系统中具备登录权限的帐号,如果存在会要求选择是否禁用该帐号

《Linux系统安全加固》

检查存在的可登录的帐号:

awk -F: ‘($7==”/bin/bash”){print
$1}’ /etc/passwd

禁用

passwd –l 帐号名

usermod -s /usr/sbin/nologin 账号名

Root帐号被限制不能锁定:

《Linux系统安全加固》

B、 系统UID0的用户有(正常应该只有rootuid0的用户会自动切换为root,危害很大)

检测使用:

awk -F: ‘($3==0)’ /etc/passwd

C、 检查存在空密码的用户,如果有,则需要设置密码

检测使用:

awk -F: ‘($2==””)’ /etc/shadow

《Linux系统安全加固》

2、             网络安全设置

(1)       设置禁止ping

禁止:echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

允许:echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all

写入配置文件

/etc/rc.local

(2)       配置一些tcp优化参数(主要防护syn攻击,增大服务器处理能力)

脚本中使用函数来进行控制,可以写入参数,值和提示信息

《Linux系统安全加固》 

写入配置:

/etc/sysctl.conf

参数优化可参考:

https://www.cnblogs.com/doublexi/p/9720122.html

 

《Linux系统安全加固》

3、             系统及文件安全

(1)      使用chattr锁定一些核心配置文件

这里执行了

chattr +i /etc/passwd /etc/shadow
/etc/group /etc/gshadow /etc/gshadow /etc/fstab

lsattr /etc/passwd /etc/shadow /etc/group
/etc/gshadow /etc/gshadow /etc/fstab

《Linux系统安全加固》

如果选择n,则会有解锁文件的选项

 

(2)       文件描述符扩充(可以避免因为这个值太小而引起的Too many open files 的错误)

《Linux系统安全加固》

包含两个控制:

A、 单个用户描述符

查看ulimit -n

B、 系统总的文件描述符

查看cat /proc/sys/fs/file-max

修改

(3)      设置默认的umask值,增强安全性

修改/etc/profile umask的默认值(默认为022),修改为027

《Linux系统安全加固》

(4)      记录所有用户的登录和操作日志

写入配置:

/etc/profile

内容可参考:

https://help.aliyun.com/knowledge_detail/49809.html

文章最后的配置

这个执行需要等待服务器重启,或者脚本执行完后手工执行source /etc/profile

4、时间准确的设置

将时间同步写入计划任务:

Centos

echo “*/5 * * * * /usr/sbin/ntpdate
time.windows.com” >> /etc/crontab

Ubuntu

echo “*/5 * * * * root timedatectl
set-timezone Asia/Shanghai” >> /etc/crontab

5、             端口安全设置

(1)       禁用所有udp端口,只开放53123

《Linux系统安全加固》

Aubuntu使用ufw来配置(ubuntuiptables规则有点问题,暂时没用)

ufw default deny

ufw allow 53/udp

ufw allow 123/udp

Bcentos使用iptables来控制,先写入

iptables -A OUTPUT  -m udp -p udp –dport 53 -j ACCEPT

iptables -A OUTPUT  -m udp -p udp –dport 123 -j ACCEPT

iptables -A OUTPUT -p udp -j DROP

iptables-save > /etc/sysconfig/iptables

重启对应服务

(2)       修改远程端口(可选)

《Linux系统安全加固》

6、安全软件安装

服务器安全软件建议使用云锁,目前测试下来效果不错,脚本中我已将安装进行自动化判断,只需要选择安装与否即可。安装云锁后很多文件都将会被限制写入。

《Linux系统安全加固》

———————-

安全加固脚本下载(点击下载)http://www.gaoshan.me/download/shell/linux_safe.sh 

———————-

2019年3月6日 16:56:24 更新v1.01 

(1)centos下判定udp端口已存在 53和123的情况,将已存在规则清除再导入iptables表,导入后列出规则

(2)增加文件描述符最大判定,系统描述符大于100w用户描述符大于6w则跳过扩容设置

(3)增加脚本部分注释

2019年5月9日 11:48:17 更新v1.02

修复了脚本加固后可能导致部分应用不监听ipv4的端口,只监听ipv6地址的问题


点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注

hi~

你好,欢迎来到我的博客,欢迎留言。

快速搜索:





Generic selectors

Exact matches only


Search in title


Search in content



Search in posts


Search in pages

欢迎关注我:

微博
steam
网易云音乐
QQ
500px

常用命令:

http://www.gaoshan.me/cmd