简体中文 繁體中文 English 日本語 Deutsch 한국 사람 بالعربية TÜRKÇE português คนไทย Français

站内搜索

搜索

活动公告

11-02 12:46
10-23 09:32
通知:本站资源由网友上传分享,如有违规等问题请到版务模块进行投诉,将及时处理!
10-23 09:31
10-23 09:28
通知:签到时间调整为每日4:00(东八区)
10-23 09:26

Rocky Linux系统安全校验全攻略 从基础检查到高级防护确保企业服务器安全无忧实用技巧详解

3万

主题

349

科技点

3万

积分

大区版主

木柜子打湿

积分
31898

三倍冰淇淋无人之境【一阶】财Doro小樱(小丑装)立华奏以外的星空【二阶】⑨的冰沙

发表于 2025-9-18 11:30:12 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
引言

Rocky Linux作为CentOS的替代品,已经成为许多企业的首选服务器操作系统。随着网络安全威胁的不断增加,确保Rocky Linux服务器的安全性变得尤为重要。本文将从基础检查到高级防护,全面介绍Rocky Linux系统安全校验的实用技巧,帮助企业IT管理员构建安全无忧的服务器环境。

基础安全检查

系统更新与补丁管理

保持系统更新是确保服务器安全的第一步。Rocky Linux使用dnf(或yum)包管理器来管理软件包和更新。
  1. # 检查可用的更新
  2. sudo dnf check-update
  3. # 安装所有可用更新
  4. sudo dnf update -y
  5. # 仅安装安全更新
  6. sudo dnf update --security
  7. # 设置自动更新
  8. sudo dnf install -y dnf-automatic
  9. sudo systemctl enable --now dnf-automatic.timer
复制代码

为了确保系统及时获取安全更新,建议配置自动更新。但生产环境中,建议先在测试环境中验证更新后再部署到生产环境。

用户账户安全管理

定期审核系统用户账户是必要的安全措施:
  1. # 列出所有用户
  2. cat /etc/passwd | cut -d: -f1
  3. # 列出具有登录权限的用户
  4. grep '/bin/bash' /etc/passwd | cut -d: -f1
  5. # 检查空密码账户
  6. sudo awk -F: '($2 == "") {print}' /etc/shadow
  7. # 检查UID为0的账户(除root外)
  8. sudo awk -F: '($3 == 0) {print}' /etc/passwd
复制代码

强密码策略是防止暴力破解的基础:
  1. # 安装libpwquality(如果尚未安装)
  2. sudo dnf install -y libpwquality
  3. # 编辑密码策略配置
  4. sudo vi /etc/security/pwquality.conf
  5. # 示例配置:
  6. minlen = 12
  7. minclass = 3
  8. maxrepeat = 3
  9. dcredit = -1
  10. ucredit = -1
  11. lcredit = -1
  12. ocredit = -1
复制代码

这些设置要求密码至少12个字符,包含至少3种字符类型(大写、小写、数字、特殊字符),最多连续重复3个相同字符,并且至少包含一个数字、一个大写字母、一个小写字母和一个特殊字符。

配置登录失败后的账户锁定策略:
  1. # 编辑/etc/pam.d/system-auth文件
  2. sudo vi /etc/pam.d/system-auth
  3. # 在auth部分添加以下行(如果不存在):
  4. auth required pam_tally2.so deny=5 unlock_time=900 onerr=fail audit
  5. # 在account部分添加以下行(如果不存在):
  6. account required pam_tally2.so
复制代码

此配置将在5次登录失败后锁定账户15分钟。

文件系统与权限安全

检查关键系统文件的权限:
  1. # 检查关键目录权限
  2. ls -ld /etc /etc/passwd /etc/shadow /etc/group /etc/gshadow
  3. # 检查SUID/SGID文件
  4. find / -type f \( -perm -4000 -o -perm -2000 \) -ls 2>/dev/null
  5. # 检查全局可写文件
  6. find / -type f -perm -o+w -ls 2>/dev/null
  7. # 检查无主文件
  8. find / -nouser -o -nogroup -ls 2>/dev/null
复制代码

对于敏感数据,可以使用LUKS(Linux Unified Key Setup)进行加密:
  1. # 安装cryptsetup
  2. sudo dnf install -y cryptsetup
  3. # 创建加密分区(假设设备为/dev/sdb1)
  4. sudo cryptsetup luksFormat /dev/sdb1
  5. sudo cryptsetup open /dev/sdb1 encrypted_data
  6. sudo mkfs.ext4 /dev/mapper/encrypted_data
  7. sudo mount /dev/mapper/encrypted_data /mnt/encrypted
  8. # 创建自动挂载配置
  9. echo "encrypted_data /dev/sdb1 /mnt/encrypted ext4 defaults 0 0" | sudo tee -a /etc/crypttab
  10. echo "/dev/mapper/encrypted_data /mnt/encrypted ext4 defaults 0 0" | sudo tee -a /etc/fstab
复制代码

网络安全配置

防火墙配置

Rocky Linux使用firewalld作为默认防火墙管理工具:
  1. # 安装并启用firewalld
  2. sudo dnf install -y firewalld
  3. sudo systemctl enable --now firewalld
  4. # 查看默认区域和活动区域
  5. sudo firewall-cmd --get-default-zone
  6. sudo firewall-cmd --get-active-zones
  7. # 开放特定端口(如HTTP和HTTPS)
  8. sudo firewall-cmd --permanent --add-service=http
  9. sudo firewall-cmd --permanent --add-service=https
  10. sudo firewall-cmd --reload
  11. # 限制特定IP访问
  12. sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" service name="ssh" accept'
  13. sudo firewall-cmd --reload
  14. # 拒绝特定IP访问
  15. sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.0.0.100" reject'
  16. sudo firewall-cmd --reload
复制代码

网络服务安全

SSH是服务器管理的常用工具,但其默认配置可能存在安全风险:
  1. # 编辑SSH配置文件
  2. sudo vi /etc/ssh/sshd_config
  3. # 建议的安全配置:
  4. Port 2222  # 更改默认端口
  5. PermitRootLogin no  # 禁止root登录
  6. PasswordAuthentication no  # 禁用密码认证,仅允许密钥认证
  7. PubkeyAuthentication yes  # 启用公钥认证
  8. PermitEmptyPasswords no  # 禁止空密码
  9. MaxAuthTries 3  # 最大认证尝试次数
  10. LoginGraceTime 60  # 登录宽限时间
  11. AllowUsers user1 user2  # 仅允许特定用户登录
  12. AllowGroups sshusers  # 仅允许特定组登录
  13. # 重启SSH服务
  14. sudo systemctl restart sshd
复制代码

减少攻击面需要禁用不必要的服务:
  1. # 列出所有启用的服务
  2. sudo systemctl list-unit-files | grep enabled
  3. # 禁用不必要的服务(示例)
  4. sudo systemctl disable telnet.socket
  5. sudo systemctl disable rsh.socket
  6. sudo systemctl disable rexec.socket
  7. sudo systemctl disable nfs-server
  8. sudo systemctl disable rpcbind
  9. sudo systemctl disable avahi-daemon
复制代码

网络参数调优

通过调整内核网络参数来增强安全性:
  1. # 编辑sysctl配置文件
  2. sudo vi /etc/sysctl.d/99-security.conf
  3. # 添加以下配置:
  4. # 启用IP欺骗保护
  5. net.ipv4.conf.all.rp_filter = 1
  6. net.ipv4.conf.default.rp_filter = 1
  7. # 禁用IP源路由
  8. net.ipv4.conf.all.accept_source_route = 0
  9. net.ipv4.conf.default.accept_source_route = 0
  10. net.ipv6.conf.all.accept_source_route = 0
  11. net.ipv6.conf.default.accept_source_route = 0
  12. # 忽略ICMP重定向
  13. net.ipv4.conf.all.accept_redirects = 0
  14. net.ipv4.conf.default.accept_redirects = 0
  15. net.ipv6.conf.all.accept_redirects = 0
  16. net.ipv6.conf.default.accept_redirects = 0
  17. # 忽略发送ICMP重定向
  18. net.ipv4.conf.all.send_redirects = 0
  19. net.ipv4.conf.default.send_redirects = 0
  20. # 不启用IP转发
  21. net.ipv4.ip_forward = 0
  22. net.ipv6.conf.all.forwarding = 0
  23. # 启用TCP SYN Cookie保护
  24. net.ipv4.tcp_syncookies = 1
  25. # 防止TCP时间戳攻击
  26. net.ipv4.tcp_timestamps = 0
  27. # 记录可疑数据包
  28. net.ipv4.conf.all.log_martians = 1
  29. net.ipv4.conf.default.log_martians = 1
  30. # 应用配置
  31. sudo sysctl -p /etc/sysctl.d/99-security.conf
复制代码

高级安全防护

SELinux配置

SELinux(Security-Enhanced Linux)是Linux内核的安全模块,提供强制访问控制(MAC):
  1. # 检查SELinux状态
  2. sestatus
  3. # 设置SELinux为强制模式
  4. sudo setenforce 1
  5. sudo vi /etc/selinux/config
  6. # 设置SELINUX=enforcing
  7. # 查看文件和进程的SELinux上下文
  8. ls -Z
  9. ps -eZ
  10. # 修改文件或目录的SELinux上下文
  11. sudo chcon -t httpd_sys_content_t /var/www/html/index.html
  12. # 永久保存SELinux上下文修改
  13. sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/html(/.*)?"
  14. sudo restorecon -Rv /var/www/html
  15. # 查看SELinux布尔值
  16. getsebool -a
  17. # 设置SELinux布尔值
  18. sudo setsebool -P httpd_can_network_connect on
  19. # 查看SELinux拒绝日志
  20. sudo ausearch -m avc -ts recent
  21. sudo sealert -a /var/log/audit/audit.log
复制代码

入侵检测系统

AIDE是一个文件完整性检查工具:
  1. # 安装AIDE
  2. sudo dnf install -y aide
  3. # 初始化AIDE数据库
  4. sudo aide --init
  5. # 将新数据库移动到正确位置
  6. sudo mv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz
  7. # 执行系统检查
  8. sudo aide --check
  9. # 创建定期检查任务
  10. echo "0 3 * * * root /usr/sbin/aide --check | mail -s 'AIDE Report' admin@example.com" | sudo tee -a /etc/crontab
复制代码

Fail2ban可以防止暴力破解攻击:
  1. # 安装Fail2ban
  2. sudo dnf install -y fail2ban
  3. # 创建本地配置文件
  4. sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
  5. # 编辑配置文件
  6. sudo vi /etc/fail2ban/jail.local
  7. # 示例SSH保护配置:
  8. [sshd]
  9. enabled = true
  10. port = 2222
  11. filter = sshd
  12. logpath = /var/log/secure
  13. maxretry = 3
  14. bantime = 3600
  15. findtime = 600
  16. # 启动并启用Fail2ban
  17. sudo systemctl enable --now fail2ban
  18. # 查看被禁止的IP
  19. sudo fail2ban-client status sshd
复制代码

安全审计

Auditd提供系统审计功能:
  1. # 安装auditd
  2. sudo dnf install -y audit
  3. # 启动并启用auditd
  4. sudo systemctl enable --now auditd
  5. # 添加审计规则
  6. # 监控文件访问
  7. sudo auditctl -w /etc/passwd -p wa -k passwd_changes
  8. sudo auditctl -w /etc/shadow -p wa -k shadow_changes
  9. sudo auditctl -w /etc/group -p wa -k group_changes
  10. # 监控系统调用
  11. sudo auditctl -a always,exit -F arch=b64 -S execve -k process_creation
  12. # 监控登录尝试
  13. sudo auditctl -w /var/log/lastlog -p wa -k logins
  14. sudo auditctl -w /var/log/faillog -p wa -k logins
  15. # 永久保存规则
  16. sudo auditctl -l | sudo tee /etc/audit/rules.d/audit.rules
  17. # 查看审计日志
  18. sudo ausearch -k passwd_changes
  19. sudo aureport -m
复制代码

配置集中式日志管理:
  1. # 安装rsyslog
  2. sudo dnf install -y rsyslog
  3. # 编辑rsyslog配置
  4. sudo vi /etc/rsyslog.conf
  5. # 取消注释以下行以启用TCP日志接收:
  6. # Provides TCP syslog reception
  7. module(load="imtcp")
  8. input(type="imtcp" port="514")
  9. # 配置日志模板
  10. $template RemoteLogs,"/var/log/remote/%HOSTNAME%/%PROGRAMNAME%.log"
  11. *.* ?RemoteLogs
  12. # 重启rsyslog服务
  13. sudo systemctl restart rsyslog
  14. # 配置日志轮转
  15. sudo vi /etc/logrotate.d/syslog
  16. # 示例配置:
  17. /var/log/remote/*/*.log {
  18.     daily
  19.     missingok
  20.     rotate 7
  21.     compress
  22.     delaycompress
  23.     notifempty
  24.     create 640 root adm
  25.     sharedscripts
  26.     postrotate
  27.         /usr/bin/systemctl reload rsyslog >/dev/null 2>&1 || true
  28.     endscript
  29. }
复制代码

安全监控与日志分析

实时监控工具

osquery是一个操作系统检测和分析框架:
  1. # 添加osquery仓库
  2. sudo rpm -ivh https://pkg.osquery.io/rpm/osquery-s3.rpm
  3. # 安装osquery
  4. sudo dnf install -y osquery
  5. # 配置osquery
  6. sudo vi /etc/osquery/osquery.conf
  7. # 示例配置:
  8. {
  9.   "options": {
  10.     "host_identifier": "hostname",
  11.     "schedule_splay_percent": 10
  12.   },
  13.   "schedule": {
  14.     "process_info": {
  15.       "query": "SELECT pid, name, path, cmdline FROM processes",
  16.       "interval": 60
  17.     },
  18.     "listening_ports": {
  19.       "query": "SELECT pid, port, protocol, address FROM listening_ports",
  20.       "interval": 60
  21.     },
  22.     "logged_in_users": {
  23.       "query": "SELECT user, tty, host, time FROM logged_in_users",
  24.       "interval": 360
  25.     }
  26.   }
  27. }
  28. # 启动并启用osqueryd
  29. sudo systemctl enable --now osqueryd
  30. # 交互式查询
  31. sudo osqueryi
复制代码

Wazuh是一个开源的安全监控平台:
  1. # 添加Wazuh仓库
  2. sudo rpm --import https://packages.wazuh.com/key/GPG-KEY-WAZUH
  3. echo -e '[wazuh]\ngpgcheck=1\ngpgkey=https://packages.wazuh.com/key/GPG-KEY-WAZUH\nenabled=1\nname=EL-$releasever - Wazuh\nbaseurl=https://packages.wazuh.com/4.x/yum/\nprotect=1' | sudo tee /etc/yum.repos.d/wazuh.repo
  4. # 安装Wazuh agent
  5. sudo dnf install -y wazuh-agent
  6. # 配置Wazuh agent
  7. sudo vi /var/ossec/etc/ossec.conf
  8. # 配置服务器地址(示例):
  9. <ossec_config>
  10.   <client>
  11.     <server>
  12.       <address>MANAGER_IP</address>
  13.       <port>1514</port>
  14.       <protocol>tcp</protocol>
  15.     </server>
  16.   </client>
  17. </ossec_config>
  18. # 启动并启用Wazuh agent
  19. sudo systemctl enable --now wazuh-agent
复制代码

日志分析工具

ELK Stack是一个强大的日志分析平台:
  1. # 安装Elasticsearch
  2. sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
  3. echo -e '[elasticsearch-7.x]\nname=Elasticsearch repository for 7.x packages\nbaseurl=https://artifacts.elastic.co/packages/7.x/yum\ngpgcheck=1\ngpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch\nenabled=1\nautorefresh=1\ntype=rpm-md' | sudo tee /etc/yum.repos.d/elasticsearch.repo
  4. sudo dnf install -y elasticsearch
  5. sudo systemctl enable --now elasticsearch
  6. # 安装Logstash
  7. echo -e '[logstash-7.x]\nname=Elasticsearch repository for 7.x packages\nbaseurl=https://artifacts.elastic.co/packages/7.x/yum\ngpgcheck=1\ngpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch\nenabled=1\nautorefresh=1\ntype=rpm-md' | sudo tee /etc/yum.repos.d/logstash.repo
  8. sudo dnf install -y logstash
  9. # 配置Logstash
  10. sudo vi /etc/logstash/conf.d/syslog.conf
  11. # 示例配置:
  12. input {
  13.   tcp {
  14.     port => 514
  15.     type => syslog
  16.   }
  17.   udp {
  18.     port => 514
  19.     type => syslog
  20.   }
  21. }
  22. filter {
  23.   if [type] == "syslog" {
  24.     grok {
  25.       match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" }
  26.     }
  27.     date {
  28.       match => [ "syslog_timestamp", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
  29.     }
  30.   }
  31. }
  32. output {
  33.   elasticsearch {
  34.     hosts => ["localhost:9200"]
  35.     index => "syslog-%{+YYYY.MM.dd}"
  36.   }
  37. }
  38. # 启动并启用Logstash
  39. sudo systemctl enable --now logstash
  40. # 安装Kibana
  41. echo -e '[kibana-7.x]\nname=Kibana repository for 7.x packages\nbaseurl=https://artifacts.elastic.co/packages/7.x/yum\ngpgcheck=1\ngpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch\nenabled=1\nautorefresh=1\ntype=rpm-md' | sudo tee /etc/yum.repos.d/kibana.repo
  42. sudo dnf install -y kibana
  43. # 配置Kibana
  44. sudo vi /etc/kibana/kibana.yml
  45. # 设置服务器地址:
  46. server.host: "0.0.0.0"
  47. elasticsearch.hosts: ["http://localhost:9200"]
  48. # 启动并启用Kibana
  49. sudo systemctl enable --now kibana
复制代码

安全应急响应

入侵检测与响应

Lynis是一个强大的安全审计工具:
  1. # 安装Lynis
  2. sudo dnf install -y lynis
  3. # 执行系统安全扫描
  4. sudo lynis audit system
  5. # 查看扫描报告
  6. sudo cat /var/log/lynis-report.dat
  7. # 定期执行扫描
  8. echo "0 3 * * * root /usr/bin/lynis audit system --quiet" | sudo tee -a /etc/crontab
复制代码

Chkrootkit是一个检测rootkit的工具:
  1. # 安装Chkrootkit
  2. sudo dnf install -y chkrootkit
  3. # 执行检测
  4. sudo chkrootkit
  5. # 定期执行检测
  6. echo "0 2 * * * root /usr/sbin/chkrootkit | mail -s 'Chkrootkit Report' admin@example.com" | sudo tee -a /etc/crontab
复制代码

事件响应流程

创建一个简单的自动化应急响应脚本:
  1. # 创建应急响应脚本
  2. sudo vi /usr/local/bin/incident-response.sh
  3. #!/bin/bash
  4. # 应急响应脚本
  5. # 使用方法: sudo /usr/local/bin/incident-response.sh [start|stop|status]
  6. # 配置变量
  7. LOG_DIR="/var/log/incident-response"
  8. BACKUP_DIR="/var/backups/incident-response"
  9. TIMESTAMP=$(date +"%Y%m%d-%H%M%S")
  10. ISOLATED=0
  11. # 创建必要的目录
  12. mkdir -p $LOG_DIR
  13. mkdir -p $BACKUP_DIR
  14. # 记录函数
  15. log() {
  16.     echo "[$(date +"%Y-%m-%d %H:%M:%S")] $1" | tee -a $LOG_DIR/incident-response-$TIMESTAMP.log
  17. }
  18. # 隔离系统函数
  19. isolate_system() {
  20.     if [ $ISOLATED -eq 0 ]; then
  21.         log "开始隔离系统..."
  22.         
  23.         # 断开网络连接
  24.         log "断开网络连接..."
  25.         ifdown eth0
  26.         
  27.         # 停止不必要的服务
  28.         log "停止不必要的服务..."
  29.         systemctl stop httpd
  30.         systemctl stop nginx
  31.         systemctl stop postfix
  32.         systemctl stop dovecot
  33.         
  34.         # 记录当前进程
  35.         log "记录当前进程..."
  36.         ps auxf > $LOG_DIR/processes-$TIMESTAMP.txt
  37.         
  38.         # 记录网络连接
  39.         log "记录网络连接..."
  40.         netstat -tulnp > $LOG_DIR/netstat-$TIMESTAMP.txt
  41.         ss -tulnp > $LOG_DIR/ss-$TIMESTAMP.txt
  42.         
  43.         # 记录用户登录
  44.         log "记录用户登录..."
  45.         w > $LOG_DIR/who-$TIMESTAMP.txt
  46.         last > $LOG_DIR/last-$TIMESTAMP.txt
  47.         
  48.         ISOLATED=1
  49.         log "系统隔离完成"
  50.     else
  51.         log "系统已经隔离"
  52.     fi
  53. }
  54. # 收集证据函数
  55. collect_evidence() {
  56.     log "开始收集证据..."
  57.    
  58.     # 创建证据目录
  59.     EVIDENCE_DIR="$BACKUP_DIR/evidence-$TIMESTAMP"
  60.     mkdir -p $EVIDENCE_DIR
  61.    
  62.     # 备份关键文件
  63.     log "备份关键文件..."
  64.     cp /etc/passwd $EVIDENCE_DIR/
  65.     cp /etc/shadow $EVIDENCE_DIR/
  66.     cp /etc/group $EVIDENCE_DIR/
  67.     cp /etc/sudoers $EVIDENCE_DIR/
  68.     cp /etc/ssh/sshd_config $EVIDENCE_DIR/
  69.    
  70.     # 备份日志文件
  71.     log "备份日志文件..."
  72.     tar -czf $EVIDENCE_DIR/logs-$TIMESTAMP.tar.gz /var/log/
  73.    
  74.     # 备份用户数据
  75.     log "备份用户数据..."
  76.     tar -czf $EVIDENCE_DIR/home-$TIMESTAMP.tar.gz /home/
  77.    
  78.     # 创建文件系统快照(如果支持)
  79.     if command -v lvcreate &> /dev/null; then
  80.         log "创建文件系统快照..."
  81.         # 这里需要根据实际情况调整
  82.         # lvcreate --size 1G --snapshot --name backup-$TIMESTAMP /dev/vg00/lv_root
  83.     fi
  84.    
  85.     log "证据收集完成"
  86. }
  87. # 恢复系统函数
  88. restore_system() {
  89.     log "开始恢复系统..."
  90.    
  91.     # 恢复网络连接
  92.     log "恢复网络连接..."
  93.     ifup eth0
  94.    
  95.     # 重启服务
  96.     log "重启服务..."
  97.     systemctl start httpd
  98.     systemctl start nginx
  99.     systemctl start postfix
  100.     systemctl start dovecot
  101.    
  102.     # 验证系统状态
  103.     log "验证系统状态..."
  104.     systemctl status httpd nginx postfix dovecot
  105.    
  106.     log "系统恢复完成"
  107. }
  108. # 主程序
  109. case "$1" in
  110.     start)
  111.         log "启动应急响应程序"
  112.         isolate_system
  113.         collect_evidence
  114.         ;;
  115.     stop)
  116.         log "停止应急响应程序"
  117.         restore_system
  118.         ;;
  119.     status)
  120.         if [ $ISOLATED -eq 1 ]; then
  121.             echo "系统处于隔离状态"
  122.         else
  123.             echo "系统处于正常状态"
  124.         fi
  125.         ;;
  126.     *)
  127.         echo "使用方法: $0 [start|stop|status]"
  128.         exit 1
  129.         ;;
  130. esac
  131. exit 0
  132. # 使脚本可执行
  133. sudo chmod +x /usr/local/bin/incident-response.sh
复制代码

最佳实践与建议

企业环境下的安全基线配置

创建Rocky Linux安全基线配置:
  1. # 创建安全基线脚本
  2. sudo vi /usr/local/bin/security-baseline.sh
  3. #!/bin/bash
  4. # Rocky Linux安全基线配置脚本
  5. # 使用方法: sudo /usr/local/bin/security-baseline.sh
  6. # 日志函数
  7. log() {
  8.     echo "[$(date +"%Y-%m-%d %H:%M:%S")] $1"
  9. }
  10. # 检查root权限
  11. if [ "$(id -u)" -ne 0 ]; then
  12.     echo "此脚本需要root权限运行"
  13.     exit 1
  14. fi
  15. # 创建备份目录
  16. BACKUP_DIR="/var/backups/security-baseline-$(date +"%Y%m%d-%H%M%S")"
  17. mkdir -p $BACKUP_DIR
  18. log "开始应用Rocky Linux安全基线配置..."
  19. # 1. 系统更新
  20. log "更新系统..."
  21. dnf update -y
  22. # 2. 安装必要的安全工具
  23. log "安装安全工具..."
  24. dnf install -y libpwquality aide fail2ban audit rsyslog logwatch
  25. # 3. 配置密码策略
  26. log "配置密码策略..."
  27. cp /etc/security/pwquality.conf $BACKUP_DIR/
  28. cat > /etc/security/pwquality.conf << EOF
  29. minlen = 12
  30. minclass = 3
  31. maxrepeat = 3
  32. dcredit = -1
  33. ucredit = -1
  34. lcredit = -1
  35. ocredit = -1
  36. EOF
  37. # 4. 配置账户锁定策略
  38. log "配置账户锁定策略..."
  39. cp /etc/pam.d/system-auth $BACKUP_DIR/
  40. sed -i '/auth.*pam_unix.so/a auth required pam_tally2.so deny=5 unlock_time=900 onerr=fail audit' /etc/pam.d/system-auth
  41. sed -i '/account.*pam_unix.so/a account required pam_tally2.so' /etc/pam.d/system-auth
  42. # 5. 配置SSH安全
  43. log "配置SSH安全..."
  44. cp /etc/ssh/sshd_config $BACKUP_DIR/
  45. cat > /etc/ssh/sshd_config << EOF
  46. Port 2222
  47. PermitRootLogin no
  48. PasswordAuthentication no
  49. PubkeyAuthentication yes
  50. PermitEmptyPasswords no
  51. MaxAuthTries 3
  52. LoginGraceTime 60
  53. AllowUsers admin
  54. EOF
  55. systemctl restart sshd
  56. # 6. 配置防火墙
  57. log "配置防火墙..."
  58. systemctl enable --now firewalld
  59. firewall-cmd --permanent --add-service=ssh
  60. firewall-cmd --permanent --remove-service=dhcpv6-client
  61. firewall-cmd --permanent --remove-service=mdns
  62. firewall-cmd --reload
  63. # 7. 配置SELinux
  64. log "配置SELinux..."
  65. setenforce 1
  66. sed -i 's/SELINUX=disabled/SELINUX=enforcing/' /etc/selinux/config
  67. sed -i 's/SELINUX=permissive/SELINUX=enforcing/' /etc/selinux/config
  68. # 8. 配置网络参数
  69. log "配置网络参数..."
  70. cat > /etc/sysctl.d/99-security.conf << EOF
  71. # IP欺骗保护
  72. net.ipv4.conf.all.rp_filter = 1
  73. net.ipv4.conf.default.rp_filter = 1
  74. # 禁用IP源路由
  75. net.ipv4.conf.all.accept_source_route = 0
  76. net.ipv4.conf.default.accept_source_route = 0
  77. net.ipv6.conf.all.accept_source_route = 0
  78. net.ipv6.conf.default.accept_source_route = 0
  79. # 忽略ICMP重定向
  80. net.ipv4.conf.all.accept_redirects = 0
  81. net.ipv4.conf.default.accept_redirects = 0
  82. net.ipv6.conf.all.accept_redirects = 0
  83. net.ipv6.conf.default.accept_redirects = 0
  84. # 忽略发送ICMP重定向
  85. net.ipv4.conf.all.send_redirects = 0
  86. net.ipv4.conf.default.send_redirects = 0
  87. # 不启用IP转发
  88. net.ipv4.ip_forward = 0
  89. net.ipv6.conf.all.forwarding = 0
  90. # 启用TCP SYN Cookie保护
  91. net.ipv4.tcp_syncookies = 1
  92. # 防止TCP时间戳攻击
  93. net.ipv4.tcp_timestamps = 0
  94. # 记录可疑数据包
  95. net.ipv4.conf.all.log_martians = 1
  96. net.ipv4.conf.default.log_martians = 1
  97. EOF
  98. sysctl -p /etc/sysctl.d/99-security.conf
  99. # 9. 配置AIDE
  100. log "配置AIDE..."
  101. aide --init
  102. mv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz
  103. # 10. 配置Fail2ban
  104. log "配置Fail2ban..."
  105. systemctl enable --now fail2ban
  106. cat > /etc/fail2ban/jail.local << EOF
  107. [sshd]
  108. enabled = true
  109. port = 2222
  110. filter = sshd
  111. logpath = /var/log/secure
  112. maxretry = 3
  113. bantime = 3600
  114. findtime = 600
  115. EOF
  116. systemctl restart fail2ban
  117. # 11. 配置审计
  118. log "配置审计..."
  119. systemctl enable --now auditd
  120. cat > /etc/audit/rules.d/audit.rules << EOF
  121. -w /etc/passwd -p wa -k passwd_changes
  122. -w /etc/shadow -p wa -k shadow_changes
  123. -w /etc/group -p wa -k group_changes
  124. -a always,exit -F arch=b64 -S execve -k process_creation
  125. -w /var/log/lastlog -p wa -k logins
  126. -w /var/log/faillog -p wa -k logins
  127. EOF
  128. systemctl restart auditd
  129. # 12. 配置日志
  130. log "配置日志..."
  131. systemctl enable --now rsyslog
  132. cat > /etc/logrotate.conf << EOF
  133. weekly
  134. rotate 4
  135. create
  136. dateext
  137. compress
  138. delaycompress
  139. missingok
  140. notifempty
  141. sharedscripts
  142. postrotate
  143.     /usr/bin/systemctl reload rsyslog >/dev/null 2>&1 || true
  144. endscript
  145. EOF
  146. # 13. 禁用不必要的服务
  147. log "禁用不必要的服务..."
  148. systemctl disable telnet.socket
  149. systemctl disable rsh.socket
  150. systemctl disable rexec.socket
  151. systemctl disable nfs-server
  152. systemctl disable rpcbind
  153. systemctl disable avahi-daemon
  154. # 14. 创建定期安全检查任务
  155. log "创建定期安全检查任务..."
  156. cat > /etc/cron.daily/security-check << EOF
  157. #!/bin/bash
  158. # 每日安全检查脚本
  159. # 运行AIDE检查
  160. /usr/sbin/aide --check | mail -s 'AIDE Report' admin@example.com
  161. # 运行Lynis扫描
  162. /usr/bin/lynis audit system --quiet | mail -s 'Lynis Report' admin@example.com
  163. # 运行Chkrootkit检查
  164. /usr/sbin/chkrootkit | mail -s 'Chkrootkit Report' admin@example.com
  165. # 检查磁盘空间
  166. df -h | awk '{print $5}' | grep -v Use | sort -n | tail -1 | cut -d'%' -f1 | awk '{if ($1 > 90) system("echo "磁盘空间不足" | mail -s "Disk Space Alert" admin@example.com")}'
  167. # 检查系统负载
  168. uptime | awk '{print $10}' | cut -d',' -f1 | awk '{if ($1 > 5) system("echo "系统负载过高" | mail -s "System Load Alert" admin@example.com")}'
  169. EOF
  170. chmod +x /etc/cron.daily/security-check
  171. log "Rocky Linux安全基线配置完成"
  172. log "备份文件保存在: $BACKUP_DIR"
  173. exit 0
  174. # 使脚本可执行
  175. sudo chmod +x /usr/local/bin/security-baseline.sh
复制代码

安全意识培训

安全意识培训是企业安全的重要组成部分:
  1. # 创建安全意识培训文档
  2. sudo vi /etc/security/security-awareness.md
  3. # 示例内容:
  4. # # 安全意识培训指南
  5. # ## 1. 密码安全
  6. # - 使用强密码(至少12个字符,包含大小写字母、数字和特殊字符)
  7. # - 不同系统使用不同密码
  8. # - 定期更换密码
  9. # - 使用密码管理器
  10. # - 启用多因素认证
  11. # ## 2. 邮件安全
  12. # - 警惕钓鱼邮件
  13. - 不点击可疑链接
  14. - 不下载可疑附件
  15. - 验证发件人身份
  16. - 使用加密邮件
  17. # ## 3. 网络安全
  18. # - 使用VPN连接公司网络
  19. # - 避免使用公共Wi-Fi处理敏感信息
  20. # - 确保网站使用HTTPS
  21. # - 不随意连接未知USB设备
  22. # ## 4. 社交工程防护
  23. # - 不随意透露个人信息
  24. # - 验证身份请求
  25. # - 警惕紧急请求
  26. # - 报告可疑活动
  27. # ## 5. 设备安全
  28. # - 使用设备加密
  29. # - 设置设备锁屏密码
  30. # - 及时更新操作系统和应用
  31. # - 不越狱或root设备
  32. # ## 6. 数据处理
  33. # - 遵循数据分类标准
  34. # - 不在个人设备上处理敏感数据
  35. # - 安全传输数据
  36. # - 正确处置数据
  37. # ## 7. 事件报告
  38. # - 了解安全事件类型
  39. # - 知道如何报告安全事件
  40. # - 不试图自行解决安全问题
  41. # - 配合安全调查
复制代码

总结

Rocky Linux系统安全是一个多层次、全方位的工作,需要从基础检查到高级防护全面考虑。本文详细介绍了Rocky Linux系统安全校验的各个方面,包括:

1. 基础安全检查:系统更新、用户管理、文件权限等
2. 网络安全配置:防火墙设置、网络服务安全等
3. 高级安全防护:SELinux、入侵检测系统、安全审计等
4. 安全监控与日志分析:实时监控工具和日志分析平台
5. 安全应急响应:入侵检测与响应、事件响应流程
6. 最佳实践与建议:企业环境下的安全策略和安全意识培训

通过实施这些安全措施,企业可以显著提高Rocky Linux服务器的安全性,降低安全风险,确保服务器安全无忧。然而,安全是一个持续的过程,需要定期评估、更新和改进安全策略,以应对不断变化的安全威胁。

希望本文提供的实用技巧和详细示例能够帮助IT管理员更好地保护Rocky Linux服务器,构建安全可靠的企业IT环境。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

频道订阅

频道订阅

加入社群

加入社群

联系我们|TG频道|RSS

Powered by Pixtech

© 2025 Pixtech Team.