引言

在当今数字化时代,企业面临着日益复杂的网络安全威胁。Red Hat Enterprise Linux (RHEL) 作为企业级Linux发行版的领导者,提供了强大的安全功能和工具,帮助组织保护其关键基础设施和数据。本文将深入探讨Red Hat系统安全策略配置的实用技巧,旨在帮助系统管理员和安全专业人员提升企业Linux平台的安全性,有效防范各类网络攻击。

Red Hat系统安全基础

SELinux配置与管理

Security-Enhanced Linux (SELinux) 是Red Hat系统中的核心安全组件,它提供了强制访问控制(MAC)机制,能够显著增强系统安全性。

SELinux工作模式

SELinux有三种工作模式:

  • Enforcing(强制模式):SELinux策略被强制执行,访问被拒绝的事件会被记录
  • Permissive(宽容模式):SELinux策略不被强制执行,但访问被拒绝的事件会被记录
  • Disabled(禁用模式):SELinux完全被禁用

查看当前SELinux状态:

sestatus 

临时更改SELinux模式:

# 设置为强制模式 setenforce 1 # 设置为宽容模式 setenforce 0 

永久更改SELinux模式需要编辑/etc/selinux/config文件:

# 编辑SELinux配置文件 vi /etc/selinux/config # 将SELINUX设置为所需模式 SELINUX=enforcing 

SELinux布尔值管理

SELinux布尔值允许在不重新加载策略的情况下调整SELinux策略的行为。

查看所有布尔值及其状态:

getsebool -a 

修改布尔值:

# 临时修改(重启后失效) setsebool httpd_can_network_connect on # 永久修改 setsebool -P httpd_can_network_connect on 

SELinux上下文管理

文件和进程的SELinux上下文决定了它们的访问权限。

查看文件SELinux上下文:

ls -Z /var/www/html/ 

修改文件SELinux上下文:

# 临时修改 chcon -t httpd_sys_content_t /var/www/html/index.html # 永久修改(使用semanage) semanage fcontext -a -t httpd_sys_content_t "/var/www/html(/.*)?" restorecon -Rv /var/www/html 

防火墙配置与管理

Red Hat Enterprise Linux使用firewalld作为默认的防火墙管理工具,它提供了动态管理的防火墙,支持网络/防火墙区域定义。

基本防火墙操作

查看防火墙状态:

systemctl status firewalld 

启动/停止/重启防火墙:

systemctl start firewalld systemctl stop firewalld systemctl restart firewalld 

设置防火墙开机自启:

systemctl enable firewalld 

防火墙区域管理

查看所有可用区域:

firewall-cmd --get-zones 

查看当前活动区域:

firewall-cmd --get-active-zones 

查看特定区域的配置:

firewall-cmd --zone=public --list-all 

端口和服务管理

开放端口:

# 临时开放 firewall-cmd --zone=public --add-port=80/tcp # 永久开放 firewall-cmd --zone=public --add-port=80/tcp --permanent 

开放服务:

# 临时开放 firewall-cmd --zone=public --add-service=http # 永久开放 firewall-cmd --zone=public --add-service=http --permanent 

重新加载防火墙配置:

firewall-cmd --reload 

丰富的规则配置

添加富规则:

# 允许特定IP访问特定端口 firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" service name="ssh" accept' # 拒绝特定IP访问 firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.0.0.5" reject' 

系统访问控制与身份认证

用户和组管理

安全的用户和组管理是系统安全的基础。

用户账户管理

创建用户:

# 创建用户并创建主目录 useradd -m username # 设置用户密码 passwd username 

删除用户:

# 删除用户但保留主目录 userdel username # 删除用户及其主目录 userdel -r username 

修改用户属性:

# 修改用户登录名 usermod -l newname oldname # 将用户添加到附加组 usermod -aG groupname username # 锁定用户账户 usermod -L username # 解锁用户账户 usermod -U username 

组管理

创建组:

groupadd groupname 

删除组:

groupdel groupname 

修改组:

# 修改组名 groupmod -n newname oldname # 将用户添加到组 gpasswd -a username groupname 

密码策略配置

强密码策略是防止未授权访问的重要措施。

密码复杂度设置

编辑/etc/security/pwquality.conf文件来设置密码复杂度要求:

vi /etc/security/pwquality.conf 

示例配置:

minlen = 12 minclass = 3 dcredit = -1 ucredit = -1 lcredit = -1 ocredit = -1 maxrepeat = 3 

这些设置要求:

  • 最小密码长度为12个字符
  • 至少包含3种不同类型的字符(大写、小写、数字、特殊字符)
  • 至少包含1个数字
  • 至少包含1个大写字母
  • 至少包含1个小写字母
  • 至少包含1个特殊字符
  • 同一字符最多重复3次

密码过期策略

编辑/etc/login.defs文件设置密码过期策略:

vi /etc/login.defs 

示例配置:

PASS_MAX_DAYS 90 PASS_MIN_DAYS 7 PASS_WARN_AGE 14 

这些设置要求:

  • 密码最长使用90天
  • 密码最短使用7天(防止用户频繁更改密码)
  • 密码过期前14天开始警告用户

为特定用户设置密码过期策略:

# 设置密码过期时间 chage -M 90 username # 设置密码最小使用时间 chage -m 7 username # 设置密码过期警告时间 chage -W 14 username # 查看用户密码过期信息 chage -l username 

SSH安全配置

SSH是远程管理Linux系统的常用工具,确保其安全性至关重要。

SSH基本安全配置

编辑SSH配置文件:

vi /etc/ssh/sshd_config 

推荐的安全配置:

# 禁用root登录 PermitRootLogin no # 禁用密码认证,使用密钥认证 PasswordAuthentication no PubkeyAuthentication yes # 更改默认端口 Port 2222 # 限制允许登录的用户 AllowUsers user1 user2 # 设置登录尝试次数 MaxAuthTries 3 # 禁用空密码 PermitEmptyPasswords no # 设置会话超时 ClientAliveInterval 300 ClientAliveCountMax 0 

重启SSH服务使配置生效:

systemctl restart sshd 

SSH密钥管理

生成SSH密钥对:

# 生成RSA密钥对 ssh-keygen -t rsa -b 4096 # 生成ED25519密钥对(更安全) ssh-keygen -t ed25519 

将公钥复制到远程服务器:

ssh-copy-id -i ~/.ssh/id_ed25519.pub username@remote_host 

使用SSH封装器限制访问

创建SSH封装器脚本:

vi /usr/local/bin/ssh_wrapper.sh 

示例脚本内容:

#!/bin/bash # 获取连接信息 CLIENT_IP=$(echo $SSH_CONNECTION | awk '{print $1}') # 检查IP是否在允许列表中 if ! grep -q $CLIENT_IP /etc/ssh/allowed_ips; then logger "SSH access denied for $CLIENT_IP" exit 1 fi # 执行原始SSH命令 exec /usr/sbin/sshd -D -e $@ 

修改SSH服务配置使用封装器:

vi /etc/systemd/system/sshd.service 

修改ExecStart行:

ExecStart=/usr/local/bin/ssh_wrapper.sh 

重新加载systemd配置并重启SSH服务:

systemctl daemon-reload systemctl restart sshd 

网络安全配置

网络服务安全

禁用不必要的服务

查看所有运行的服务:

systemctl list-units --type=service --state=running 

禁用不必要的服务:

# 停止服务 systemctl stop servicename # 禁用服务开机自启 systemctl disable servicename 

例如,禁用Telnet服务(不安全的远程登录协议):

systemctl stop telnet.socket systemctl disable telnet.socket 

服务安全配置

以Nginx为例,进行安全配置:

编辑Nginx主配置文件:

vi /etc/nginx/nginx.conf 

推荐的安全配置:

# 隐藏Nginx版本信息 server_tokens off; # 限制HTTP方法 if ($request_method !~ ^(GET|HEAD|POST)$ ) { return 405; } # 防止点击劫持 add_header X-Frame-Options "SAMEORIGIN"; # 启用XSS保护 add_header X-XSS-Protection "1; mode=block"; # 防止MIME类型嗅探 add_header X-Content-Type-Options "nosniff"; # 限制客户端请求体大小 client_max_body_size 1M; # 限制请求头大小 large_client_header_buffers 4 8k; # 配置SSL/TLS ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384'; 

网络参数调优

通过修改/etc/sysctl.conf文件来增强网络安全性:

vi /etc/sysctl.conf 

推荐的安全配置:

# 防止IP欺骗 net.ipv4.conf.all.rp_filter = 1 net.ipv4.conf.default.rp_filter = 1 # 忽略ICMP重定向 net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.default.accept_redirects = 0 net.ipv4.conf.all.secure_redirects = 0 net.ipv4.conf.default.secure_redirects = 0 # 忽略发送ICMP重定向 net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.default.send_redirects = 0 # 不接受源路由包 net.ipv4.conf.all.accept_source_route = 0 net.ipv4.conf.default.accept_source_route = 0 # 启用TCP SYN Cookie保护 net.ipv4.tcp_syncookies = 1 # 防止TCP SYN洪水攻击 net.ipv4.tcp_max_syn_backlog = 2048 net.ipv4.tcp_synack_retries = 2 net.ipv4.tcp_syn_retries = 5 # 记录可疑数据包 net.ipv4.conf.all.log_martians = 1 net.ipv4.conf.default.log_martians = 1 # 忽略广播ping net.ipv4.icmp_echo_ignore_broadcasts = 1 # 忽略所有ping net.ipv4.icmp_echo_ignore_all = 1 # 启用IP转发(如果系统用作路由器) # net.ipv4.ip_forward = 1 # 禁用IPv6(如果不需要) # net.ipv6.conf.all.disable_ipv6 = 1 # net.ipv6.conf.default.disable_ipv6 = 1 

应用配置:

sysctl -p 

网络流量监控与分析

使用iftop监控网络流量

安装iftop:

yum install iftop 

使用iftop监控网络流量:

iftop -i eth0 

使用nmap进行网络扫描

安装nmap:

yum install nmap 

扫描网络中的主机:

# 扫描网络中的所有主机 nmap -sn 192.168.1.0/24 # 扫描特定主机的开放端口 nmap -sV 192.168.1.100 # 扫描特定端口 nmap -p 22,80,443 192.168.1.100 

使用tcpdump捕获网络数据包

安装tcpdump:

yum install tcpdump 

捕获网络数据包:

# 捕获所有网络接口的数据包 tcpdump -i any # 捕获特定主机的数据包 tcpdump host 192.168.1.100 # 捕获特定端口的数据包 tcpdump port 80 # 保存捕获的数据包到文件 tcpdump -w capture.pcap # 读取保存的数据包文件 tcpdump -r capture.pcap 

系统审计与日志管理

系统审计配置

Linux审计系统(auditd)提供了强大的安全审计功能,可以记录系统上的安全相关事件。

安装和配置auditd

安装auditd:

yum install auditd 

启动auditd服务:

systemctl start auditd systemctl enable auditd 

配置auditd:

vi /etc/audit/auditd.conf 

推荐配置:

# 设置日志文件大小 max_log_file = 100 # 设置日志文件数量 num_logs = 5 # 设置日志文件达到最大大小时的操作 max_log_file_action = ROTATE # 设置磁盘空间不足时的操作 space_left_action = SYSLOG # 设置磁盘空间严重不足时的操作 admin_space_left_action = SUSPEND # 设置日志文件格式 log_format = ENRICHED # 设置日志文件权限 log_file_mode = 0600 

审计规则配置

配置审计规则:

vi /etc/audit/rules.d/audit.rules 

示例审计规则:

# 删除现有规则 -D # 设置缓冲区大小 -b 8192 # 监控文件删除 -a always,exit -F arch=b64 -S unlink -S unlinkat -S rename -S renameat -F auid>=1000 -F auid!=4294967295 -k delete # 监控文件权限更改 -a always,exit -F arch=b64 -S chmod -S fchmod -S chown -S fchown -S lchown -F auid>=1000 -F auid!=4294967295 -k perm_mod # 监控系统时间更改 -a always,exit -F arch=b64 -S adjtimex -S settimeofday -S stime -S clock_settime -k time_change # 监控用户/组信息更改 -w /etc/group -p wa -k identity -w /etc/passwd -p wa -k identity -w /etc/gshadow -p wa -k identity -w /etc/shadow -p wa -k identity -w /etc/security/opasswd -p wa -k identity # 监控sudo使用 -w /etc/sudoers -p wa -k sudoers -w /etc/sudoers.d/ -p wa -k sudoers # 监控网络配置更改 -a always,exit -F arch=b64 -S sethostname -S setdomainname -k system_locale -w /etc/issue -p wa -k system_locale -w /etc/issue.net -p wa -k system_locale -w /etc/hosts -p wa -k system_locale -w /etc/sysconfig/network -p wa -k system_locale # 监控登录活动 -w /var/log/faillog -p wa -k logins -w /var/log/lastlog -p wa -k logins -w /var/log/tallylog -p wa -k logins # 监控cron配置更改 -w /etc/cron.allow -p wa -k cron -w /etc/cron.deny -p wa -k cron -w /etc/cron.d/ -p wa -k cron -w /etc/cron.daily/ -p wa -k cron -w /etc/cron.hourly/ -p wa -k cron -w /etc/cron.monthly/ -p wa -k cron -w /etc/cron.weekly/ -p wa -k cron -w /etc/crontab -p wa -k cron -w /var/spool/cron/root -k cron # 确保规则永久生效 -e 2 

重新加载审计规则:

augenrules --load 

审计日志分析

使用ausearch工具搜索审计日志:

# 搜索特定用户的审计事件 ausearch -ua username # 搜索特定时间段的审计事件 ausearch -ts yesterday -te now # 搜索特定类型的审计事件 ausearch -k delete # 搜索失败的登录尝试 ausearch -m LOGIN -sv no # 搜索文件删除事件 ausearch -k delete 

使用aureport工具生成审计报告:

# 生成登录事件报告 aureport -l # 生成文件访问报告 aureport -f # 生成可执行文件执行报告 aureport -x # 生成系统调用报告 aureport -s # 生成用户修改报告 aureport -m 

集中化日志管理

配置rsyslog

编辑rsyslog配置文件:

vi /etc/rsyslog.conf 

配置远程日志服务器:

# 加载TCP和UDP模块 module(load="imtcp") module(load="imudp") # 配置TCP和UDP监听 input(type="imtcp" port="514") input(type="imudp" port="514") # 配置日志模板 $template RemoteLogs,"/var/log/remote/%HOSTNAME%/%PROGRAMNAME%.log" *.* ?RemoteLogs # 配置本地日志 *.info;mail.none;authpriv.none;cron.none /var/log/messages authpriv.* /var/log/secure mail.* -/var/log/maillog cron.* /var/log/cron *.emerg :omusrmsg:* uucp,news.crit /var/log/spooler local7.* /var/log/boot.log 

重启rsyslog服务:

systemctl restart rsyslog 

配置日志轮转

编辑logrotate配置文件:

vi /etc/logrotate.conf 

示例配置:

# 设置每周轮转 weekly # 保留4周的日志 rotate 4 # 创建新的日志文件 create # 压缩旧日志 compress # 延迟压缩 delaycompress # 如果日志文件不存在,不报错 missingok # 如果日志文件为空,不轮转 notifempty # 共享脚本 sharedscripts # 轮转后执行的脚本 postrotate /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true endscript # 包含其他配置文件 include /etc/logrotate.d 

为特定服务配置日志轮转:

vi /etc/logrotate.d/nginx 

示例配置:

/var/log/nginx/*.log { daily missingok rotate 52 compress delaycompress notifempty create 640 nginx adm sharedscripts postrotate if [ -f /var/run/nginx.pid ]; then kill -USR1 `cat /var/run/nginx.pid` fi endscript } 

漏洞管理与补丁更新

系统更新管理

使用YUM进行系统更新

检查可用更新:

yum check-update 

更新所有软件包:

yum update 

更新特定软件包:

yum update package_name 

安全更新:

yum update --security 

自动更新配置

安装yum-cron:

yum install yum-cron 

配置yum-cron:

vi /etc/yum/yum-cron.conf 

示例配置:

[commands] # 更新命令类型 update_cmd = security # 是否应用更新 apply_updates = yes [emitters] # 发送邮件通知 emit_via = email # 邮件地址 email_from = root@localhost email_to = admin@localhost email_host = localhost [base] # 调试模式 debug_level = 0 # 随机延迟 random_sleep = 360 

启动yum-cron服务:

systemctl start yum-cron systemctl enable yum-cron 

漏洞扫描

使用OpenSCAP进行漏洞扫描

安装OpenSCAP:

yum install openscap-scanner scap-security-guide 

扫描系统漏洞:

# 扫描系统漏洞 oscap xccdf eval --profile xccdf_org.ssgproject.content_profile_pci-dss --results-arf results-arf.xml /usr/share/xml/scap/ssg/content/ssg-rhel7-ds.xml # 生成HTML报告 oscap xccdf generate report results-arf.xml > report.html 

使用Lynis进行系统审计

安装Lynis:

yum install lynis 

运行Lynis审计:

lynis audit system 

查看Lynis报告:

less /var/log/lynis-report.dat 

安全补丁管理

创建补丁管理策略

创建补丁管理脚本:

vi /usr/local/bin/patch-management.sh 

示例脚本:

#!/bin/bash # 定义日志文件 LOG_FILE="/var/log/patch-management.log" # 记录函数 log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> $LOG_FILE } # 检查可用更新 log "检查可用更新..." yum check-update > /tmp/updates.txt 2>&1 # 如果有可用更新 if [ $? -eq 100 ]; then log "发现可用更新,开始安装..." # 安装安全更新 yum update --security -y >> $LOG_FILE 2>&1 # 检查是否需要重启 if [ -f /var/run/reboot-required ]; then log "系统需要重启,计划在凌晨2点重启..." echo "shutdown -r now" | at 02:00 >> $LOG_FILE 2>&1 fi else log "没有可用更新。" fi # 发送通知 mail -s "补丁管理报告" admin@localhost < $LOG_FILE 

设置脚本可执行权限:

chmod +x /usr/local/bin/patch-management.sh 

设置定时任务:

crontab -e 

添加定时任务:

# 每周日凌晨1点运行补丁管理脚本 0 1 * * 0 /usr/local/bin/patch-management.sh 

入侵检测与防御

配置AIDE(高级入侵检测环境)

AIDE(Advanced Intrusion Detection Environment)是一个文件完整性检查工具,可以检测系统文件和目录的未授权更改。

安装和配置AIDE

安装AIDE:

yum install aide 

初始化AIDE数据库:

aide --init 

将初始数据库移动到正确位置:

mv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz 

配置AIDE:

vi /etc/aide.conf 

示例配置:

# 定义检查规则 ALL = p+i+n+u+g+s+m+c+md5+sha256 NORMAL = p+i+n+u+g+s+m+c+md5 DIR = p+i+n+u+g PERMS = p LOG = p+u+g+s+acl+selinux DATAONLY = p+n+u+g+s+acl+selinux+xattrs # 定义要检查的目录和文件 !/proc !/sys !/dev !/tmp !/var/tmp !/var/cache !/var/log !/var/run !/var/lock !/etc/mtab /bin NORMAL /sbin NORMAL /usr/bin NORMAL /usr/sbin NORMAL /lib NORMAL /usr/lib NORMAL /lib64 NORMAL /usr/lib64 NORMAL /root NORMAL /etc NORMAL /boot NORMAL /opt NORMAL /srv NORMAL /var/www NORMAL 

运行AIDE检查:

aide --check 

更新AIDE数据库:

aide --update 

设置定时任务:

crontab -e 

添加定时任务:

# 每天凌晨2点运行AIDE检查 0 2 * * * /usr/sbin/aide --check | mail -s "AIDE检查报告" admin@localhost 

配置OSSEC

OSSEC是一个开源的主机入侵检测系统,提供日志分析、文件完整性检查、rootkit检测等功能。

安装OSSEC

安装依赖:

yum install gcc make httpd php mysql-server mysql-devel php-mysql 

下载并安装OSSEC:

cd /opt wget https://github.com/ossec/ossec-hids/archive/3.7.0.tar.gz tar -xvzf 3.7.0.tar.gz cd ossec-hids-3.7.0 ./install 

按照安装向导进行配置,选择”local”安装类型。

配置OSSEC

编辑OSSEC配置文件:

vi /var/ossec/etc/ossec.conf 

示例配置:

<ossec_config> <global> <email_notification>yes</email_notification> <email_to>admin@localhost</email_to> <smtp_server>localhost</smtp_server> <email_from>ossec@localhost</email_from> </global> <rules> <include>rules_config.xml</include> <include>pam_rules.xml</include> <include>sshd_rules.xml</include> <include>web_rules.xml</include> <include>firewall_rules.xml</include> <include>syslog_rules.xml</include> <include>attack_rules.xml</include> <include>local_rules.xml</include> </rules> <syscheck> <frequency>7200</frequency> <directories check_all="yes">/etc,/usr/bin,/usr/sbin</directories> <directories check_all="yes">/bin,/sbin</directories> <ignore>/etc/mtab</ignore> <ignore>/etc/hosts.deny</ignore> <ignore>/etc/mail/statistics</ignore> <ignore>/etc/random-seed</ignore> <ignore>/etc/adjtime</ignore> <ignore>/etc/httpd/logs</ignore> </syscheck> <rootcheck> <rootkit_files>/var/ossec/etc/shared/rootkit_files.txt</rootkit_files> <rootkit_trojans>/var/ossec/etc/shared/rootkit_trojans.txt</rootkit_trojans> </rootcheck> <localfile> <log_format>syslog</log_format> <location>/var/log/messages</location> </localfile> <localfile> <log_format>syslog</log_format> <location>/var/log/secure</location> </localfile> <localfile> <log_format>syslog</log_format> <location>/var/log/maillog</location> </localfile> <alerts> <log_alert_level>1</log_alert_level> <email_alert_level>7</email_alert_level> </alerts> <command> <name>host-deny</name> <executable>host-deny.sh</executable> <expect>srcip</expect> <timeout_allowed>yes</timeout_allowed> </command> <active-response> <command>host-deny</command> <location>local</location> <rules_id>5716</rules_id> <timeout>600</timeout> </active-response> </ossec_config> 

启动OSSEC:

/var/ossec/bin/ossec-control start 

配置Fail2ban

Fail2ban是一个入侵防御软件,可以监控系统的日志文件,并根据检测到的恶意行为自动禁止攻击者的IP地址。

安装和配置Fail2ban

安装Fail2ban:

yum install fail2ban 

创建Fail2ban配置文件:

cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local 

编辑Fail2ban配置文件:

vi /etc/fail2ban/jail.local 

示例配置:

[DEFAULT] # 禁止时间(秒) bantime = 3600 # 查找时间窗口(秒) findtime = 600 # 最大尝试次数 maxretry = 3 # 后端 backend = auto [sshd] enabled = true port = 22 filter = sshd logpath = /var/log/secure maxretry = 3 bantime = 3600 [apache-auth] enabled = true port = http,https filter = apache-auth logpath = /var/log/httpd/error_log maxretry = 3 bantime = 3600 [nginx-http-auth] enabled = true port = http,https filter = nginx-http-auth logpath = /var/log/nginx/error.log maxretry = 3 bantime = 3600 [nginx-limit-req] enabled = true port = http,https filter = nginx-limit-req logpath = /var/log/nginx/error.log maxretry = 3 bantime = 3600 [postfix] enabled = true port = smtp,ssmtp filter = postfix logpath = /var/log/maillog maxretry = 3 bantime = 3600 [dovecot] enabled = true port = pop3,pop3s,imap,imaps filter = dovecot logpath = /var/log/dovecot.log maxretry = 3 bantime = 3600 

启动Fail2ban服务:

systemctl start fail2ban systemctl enable fail2ban 

检查Fail2ban状态:

fail2ban-client status 

检查特定监狱状态:

fail2ban-client status sshd 

安全合规与最佳实践

系统加固

使用OpenSCAP进行系统加固

安装OpenSCAP:

yum install openscap-scanner scap-security-guide 

查看可用的安全配置文件:

oscap info /usr/share/xml/scap/ssg/content/ssg-rhel7-ds.xml 

应用安全配置文件:

oscap xccdf eval --profile xccdf_org.ssgproject.content_profile_pci-dss --remediate /usr/share/xml/scap/ssg/content/ssg-rhel7-ds.xml 

手动系统加固

禁用不必要的服务:

# 禁用Telnet服务 systemctl stop telnet.socket systemctl disable telnet.socket # 禁用rsh服务 systemctl stop rsh.socket systemctl disable rsh.socket # 禁用rlogin服务 systemctl stop rlogin.socket systemctl disable rlogin.socket # 禁用NIS服务 systemctl stop ypserv systemctl disable ypserv # 禁用TFTP服务 systemctl stop tftp.socket systemctl disable tftp.socket 

限制cron和at的使用:

# 创建cron.allow文件 touch /etc/cron.allow chmod 600 /etc/cron.allow # 创建at.allow文件 touch /etc/at.allow chmod 600 /etc/at.allow 

限制root登录:

# 禁止root通过SSH登录 echo "PermitRootLogin no" >> /etc/ssh/sshd_config systemctl restart sshd # 禁止root通过控制台登录 rm /etc/securetty touch /etc/securetty chmod 600 /etc/securetty 

安全合规检查

使用Lynis进行安全合规检查

安装Lynis:

yum install lynis 

运行Lynis检查:

lynis audit system 

查看Lynis报告:

less /var/log/lynis-report.dat 

使用CIS-CAT进行合规检查

下载并安装CIS-CAT:

cd /opt wget https://download.cisecurity.org/tools/CIS-CAT-Pro-Linux.tar.gz tar -xvzf CIS-CAT-Pro-Linux.tar.gz 

运行CIS-CAT评估:

cd CIS-CAT-Pro-Linux ./CIS-CAT.sh -r -b "CIS Red Hat Enterprise Linux 7 Benchmark" -p "Level 1 - Server" 

安全基线配置

创建安全基线脚本:

vi /usr/local/bin/security-baseline.sh 

示例脚本:

#!/bin/bash # 定义日志文件 LOG_FILE="/var/log/security-baseline.log" # 记录函数 log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> $LOG_FILE } # 设置密码策略 log "设置密码策略..." sed -i 's/PASS_MAX_DAYS.*/PASS_MAX_DAYS 90/' /etc/login.defs sed -i 's/PASS_MIN_DAYS.*/PASS_MIN_DAYS 7/' /etc/login.defs sed -i 's/PASS_WARN_AGE.*/PASS_WARN_AGE 14/' /etc/login.defs # 设置密码复杂度 log "设置密码复杂度..." cat << EOF > /etc/security/pwquality.conf minlen = 12 minclass = 3 dcredit = -1 ucredit = -1 lcredit = -1 ocredit = -1 maxrepeat = 3 EOF # 禁用root SSH登录 log "禁用root SSH登录..." sed -i 's/#PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config systemctl restart sshd # 配置防火墙 log "配置防火墙..." systemctl start firewalld systemctl enable firewalld firewall-cmd --permanent --add-service=ssh firewall-cmd --permanent --add-service=http firewall-cmd --permanent --add-service=https firewall-cmd --permanent --remove-service=telnet firewall-cmd --reload # 配置SELinux log "配置SELinux..." sed -i 's/SELINUX=.*/SELINUX=enforcing/' /etc/selinux/config setenforce 1 # 禁用不必要的服务 log "禁用不必要的服务..." systemctl stop telnet.socket systemctl disable telnet.socket systemctl stop rsh.socket systemctl disable rsh.socket systemctl stop rlogin.socket systemctl disable rlogin.socket systemctl stop ypserv systemctl disable ypserv systemctl stop tftp.socket systemctl disable tftp.socket # 配置系统审计 log "配置系统审计..." systemctl start auditd systemctl enable auditd cat << EOF > /etc/audit/rules.d/audit.rules -D -b 8192 -w /etc/passwd -p wa -k identity -w /etc/shadow -p wa -k identity -w /etc/group -p wa -k identity -w /etc/sudoers -p wa -k sudoers -e 2 EOF augenrules --load # 配置日志轮转 log "配置日志轮转..." cat << EOF > /etc/logrotate.d/secure /var/log/secure { weekly rotate 4 compress delaycompress missingok notifempty create 0600 root root } EOF # 配置自动更新 log "配置自动更新..." yum install -y yum-cron sed -i 's/update_cmd =.*/update_cmd = security/' /etc/yum/yum-cron.conf sed -i 's/apply_updates =.*/apply_updates = yes/' /etc/yum/yum-cron.conf systemctl start yum-cron systemctl enable yum-cron log "安全基线配置完成。" 

设置脚本可执行权限:

chmod +x /usr/local/bin/security-baseline.sh 

运行安全基线配置:

/usr/local/bin/security-baseline.sh 

高级安全策略

自动化安全响应

使用Ansible进行自动化安全配置

安装Ansible:

yum install ansible 

创建Ansible安全配置playbook:

vi /etc/ansible/security-hardening.yml 

示例playbook:

--- - name: Security Hardening hosts: all become: yes tasks: - name: Set password policy lineinfile: path: /etc/login.defs regexp: "{{ item.regexp }}" line: "{{ item.line }}" with_items: - { regexp: '^PASS_MAX_DAYS', line: 'PASS_MAX_DAYS 90' } - { regexp: '^PASS_MIN_DAYS', line: 'PASS_MIN_DAYS 7' } - { regexp: '^PASS_WARN_AGE', line: 'PASS_WARN_AGE 14' } - name: Set password complexity copy: dest: /etc/security/pwquality.conf content: | minlen = 12 minclass = 3 dcredit = -1 ucredit = -1 lcredit = -1 ocredit = -1 maxrepeat = 3 - name: Disable root SSH login lineinfile: path: /etc/ssh/sshd_config regexp: '^PermitRootLogin' line: 'PermitRootLogin no' notify: Restart SSH - name: Configure firewall firewalld: service: "{{ item }}" permanent: yes state: enabled with_items: - ssh - http - https notify: Restart firewall - name: Remove unnecessary services from firewall firewalld: service: "{{ item }}" permanent: yes state: disabled with_items: - telnet notify: Restart firewall - name: Enable SELinux selinux: policy: targeted state: enforcing - name: Stop and disable unnecessary services service: name: "{{ item }}" state: stopped enabled: no with_items: - telnet.socket - rsh.socket - rlogin.socket - ypserv - tftp.socket ignore_errors: yes - name: Configure auditd copy: dest: /etc/audit/rules.d/audit.rules content: | -D -b 8192 -w /etc/passwd -p wa -k identity -w /etc/shadow -p wa -k identity -w /etc/group -p wa -k identity -w /etc/sudoers -p wa -k sudoers -e 2 notify: Restart auditd - name: Configure logrotate for secure copy: dest: /etc/logrotate.d/secure content: | /var/log/secure { weekly rotate 4 compress delaycompress missingok notifempty create 0600 root root } - name: Install and configure yum-cron yum: name: yum-cron state: present - name: Configure yum-cron lineinfile: path: /etc/yum/yum-cron.conf regexp: "{{ item.regexp }}" line: "{{ item.line }}" with_items: - { regexp: '^update_cmd =', line: 'update_cmd = security' } - { regexp: '^apply_updates =', line: 'apply_updates = yes' } notify: Restart yum-cron handlers: - name: Restart SSH service: name: sshd state: restarted - name: Restart firewall service: name: firewalld state: restarted - name: Restart auditd service: name: auditd state: restarted - name: Restart yum-cron service: name: yum-cron state: restarted 

运行Ansible playbook:

ansible-playbook /etc/ansible/security-hardening.yml 

安全编排与自动化响应(SOAR)

使用TheHive进行安全事件响应

安装TheHive依赖:

yum install java-1.8.0-openjdk-headless elasticsearch 

下载并安装TheHive:

cd /opt wget https://dl.bintray.com/thehive-project/rpm-packages/thehive-3.4.0-1.noarch.rpm yum install thehive-3.4.0-1.noarch.rpm 

配置TheHive:

vi /etc/thehive/application.conf 

示例配置:

# 数据库配置 db { provider: janusgraph janusgraph { storage { backend: elasticsearch hostname: ["127.0.0.1"] indexname: thehive } } } # 搜索引擎配置 search { provider: elasticsearch hostname: ["127.0.0.1"] indexname: thehive } # 文件存储配置 storage { provider: local fs { location: /opt/theproject/thefilestore } } # 邮件配置 play { mail { host: localhost port: 25 } } 

启动TheHive:

systemctl start thehive systemctl enable thehive 

使用Cortex进行安全分析

安装Cortex依赖:

yum install python-pip python-devel 

下载并安装Cortex:

cd /opt wget https://dl.bintray.com/thehive-project/rpm-packages/cortex-2.1.3-1.noarch.rpm yum install cortex-2.1.3-1.noarch.rpm 

配置Cortex:

vi /etc/cortex/application.conf 

示例配置:

# 数据库配置 db { provider: janusgraph janusgraph { storage { backend: elasticsearch hostname: ["127.0.0.1"] indexname: cortex } } } # 搜索引擎配置 search { provider: elasticsearch hostname: ["127.0.0.1"] indexname: cortex } # 邮件配置 play { mail { host: localhost port: 25 } } 

启动Cortex:

systemctl start cortex systemctl enable cortex 

安全信息与事件管理(SIEM)

使用ELK Stack进行安全日志分析

安装Elasticsearch:

yum install java-1.8.0-openjdk-headless rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch cat << EOF > /etc/yum.repos.d/elasticsearch.repo [elasticsearch] name=Elasticsearch repository for 7.x packages baseurl=https://artifacts.elastic.co/packages/7.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=0 autorefresh=1 type=rpm-md EOF yum install --enablerepo=elasticsearch elasticsearch 

配置Elasticsearch:

vi /etc/elasticsearch/elasticsearch.yml 

示例配置:

cluster.name: elk-cluster node.name: node-1 path.data: /var/lib/elasticsearch path.logs: /var/log/elasticsearch network.host: 0.0.0.0 http.port: 9200 discovery.seed_hosts: ["127.0.0.1"] cluster.initial_master_nodes: ["node-1"] 

启动Elasticsearch:

systemctl start elasticsearch systemctl enable elasticsearch 

安装Logstash:

yum install --enablerepo=elasticsearch logstash 

配置Logstash:

vi /etc/logstash/conf.d/02-beats-input.conf 

示例配置:

input { beats { port => 5044 } } filter { if [fileset][module] == "system" { if [fileset][name] == "auth" { grok { match => { "message" => "%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} sshd(?:[%{POSINT:[system][auth][pid]}])?: %{DATA:[system][auth][ssh][event_type]} %{DATA:[system][auth][ssh][method]} for (invalid user )?%{DATA:[system][auth][user]} from %{IP:[system][auth][ssh][ip]} port %{NUMBER:[system][auth][ssh][port]} ssh2(: %{GREEDYDATA:[system][auth][ssh][signature]})?" } pattern_definitions => { "GREEDYDATA" => ".+" } } } } } output { elasticsearch { hosts => ["localhost:9200"] index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}" } } 

启动Logstash:

systemctl start logstash systemctl enable logstash 

安装Kibana:

yum install --enablerepo=elasticsearch kibana 

配置Kibana:

vi /etc/kibana/kibana.yml 

示例配置:

server.port: 5601 server.host: "0.0.0.0" elasticsearch.hosts: ["http://localhost:9200"] 

启动Kibana:

systemctl start kibana systemctl enable kibana 

安装Filebeat:

yum install --enablerepo=elasticsearch filebeat 

配置Filebeat:

vi /etc/filebeat/filebeat.yml 

示例配置:

filebeat.inputs: - type: log enabled: true paths: - /var/log/secure fields: log_type: auth - type: log enabled: true paths: - /var/log/messages fields: log_type: system output.logstash: hosts: ["localhost:5044"] 

启动Filebeat:

systemctl start filebeat systemctl enable filebeat 

总结与建议

通过本文的详细介绍,我们了解了Red Hat系统安全策略配置的多个方面,从基础的SELinux和防火墙配置,到高级的安全编排与自动化响应。这些技术和策略可以帮助企业显著提升Linux平台的安全性,有效防范各类网络攻击。

关键要点总结

  1. SELinux是Red Hat系统的核心安全组件,正确配置SELinux可以显著提升系统安全性,防止权限提升攻击。

  2. 防火墙配置是网络安全的第一道防线,通过firewalld可以灵活管理网络访问控制,限制不必要的网络连接。

  3. 用户和权限管理是系统安全的基础,强密码策略、最小权限原则和定期审计可以有效防止未授权访问。

  4. 系统审计和日志管理是安全监控的关键,通过auditd和集中化日志管理可以及时发现安全事件。

  5. 漏洞管理和补丁更新是防御已知威胁的重要手段,定期更新和自动化补丁管理可以减少系统的安全风险。

  6. 入侵检测和防御系统可以实时监控和响应安全威胁,AIDE、OSSEC和Fail2ban等工具可以提供多层次的安全保护。

  7. 安全合规和最佳实践是确保系统安全的重要参考,通过安全基线配置和合规检查可以确保系统符合行业安全标准。

  8. 自动化安全响应可以提高安全运维效率,通过Ansible、TheHive和Cortex等工具可以实现安全事件的自动化处理。

实施建议

  1. 分阶段实施安全策略:从基础的安全配置开始,逐步实施高级安全策略,避免一次性大规模变更带来的风险。

  2. 定期评估和更新安全策略:随着威胁环境的变化,定期评估和更新安全策略,确保安全措施的有效性。

  3. 建立安全事件响应流程:制定明确的安全事件响应流程,包括事件检测、分析、响应和恢复等环节。

  4. 加强安全意识培训:定期对系统管理员和用户进行安全意识培训,提高整体安全意识。

  5. 实施多层次安全防护:采用纵深防御策略,在系统、网络、应用和数据等多个层面实施安全防护。

  6. 定期进行安全审计和渗透测试:通过安全审计和渗透测试发现系统中的安全漏洞和配置问题。

  7. 建立安全基线和配置管理:建立统一的安全基线,通过配置管理工具确保系统配置的一致性和合规性。

  8. 实施持续监控和自动化响应:通过SIEM和SOAR工具实现安全事件的持续监控和自动化响应,提高安全运维效率。

通过实施这些安全策略和最佳实践,企业可以显著提升Red Hat系统的安全性,有效防范各类网络攻击,保护关键业务系统和数据的安全。安全是一个持续的过程,需要不断地评估、改进和适应新的威胁环境。