Linux种类较多,常用的有Redhat、Ubantu、Centos等。这里以Centos 7为例,进行安全配置讲解,其他版本linux可能存在安全配置方式不同,但整体配置的维度和原则是一致的。
Centos安全配置维度
Centos安全配置原则
(1)禁用不使用的网络协议
执行以下命令,禁用IPv6:
sysctl -w net.ipv6.conf.all.disable_ipv6=1
sysctl -w net.ipv6.conf.default.disable_ipv6=1
sysctl -w net.ipv6.route.flush=1
查看配置是否生效:sysctl net.ipv6.conf.all.disable_ipv6
(2)禁用不使用的无线设备,因为linux作为服务器工作时,无需使用无线
iw list
ip link show up
ip link set <interface> down
(3)当linux作为独立主机使用时,配置网络
sysctl net.ipv4.ip_forward
sysctl -w net.ipv4.ip_forward=0
sysctl net.ipv4.conf.all.send_redirects
sysctl -w net.ipv4.conf.all.send_redirects=0
sysctl net.ipv4.tcp_syncookies
sysctl -w net.ipv4.tcp_syncookies=1
在Centos较新的版本中,引入了nftables
内核取代传统netfilter
内核,通常nftables
和netfilter
安装一种即可,基于netfilter
,又有两种前端操作工具,即firewalld
和iptables
。这里以netfilter+firewalld
进行操作。
firewalld
和iptables
管理工具:rpm -q firewalld iptables
iptables
的服务管理(因为同时开启iptables
和firewalld
会冲突),查看iptables
服务:rpm -q iptables-services
systemctl stop iptables
systemctl is-enabled firewalld
或者firewalld-cmd --state
systemctl unmask firewalld
、systemctl enable firewalld
开启防火墙,可能会导致网络中断,所以一定要分析清楚,当前网络连接与网络配置,再来开启防火墙。
默认firewalld会创建一个public的区域,区域代表防火墙中的信任等级,每个接口都应该属于区域。
firewall-cmd --get-default-zone
firewall-cmd --get-default-zone=public
firewall-cmd --zone=public --change-interface=ens33
firewall-cmd --list-all --zone=public
firewall-cmd --remove-port=<port-number>/<port-type>
,如firewall-cmd --remove-port=25/tcp
firewall-cmd --remove-service=<service>
,如:firewall-cmd --remove-service=smtp
rmp -q audit audit-libs
systemctl is-enabled auditd
systemctl status auditd
(1)配置审计数据大小,查看audit日志最大空间,默认单位为M。如下图显示为8M:
(2)审计用户和用户组的操作
查看当前用户和用户组相关的操作记录:grep identity /etc/audit/rules.d/*.rules
当前没有任何相关配置。
配置记录如下:vim /etc/audit/rules.d/identity.rules
,加入如下内容:
(3)配置rsyslog
日志
rsyslog
是取代syslog
的新版本,rsyslog
有一些优秀的特性,比如使用tcp连接,可以将日志存储到数据库,可以加密传输日志等。
确保系统安装了rsyslog:rmp -q rsyslog
查看rsyslog状态:systemctl is-enabled rsyslog
查看当前日志目录及权限,日志权限应该为600(仅root读写):ls -l /var/log
查看日志归档处理,linux系统使用logrotate
按定期或指定大小进行归档处理,确保logrotate正常的处理syslog日志。查看是否存在文件:ls /etc/logrotate.d/syslog
查看计划任务的访问授权:stat /etc/crontab
,stat
命令显示文件或文件系统的详细信息。
如图显示,仅root可以访问计划任务,且相关访问时间。同事还应检查文件daily hourly monthly weekly。
(1)查看SSH配置文件权限
因为SSH可以使用密钥直接登录,如果SSH配置文件权限限制不严格,则造成SSH提权。检查/etc/ssh/sshd_config
的权限:
(2)配置允许通过SSH访问的用户
使用以下命令查看当前允许SSH访问的用户:sshd -T | grep -E '^\s*(allow|deny)(users|groups)\s+\S+'
/etc/ssh/sshd_config
,配置允许sangfor用户访问。在文件中加入allowusers sangfor
,保存、退出,并重启SSH服务。(3)查看SSH验证失败次数
命令:sshd -T | grep maxauthtries
默认为6次,建议改为4次或更低。编辑vim /etc/ssh/sshd_config
文件即可。
(4)禁止空密码登录SSHsshd -T | grep permitemptypassword
(5)查看SSH支持的加密方式,确保不要出现如DES MD5这类已经不再安全的算法。sshd -T | grep ciphers
PAM(Pluggable Authentication Modules)是linux中的认证管理模块,所有认证相关可有PAM处理。
(1)密码要求
由/etc/security/pwquality.conf
管理:
(2)用户账户和环境
grep ^\s*PASS_MAX_DAYS /etc/login.defs
grep -E '^[^:]+:[^!*]' /etc/shadow | cut -d:-f1,5
/etc/login.defs
)中的PASS_MAX_DAYS值change --maxdays 365 <user>