Fail2ban + UFW + IPSet 搭建防御
目录
- 服务器面临的安全威胁
- 多层次防御架构概述
- 第一层防御:IP 黑名单系统搭建
- 第二层防御:动态防御(Fail2ban)
- 第三层防御:防火墙规则优化
- 第四层防御:应用层安全
- 测试与验证
- 防护体系的优势与结论
服务器面临的安全威胁
部署服务器时,常见的安全威胁包括:
- 端口扫描攻击:攻击者扫描服务器开放的端口,寻找漏洞。
- 暴力破解:针对 SSH、数据库、管理面板等服务的密码猜测攻击。
- 恶意爬虫:消耗服务器资源的恶意爬虫或扫描工具。
- 已知漏洞利用:针对 Web 应用、CMS 系统的已知漏洞利用。
- 敏感文件探测:尝试访问
.env
、.git/config
等敏感配置文件。
多层次防御架构概述
本方案提供四个层次的防御体系:
- IP 黑名单系统:基于 IPSet 实现高效的 IP 过滤。
- 动态防御:通过 Fail2ban 实时分析日志,动态封禁恶意 IP。
- 防火墙规则优化:确保规则顺序和优先级合理,提升性能。
- 应用层安全:加固 Web 服务和各类应用,保护敏感数据。
第一层防御:IP 黑名单系统搭建
IP 黑名单系统的优势
- 整合多个可信来源的黑名单,确保覆盖面广。
- 使用 IPSet 提供高性能 IP 过滤,处理效率高。
- 在网络栈早期拦截恶意流量,减少资源消耗。
搭建步骤
1. 安装必要的软件包
apt update
apt install -y ipset iptables
systemctl enable ipset
2. 创建目录结构
mkdir -p /opt/ip-blacklist/{scripts,config,data,backup,logs}
3. 创建配置文件
文件路径:/opt/ip-blacklist/config/blacklist-config.conf
# IP黑名单管理器配置文件
SCRIPT_DIR="/opt/ip-blacklist/scripts"
DATA_DIR="/opt/ip-blacklist/data"
BACKUP_DIR="/opt/ip-blacklist/backup"
LOG_DIR="/opt/ip-blacklist/logs"
LOG_FILE="${LOG_DIR}/blacklist-manager.log"
BLACKLIST_NAME="blacklist"
TEMP_BLACKLIST_NAME="blacklist_temp"
BLACKLIST_SOURCES=(
"abuseipdb_100 https://cdn.jsdelivr.net/gh/borestad/blocklist-abuseipdb/abuseipdb-s100-30d.ipv4 plain"
"abuseipdb_75 https://cdn.jsdelivr.net/gh/LittleJake/ip-blacklist/abuseipdb_blacklist_ip_score_75.txt plain"
)
MAX_IPS=1100000
4. 创建黑名单管理脚本
文件路径:/opt/ip-blacklist/scripts/blacklist-manager.sh
#!/bin/bash
set -e
CONFIG_FILE="/opt/ip-blacklist/config/blacklist-config.conf"
source "$CONFIG_FILE"
log() {
local level="$1"
local message="$2"
echo "[$(date)] [$level] $message" | tee -a "$LOG_FILE"
}
download_blacklists() {
log "INFO" "开始下载黑名单"
for source_info in "${BLACKLIST_SOURCES[@]}"; do
read -r name url type <<< "$source_info"
curl -s -o "$DATA_DIR/${name}.txt" "$url"
log "INFO" "下载完成:$name"
done
}
process_blacklists() {
log "INFO" "处理黑名单"
sort -u "$DATA_DIR"/*.txt > "$DATA_DIR/blacklist.txt"
}
apply_ipset() {
ipset create "$TEMP_BLACKLIST_NAME" hash:ip family inet
while read -r ip; do ipset add "$TEMP_BLACKLIST_NAME" "$ip"; done < "$DATA_DIR/blacklist.txt"
ipset swap "$TEMP_BLACKLIST_NAME" "$BLACKLIST_NAME"
}
main() {
download_blacklists
process_blacklists
apply_ipset
log "INFO" "IP 黑名单管理完成"
}
main
5. 定时任务
文件路径:/etc/cron.d/ip-blacklist-update
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
0 */6 * * * root /opt/ip-blacklist/scripts/blacklist-manager.sh
6. 创建系统服务
文件路径:/etc/systemd/system/ip-blacklist.service
[Unit]
Description=IP 黑名单防火墙服务
After=network.target
[Service]
ExecStart=/opt/ip-blacklist/scripts/blacklist-manager.sh
[Install]
WantedBy=multi-user.target
7. 首次运行
bash /opt/ip-blacklist/scripts/blacklist-manager.sh
第二层防御:动态防御(Fail2ban)
1. 安装 Fail2ban
apt update
apt install -y fail2ban
2. 配置 Fail2ban
[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 3
banaction = iptables-ipset-proto4
ignoreip = 127.0.0.1
[sshd]
enabled = true
3. 自定义过滤器
文件路径:/etc/fail2ban/filter.d/nginx-noscript.conf
[Definition]
failregex = ^.*(\.env|\.git).*$
第三层防御:防火墙规则优化
添加速率限制规则
iptables -A INPUT -p tcp --dport 80 -m conntrack --ctstate NEW -m hashlimit \
--hashlimit-name HTTP --hashlimit-above 30/sec -j DROP
第四层防御:应用层安全
Nginx 安全配置
文件路径:/etc/nginx/conf.d/security.conf
server_tokens off;
add_header X-Frame-Options "DENY";
add_header X-Content-Type-Options "nosniff";
测试与验证
ipset list blacklist
iptables -L -v -n
fail2ban-client status
防护体系的优势与结论
- 覆盖全面:从网络层到应用层。
- 高性能:IPSet 提供高效过滤。
- 可扩展性强:支持自定义规则。
通过以上配置,服务器安全性将显著提升。