文章目录
- 一、Linux安全配置简介
 - 二、Linux安全配置
 - 2.1 网络配置
 - 2.2 防火墙配置
 - 2.2.1 确定防火墙区域配置
 
- 2.3 日志和审核
 - 2.4 访问、认证和授权
 - 2.4.1 SSH配置
 - 2.4.2 PAM模块配置
 
一、Linux安全配置简介
Linux种类较多,常用的有Redhat、Ubantu、Centos等。这里以Centos 7为例,进行安全配置讲解,其他版本linux可能存在安全配置方式不同,但整体配置的维度和原则是一致的。
 Centos安全配置维度
- 安装配置(默认配置即可)
 - 服务配置(默认配置即可)
 - 网络配置
 - 日志和审计
 - 访问、授权和认证
 - 系统运维
 
Centos安全配置原则
- 最小安全(最小安装、最小权限)
 - 不影响业务可用(安全与业务的矛盾)
 - 职责分离
 - 审计记录
 
二、Linux安全配置
2.1 网络配置
(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作为独立主机使用时,配置网络
- 关闭IP转发,默认即关闭
 - 查看IP转发配置:
sysctl net.ipv4.ip_forward - 关闭IP转发:
sysctl -w net.ipv4.ip_forward=0

(4)关闭数据包重定向 - 查看重定向设置:
sysctl net.ipv4.conf.all.send_redirects - 关闭重定向设置:
sysctl -w net.ipv4.conf.all.send_redirects=0

(5)开启TCP SYN Cookies功能,TCP SYN功能在某种程度上可以防止TCP的SYN DDOS攻击 - 查看TCP SYN Cookies:
sysctl net.ipv4.tcp_syncookies - 开启TCP SYN Cookies:
sysctl -w net.ipv4.tcp_syncookies=1

 
2.2 防火墙配置
在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 - 确保防火墙服务自动启动,并正在运行。查看firewalld状态:
systemctl is-enabled firewalld或者firewalld-cmd --state


 - 开启firewalld:
systemctl unmask firewalld、systemctl enable firewalld
 
  开启防火墙,可能会导致网络中断,所以一定要分析清楚,当前网络连接与网络配置,再来开启防火墙。
 
2.2.1 确定防火墙区域配置
默认firewalld会创建一个public的区域,区域代表防火墙中的信任等级,每个接口都应该属于区域。
- 查看当前区域,默认是public:
firewall-cmd --get-default-zone

 - 设置默认区域为public:
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 
2.3 日志和审核
- 查看系统是否安装审核服务:
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。

 
2.4 访问、认证和授权
2.4.1 SSH配置
(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
 
2.4.2 PAM模块配置
PAM(Pluggable Authentication Modules)是linux中的认证管理模块,所有认证相关可有PAM处理。
 (1)密码要求
 由/etc/security/pwquality.conf管理:
- minlen=14,最小密码长度;
 - mincalss=4,密码复杂度,分别为大写字母、小写字母、数字、符号;
 
(2)用户账户和环境
- 查看密码过期时间,建议设为60,如图为99999,显然不合适:
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>

 
 - 方法一,编辑默认文件(
 


















