fail2ban+ufw+ipset搭建防御

Fail2ban + UFW + IPSet 搭建防御

目录

  1. 服务器面临的安全威胁
  2. 多层次防御架构概述
  3. 第一层防御:IP 黑名单系统搭建
  4. 第二层防御:动态防御(Fail2ban)
  5. 第三层防御:防火墙规则优化
  6. 第四层防御:应用层安全
  7. 测试与验证
  8. 防护体系的优势与结论

服务器面临的安全威胁

部署服务器时,常见的安全威胁包括:

  • 端口扫描攻击:攻击者扫描服务器开放的端口,寻找漏洞。
  • 暴力破解:针对 SSH、数据库、管理面板等服务的密码猜测攻击。
  • 恶意爬虫:消耗服务器资源的恶意爬虫或扫描工具。
  • 已知漏洞利用:针对 Web 应用、CMS 系统的已知漏洞利用。
  • 敏感文件探测:尝试访问 .env.git/config 等敏感配置文件。

多层次防御架构概述

本方案提供四个层次的防御体系:

  1. IP 黑名单系统:基于 IPSet 实现高效的 IP 过滤。
  2. 动态防御:通过 Fail2ban 实时分析日志,动态封禁恶意 IP。
  3. 防火墙规则优化:确保规则顺序和优先级合理,提升性能。
  4. 应用层安全:加固 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 提供高效过滤。
  • 可扩展性强:支持自定义规则。

通过以上配置,服务器安全性将显著提升。