系统认证日志
/var/log/auth.log
(Debian/Ubuntu)/var/log/secure
(RHEL/CentOS)系统消息日志
/var/log/messages
(传统系统)/var/log/syslog
(Debian/Ubuntu)服务特定日志
/var/log/apache2/
或 /var/log/nginx/
/var/log/mysql.log
), PostgreSQL/var/log/mail.log
auditd 审计系统
# 安装auditd
sudo apt-get install auditd # Debian/Ubuntu
sudo yum install audit # RHEL/CentOS
# 常用命令
sudo auditctl -l # 查看当前规则
sudo ausearch -k mykey # 按key搜索审计事件
sudo aureport -au # 用户认证报告
配置审计规则示例
# 监控/etc/passwd文件修改
sudo auditctl -w /etc/passwd -p wa -k passwd_changes
# 监控SSH配置文件
sudo auditctl -w /etc/ssh/sshd_config -p wa -k sshd_config_changes
AIDE (Advanced Intrusion Detection Environment)
# 安装
sudo apt-get install aide
# 初始化数据库
sudo aideinit
# 检查变更
sudo aide --check
OSSEC HIDS
# 安装
sudo apt-get install ossec-hids
# 主要配置文件
/var/ossec/etc/ossec.conf
Logwatch
# 安装
sudo apt-get install logwatch
# 配置
/usr/share/logwatch/default.conf/logwatch.conf
Fail2ban (防止暴力破解)
# 安装
sudo apt-get install fail2ban
# 主要配置文件
/etc/fail2ban/jail.conf
/etc/fail2ban/filter.d/
ELK Stack (Elasticsearch, Logstash, Kibana)
异常登录检测脚本
#!/bin/bash
LOG_FILE="/var/log/auth.log"
OUTPUT_FILE="/tmp/suspicious_logins.txt"
echo "可疑登录尝试报告 - $(date)" > $OUTPUT_FILE
echo "=================================" >> $OUTPUT_FILE
# 检测失败的SSH尝试
grep "Failed password" $LOG_FILE | awk '{print $1,$2,$3,$9,$11}' | sort | uniq -c | sort -nr >> $OUTPUT_FILE
# 检测成功登录的非正常时间
grep "Accepted password" $LOG_FILE | awk '$3 > "22:00:00" || $3 < "06:00:00" {print $1,$2,$3,$9,$11}' >> $OUTPUT_FILE
# 发送邮件通知
mail -s "服务器登录异常报告" admin@example.com < $OUTPUT_FILE
文件完整性检查脚本
#!/bin/bash
CRITICAL_FILES="/etc/passwd /etc/shadow /etc/sudoers"
BACKUP_DIR="/root/file_backups"
mkdir -p $BACKUP_DIR
for file in $CRITICAL_FILES; do
if [ -f "$file" ]; then
current_hash=$(sha256sum $file | awk '{print $1}')
backup_file="$BACKUP_DIR/$(basename $file).sha256"
if [ -f "$backup_file" ]; then
previous_hash=$(cat $backup_file)
if [ "$current_hash" != "$previous_hash" ]; then
echo "警告: $file 已被修改!" | mail -s "关键文件变更警报" admin@example.com
fi
fi
echo $current_hash > $backup_file
fi
done
日志轮转配置
logrotate
确保日志不会无限增长/etc/logrotate.d/
远程日志服务器
rsyslog
或syslog-ng
将日志发送到远程服务器定期审计
网络监控
netstat -tulnp
或ss -tulnp
监控开放端口iftop
或nethogs
监控异常网络流量通过实施这些监控和日志分析策略,您可以大大提高Linux服务器的安全性,及时发现并应对潜在的入侵和异常活动。