基于iptables+fail2ban构建物理服务器自定义防护体系,附完整配置实录

基于iptables+fail2ban构建物理服务器自定义防护体系,附完整配置实录

当我开始搭建物理服务器时,安全问题便是我最关注的环节,黑客攻击、恶意流量以及各种网络入侵手段层出不穷。每一天,系统面临着不同程度的安全威胁。对于一个自主管理的服务器而言,如何确保网络安全、保护自己的数据,是一个必须要解决的问题。

我作为一名系统管理员,我需要设计一个既高效又简便的安全防护体系。理想的方案应该具有如下特点:

  • 防止暴力破解:黑客常通过暴力破解尝试登录,暴力破解过程会频繁产生大量的无效登录请求。
  • 防止恶意攻击:防火墙应能防止非法流量的进入,尤其是网络扫描、端口扫描、DoS/DDos等恶意行为。
  • 自动响应:理想的防护体系不仅能够阻止攻击,还能在发生攻击时自动响应、封禁攻击者,减少人工干预。

在这些需求的指引下,我选择了 iptables 和 fail2ban 作为我的防护工具。

iptables 是 Linux 系统中用于设置和维护防火墙的工具,能够精确控制数据包的过滤、转发等操作,广泛应用于网络安全。

fail2ban 是一个自动化防护工具,能够监控日志文件,识别恶意行为并自动阻止来自恶意 IP 的访问。它通过与 iptables 配合使用,可以有效地自动化网络防护工作。

通过这两个工具的结合,我可以实现一个自定义的防护体系,不仅能够防止暴力破解,还能防止各种网络攻击。

硬件配置与环境准备

在实际操作前,我首先需要明确物理服务器的硬件配置及操作系统版本。以下是我服务器的基本信息:

  • 服务器型号:DELL PowerEdge R740
  • 处理器:2 x Intel Xeon Silver 4210R (10 核,2.4 GHz)
  • 内存:64GB DDR4
  • 硬盘:2 x 1TB SSD (RAID 1 配置)
  • 操作系统:Ubuntu Server 20.04 LTS
  • 网络接口:1Gbps

我选择 Ubuntu 20.04 LTS 作为操作系统,原因在于其稳定性和广泛的社区支持。同时,所有的配置和测试都基于这个操作系统。

需求分析与方案设计

基于我的需求,我的目标是通过 iptables 和 fail2ban 构建一个结合防火墙和自动防护的安全体系。

1. 防火墙配置 (iptables)

iptables 是一个非常灵活的工具,能够通过规则对流量进行精确控制。我设计了以下几个关键的规则:

  • 默认策略:将所有未明确允许的流量拒绝。
  • 允许必要端口:只开放必要的端口,如 SSH (22)、HTTP (80)、HTTPS (443)。
  • 限制暴力破解:对 SSH 端口设置连接频率限制,防止暴力破解。
  • 防止 IP 欺骗与伪造:设置规则防止伪造源 IP 地址的流量。

2. fail2ban 配置

fail2ban 是一个能实时监控日志文件并对恶意 IP 地址进行封禁的工具。我会针对以下服务进行防护:

  • SSH:防止 SSH 密码爆破攻击。
  • Apache:防止 Web 服务器遭受暴力破解和恶意请求。
  • System Log:监控系统日志,防止其他潜在的安全威胁。

3. 自动化防护

通过 fail2ban 和 iptables 的结合,所有恶意 IP 会被自动加入黑名单,阻止其访问。同时,通过定期的日志分析,系统管理员可以及时获得攻击的详细信息,并进一步优化防护措施。

实现方法与步骤

1. 安装与配置 iptables

首先,我在 Ubuntu 系统中安装并配置 iptables:

sudo apt update
sudo apt install iptables

然后,配置 iptables 防火墙规则,设置默认策略为拒绝所有流量,允许必要端口流量:

# 设置默认策略
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT

# 允许本地流量
sudo iptables -A INPUT -i lo -j ACCEPT

# 允许 SSH (22端口)
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# 允许 HTTP 和 HTTPS
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# 允许 ICMP (Ping)
sudo iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT

# 限制 SSH 登录尝试次数
sudo iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set
sudo iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 5 -j DROP

2. 安装与配置 fail2ban

接下来,安装并配置 fail2ban 来自动化封禁恶意 IP:

sudo apt install fail2ban

编辑 fail2ban 配置文件,启用 SSH 防护:

sudo nano /etc/fail2ban/jail.local

添加以下配置来启用对 SSH 服务的防护:

[sshd]
enabled = true
port = ssh
logpath = /var/log/auth.log
maxretry = 3
bantime = 3600
findtime = 600

此配置的含义是:

  • enabled = true:启用对 SSH 服务的防护。
  • maxretry = 3:在 10 分钟内尝试超过 3 次失败的登录即被封禁。
  • bantime = 3600:封禁时间为 1 小时。
  • findtime = 600:在 10 分钟内,如果超过 3 次登录失败,则进行封禁。

配置好后,重新启动 fail2ban 服务:

sudo systemctl restart fail2ban

3. 监控与报告

通过 fail2ban 配置日志文件监控,管理员可以轻松地查看被封禁的 IP 地址:

sudo fail2ban-client status sshd

这个命令会显示当前被封禁的 IP 地址以及封禁的持续时间。

优化经验技巧

我通过这一配置,成功构建了一个基于 iptables 和 fail2ban 的自定义防护体系。这套体系能够有效地防止暴力破解攻击、恶意流量以及各种常见的网络安全问题。

  • iptables 提供了强大的防火墙控制,使得我能够精确地管理允许的流量。
  • fail2ban 自动化封禁恶意 IP,减轻了管理员的工作负担,并提供实时的安全防护。
  • 此外,我还可以根据需要进一步优化防护体系,例如通过设置更严格的规则限制对某些服务的访问,或使用 VPN 来加强安全性。

我实现了高效的自定义防护体系,使得我的物理服务器在面对网络攻击时更加安全、稳定。

未经允许不得转载:A5数据 » 基于iptables+fail2ban构建物理服务器自定义防护体系,附完整配置实录

相关文章

contact