|
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
引言
在当今数字化时代,服务器安全已成为企业和个人不可忽视的重要议题。CentOS作为企业级Linux发行版,以其稳定性和安全性广受欢迎,但默认安装并不能提供足够的安全保障。本文将从基础配置到高级技巧,全面介绍CentOS服务器的安全优化方案,帮助系统管理员构建一个更加安全可靠的服务器环境。
一、基础安全配置
1. 系统更新与补丁管理
保持系统最新是安全的第一道防线。及时更新系统可以修复已知的安全漏洞,防止被攻击者利用。
- # 检查系统版本
- cat /etc/redhat-release
- # 更新系统软件包
- yum update -y
- # 设置自动更新
- yum install -y yum-cron
- systemctl enable yum-cron
- systemctl start yum-cron
- # 配置yum-cron自动应用安全更新
- vi /etc/yum/yum-cron.conf
- # 修改以下配置
- apply_updates = yes
- update_cmd = minimal-security
复制代码
2. 账户安全配置
账户安全是系统安全的基础,合理的账户管理可以大大提高系统的安全性。
- # 禁用root远程登录
- vi /etc/ssh/sshd_config
- # 修改或添加以下行
- PermitRootLogin no
- # 创建普通用户并设置sudo权限
- useradd admin
- passwd admin # 设置强密码
- usermod -aG wheel admin # 添加到wheel组获得sudo权限
- # 禁用不必要账户
- for user in adm lp sync shutdown halt mail news uucp operator games gopher; do
- userdel -r $user 2>/dev/null
- done
- # 设置密码策略
- vi /etc/login.defs
- # 修改以下配置
- PASS_MAX_DAYS 90
- PASS_MIN_DAYS 7
- PASS_WARN_AGE 14
- # 安装并配置PAM模块进行密码强度检查
- yum install -y libpwquality
- vi /etc/security/pwquality.conf
- # 设置以下参数
- minlen = 12
- minclass = 4
- dcredit = -1
- ucredit = -1
- lcredit = -1
- ocredit = -1
复制代码
3. SSH安全配置
SSH是远程管理服务器的常用工具,加强SSH配置可以有效防止未授权访问。
- # 备份原始SSH配置
- cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
- # 修改SSH配置
- vi /etc/ssh/sshd_config
- # 修改或添加以下行
- Port 2222 # 更改默认端口
- PermitRootLogin no
- MaxAuthTries 3
- MaxSessions 3
- PasswordAuthentication no # 禁用密码认证,使用密钥认证
- PubkeyAuthentication yes
- AuthorizedKeysFile .ssh/authorized_keys
- PermitEmptyPasswords no
- ClientAliveInterval 300
- ClientAliveCountMax 2
- AllowUsers admin # 只允许特定用户登录
- # 重启SSH服务
- systemctl restart sshd
- # 为用户设置SSH密钥认证
- su - admin
- mkdir -p ~/.ssh
- chmod 700 ~/.ssh
- echo "your_public_key" > ~/.ssh/authorized_keys
- chmod 600 ~/.ssh/authorized_keys
复制代码
4. 防火墙基础设置
防火墙是网络安全的第一道屏障,正确配置防火墙规则可以阻止不必要的网络访问。
- # 安装并启用firewalld
- yum install -y firewalld
- systemctl enable firewalld
- systemctl start firewalld
- # 查看默认区域
- firewall-cmd --get-default-zone
- # 设置默认区域为public
- firewall-cmd --set-default-zone=public
- # 开放必要端口(示例:SSH端口2222)
- firewall-cmd --permanent --add-port=2222/tcp
- # 开放HTTP和HTTPS服务(如果需要)
- firewall-cmd --permanent --add-service=http
- firewall-cmd --permanent --add-service=https
- # 阻止Ping请求
- firewall-cmd --permanent --add-protocol=icmp --add-rich-rule='rule protocol value=icmp drop'
- # 重新加载防火墙配置
- firewall-cmd --reload
- # 查看防火墙规则
- firewall-cmd --list-all
复制代码
二、中级安全优化
1. 文件系统安全
文件系统安全是保护数据不被未授权访问的关键。
- # 设置关键文件权限
- chmod 600 /etc/passwd-
- chmod 600 /etc/shadow-
- chmod 600 /etc/group-
- chmod 600 /etc/gshadow-
- chmod 750 /etc/sudoers
- chmod 750 /etc/sudoers.d
- # 查找并设置SUID/SGID文件
- find / -type f \( -perm -4000 -o -perm -2000 \) -ls
- # 移除不必要的SUID/SGID权限
- chmod a-s /path/to/file
- # 查找并设置全局可写文件
- find / -type f -perm -o+w -ls
- # 移除不必要的全局写权限
- chmod o-w /path/to/file
- # 查找并设置无主文件
- find / -nouser -o -nogroup -ls
- # 为无主文件分配所有者或删除
- # 配置/etc/fstab增加安全选项
- vi /etc/fstab
- # 为/、/boot、/home分区添加nodev、nosuid、noexec选项(根据需要)
- /dev/sda1 / ext4 defaults,nodev,nosuid 1 1
- /dev/sda2 /boot ext4 defaults,nodev,nosuid,noexec 1 2
- # 重新挂载分区
- mount -o remount /
- mount -o remount /boot
复制代码
2. 服务安全加固
关闭不必要的服务并加固必要服务是提高系统安全性的重要步骤。
- # 查看已启用的服务
- systemctl list-unit-files | grep enabled
- # 停止并禁用不必要的服务
- systemctl stop telnet.socket
- systemctl disable telnet.socket
- systemctl stop rsh.socket
- systemctl disable rsh.socket
- systemctl stop ypbind
- systemctl disable ypbind
- systemctl stop tftp.socket
- systemctl disable tftp.socket
- systemctl stop xinetd
- systemctl disable xinetd
- # 禁用IPv6(如果不需要)
- vi /etc/sysctl.conf
- # 添加以下行
- net.ipv6.conf.all.disable_ipv6 = 1
- net.ipv6.conf.default.disable_ipv6 = 1
- # 应用sysctl设置
- sysctl -p
- # 加固网络服务(以Nginx为例)
- vi /etc/nginx/nginx.conf
- # 修改以下配置
- user nginx;
- worker_processes auto;
- error_log /var/log/nginx/error.log crit;
- pid /run/nginx.pid;
- # 隐藏Nginx版本号
- server_tokens off;
- # 限制HTTP方法
- if ($request_method !~ ^(GET|HEAD|POST)$ ) {
- return 405;
- }
- # 重启Nginx服务
- systemctl restart nginx
复制代码
3. 安全审计与日志管理
日志是安全事件调查的重要依据,合理的日志管理可以帮助及时发现安全问题。
- # 安装并配置auditd
- yum install -y audit
- systemctl enable auditd
- systemctl start auditd
- # 配置审计规则
- vi /etc/audit/rules.d/audit.rules
- # 添加以下规则
- # 监控文件删除
- -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 fchmodat -F auid>=1000 -F auid!=4294967295 -k perm_mod
- # 监控sudo使用
- -a always,exit -F arch=b64 -S execve -C uid!=euid -F euid=0 -k setuid
- # 监控登录失败
- -w /var/log/faillog -p wa -k logins
- -w /var/log/lastlog -p wa -k logins
- # 重载audit规则
- augenrules --load
- # 配置日志轮转
- vi /etc/logrotate.d/syslog
- # 添加或修改以下配置
- /var/log/cron
- /var/log/maillog
- /var/log/messages
- /var/log/secure
- /var/log/spooler
- {
- sharedscripts
- postrotate
- /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
- endscript
- daily
- rotate 90
- compress
- delaycompress
- missingok
- notifempty
- create 640 root root
- }
- # 安装并配置logwatch进行日志分析
- yum install -y logwatch
- vi /etc/logwatch/conf/logwatch.conf
- # 修改以下配置
- Output = mail
- Format = html
- MailTo = admin@example.com
- Range = yesterday
- Detail = High
- # 设置每日日志报告
- echo "0 0 * * * /usr/sbin/logwatch" > /etc/cron.daily/00logwatch
- chmod +x /etc/cron.daily/00logwatch
复制代码
4. 入侵检测系统配置
入侵检测系统(IDS)可以帮助及时发现潜在的入侵行为。
- # 安装AIDE(高级入侵检测环境)
- yum install -y aide
- # 初始化AIDE数据库
- aide --init
- # 移动数据库到标准位置
- mv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz
- # 配置AIDE
- vi /etc/aide.conf
- # 根据需要修改检查规则
- # 创建每日AIDE检查脚本
- vi /etc/cron.daily/aide
- #!/bin/bash
- /usr/sbin/aide --check
- exit 0
- # 设置脚本可执行权限
- chmod +x /etc/cron.daily/aide
- # 安装OSSEC(开源主机入侵检测系统)
- yum install -y ossec-hids-server
- # 配置OSSEC
- vi /var/ossec/etc/ossec.conf
- # 配置邮件通知、系统监控、文件完整性检查等
- # 启动OSSEC
- /var/ossec/bin/ossec-control start
- # 安装并配置Fail2ban防止暴力破解
- yum install -y epel-release
- yum install -y fail2ban
- # 创建Fail2ban配置文件
- cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
- # 配置SSH保护
- vi /etc/fail2ban/jail.local
- [sshd]
- enabled = true
- port = 2222
- filter = sshd
- logpath = /var/log/secure
- maxretry = 3
- bantime = 3600
- findtime = 600
- # 启动Fail2ban
- systemctl enable fail2ban
- systemctl start fail2ban
- # 查看被禁止的IP
- fail2ban-client status sshd
复制代码
三、高级安全技巧
1. SELinux高级配置
SELinux是Linux内核中的强制访问控制(MAC)系统,可以提供比传统权限更细粒度的访问控制。
- # 检查SELinux状态
- sestatus
- # 设置SELinux为强制模式
- setenforce 1
- vi /etc/selinux/config
- # 修改以下行
- SELINUX=enforcing
- # 查看SELinux布尔值
- getsebool -a
- # 设置SELinux布尔值(示例:允许HTTP连接网络)
- setsebool -P httpd_can_network_connect on
- # 查看文件的安全上下文
- ls -Z /path/to/file
- # 修改文件的安全上下文
- chcon -t httpd_sys_content_t /path/to/file
- # 恢复文件默认安全上下文
- restorecon -v /path/to/file
- # 创建自定义SELinux策略模块
- # 示例:允许Nginx连接外部网络
- ausearch -m avc -ts recent | grep nginx
- # 根据审计日志创建策略模块
- audit2allow -M nginx_connect
- semodule -i nginx_connect.pp
- # 查看已加载的SELinux策略模块
- semodule -l
复制代码
2. 安全内核参数调优
通过调整内核参数,可以增强系统的网络安全性。
- # 配置sysctl安全参数
- vi /etc/sysctl.d/security.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
- # 防止IP地址欺骗
- net.ipv4.ip_forward = 0
- net.ipv4.conf.all.send_redirects = 0
- net.ipv4.conf.default.send_redirects = 0
- # 增加文件描述符限制
- fs.file-max = 65535
- # 应用sysctl设置
- sysctl -p /etc/sysctl.d/security.conf
- # 设置进程限制
- vi /etc/security/limits.conf
- # 添加以下配置
- * soft nofile 65535
- * hard nofile 65535
- * soft nproc 4096
- * hard nproc 4096
- # 配置PAM模块
- vi /etc/pam.d/system-auth
- # 添加以下行
- session required pam_limits.so
复制代码
3. 系统监控与异常检测
实时监控系统状态和异常行为是及时发现安全问题的关键。
- # 安装并配置Zabbix监控系统
- yum install -y zabbix-server-mysql zabbix-web-mysql zabbix-agent
- # 创建Zabbix数据库
- mysql -u root -p
- CREATE DATABASE zabbix CHARACTER SET utf8 COLLATE utf8_bin;
- GRANT ALL PRIVILEGES ON zabbix.* TO zabbix@localhost IDENTIFIED BY 'password';
- FLUSH PRIVILEGES;
- EXIT;
- # 导入初始数据
- zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix
- # 配置Zabbix服务器
- vi /etc/zabbix/zabbix_server.conf
- DBHost=localhost
- DBName=zabbix
- DBUser=zabbix
- DBPassword=password
- # 启动Zabbix服务
- systemctl enable zabbix-server zabbix-agent httpd
- systemctl start zabbix-server zabbix-agent httpd
- # 安装并配置Osquery进行系统监控
- yum install -y https://osquery-packages.s3.amazonaws.com/centos7/noarch/osquery-3.3.2-1.linux.x86_64.rpm
- # 配置Osquery
- vi /etc/osquery/osquery.conf
- {
- "options": {
- "config_plugin": "filesystem",
- "logger_plugin": "filesystem",
- "logger_path": "/var/log/osquery",
- "schedule_splay_percent": 10
- },
- "schedule": {
- "system_info": {
- "query": "SELECT * FROM system_info;",
- "interval": 3600
- },
- "listening_ports": {
- "query": "SELECT pid, port, protocol, address FROM listening_ports;",
- "interval": 300
- },
- "processes": {
- "query": "SELECT name, pid, path, cmdline FROM processes;",
- "interval": 300
- },
- "suspicious_processes": {
- "query": "SELECT name, pid, path, cmdline FROM processes WHERE name LIKE '%crypto%' OR name LIKE '%miner%' OR name LIKE '%xmr%';",
- "interval": 600
- },
- "crontab": {
- "query": "SELECT * FROM crontab;",
- "interval": 3600
- }
- }
- }
- # 启动Osquery
- systemctl enable osqueryd
- systemctl start osqueryd
- # 安装Wazuh(开源安全监控平台)
- yum install -y wazuh-server wazuh-agent wazuh-api
- # 配置Wazuh
- vi /var/ossec/etc/ossec.conf
- # 配置文件完整性监控、rootkit检测、日志监控等
- # 启动Wazuh
- systemctl enable wazuh-server
- systemctl enable wazuh-agent
- systemctl enable wazuh-api
- systemctl start wazuh-server
- systemctl start wazuh-agent
- systemctl start wazuh-api
复制代码
4. 安全应急响应
建立完善的安全应急响应机制,可以在发生安全事件时快速有效地应对。
四、综合安全策略
1. 安全基线建设
建立安全基线是确保系统安全的基础,它定义了系统必须满足的最低安全要求。
2. 安全合规性检查
对于需要符合特定安全标准(如PCI-DSS、HIPAA、GDPR等)的系统,定期进行合规性检查是必要的。
3. 定期安全评估
定期进行安全评估可以发现潜在的安全问题,并及时采取措施加以解决。
五、总结与最佳实践
CentOS服务器的安全优化是一个持续的过程,需要系统管理员不断学习和适应新的安全威胁。通过本文介绍的基础配置、中级优化和高级技巧,您可以构建一个更加安全可靠的服务器环境。
最佳实践总结:
1. 保持系统更新:定期应用安全补丁,确保系统免受已知漏洞的威胁。
2. 最小权限原则:为用户和服务分配最小必要权限,减少潜在的安全风险。
3. 深度防御:采用多层次的安全措施,包括防火墙、SELinux、入侵检测系统等。
4. 定期监控与审计:实施全面的日志记录和监控,及时发现异常活动。
5. 安全基线与合规性:建立安全基线,定期进行合规性检查,确保系统符合安全标准。
6. 应急响应计划:制定并测试安全事件应急响应计划,确保在发生安全事件时能够快速有效地应对。
7. 安全意识培训:对系统管理员和用户进行安全意识培训,提高整体安全水平。
保持系统更新:定期应用安全补丁,确保系统免受已知漏洞的威胁。
最小权限原则:为用户和服务分配最小必要权限,减少潜在的安全风险。
深度防御:采用多层次的安全措施,包括防火墙、SELinux、入侵检测系统等。
定期监控与审计:实施全面的日志记录和监控,及时发现异常活动。
安全基线与合规性:建立安全基线,定期进行合规性检查,确保系统符合安全标准。
应急响应计划:制定并测试安全事件应急响应计划,确保在发生安全事件时能够快速有效地应对。
安全意识培训:对系统管理员和用户进行安全意识培训,提高整体安全水平。
通过实施这些最佳实践,您可以显著提高CentOS服务器的安全性,保护关键数据和系统资源免受各种安全威胁。记住,安全是一个持续的过程,需要不断地评估、改进和适应新的安全挑战。 |
|