在现代网络环境中,服务器和应用程序面临各种安全威胁,其中暴力破解攻击是一种常见的攻击方式。这种攻击通过不断尝试用户名和密码组合来获取系统访问权限。为了有效防范此类攻击,我们可以结合Java应用程序与Fail2ban工具,实现对非法登录尝试的监控和阻止。
Fail2ban是一个开源的安全工具,用于监控系统日志并自动禁止多次失败的登录尝试。它通过解析日志文件检测到可疑行为(如暴力破解),然后通过防火墙规则或IP黑名单暂时或永久性地封禁攻击者的IP地址。
虽然Fail2ban通常用于保护SSH、FTP等服务,但它也可以与其他自定义服务配合使用,包括基于Java的应用程序。
首先需要确保你的服务器上已经安装了Fail2ban。以下是基于Debian/Ubuntu系统的安装命令:
sudo apt update
sudo apt install fail2ban
为了让Fail2ban能够识别和处理Java应用程序中的暴力破解尝试,我们需要确保Java应用程序正确地记录失败的登录尝试。以下是一个简单的Spring Boot应用程序示例,展示如何记录失败的登录尝试:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/api/auth")
public class AuthController {
private static final Logger logger = LoggerFactory.getLogger(AuthController.class);
@PostMapping("/login")
public String login(@RequestParam String username, @RequestParam String password) {
if ("admin".equals(username) && "password123".equals(password)) {
return "Login successful";
} else {
// 记录失败的登录尝试
logger.warn("Failed login attempt from IP: {} with username: {}",
request.getRemoteAddr(), username);
return "Login failed";
}
}
}
在这个例子中,我们使用logger.warn()
方法记录每次失败的登录尝试,并包含尝试的IP地址和用户名信息。
Fail2ban需要知道如何从日志中提取失败的登录尝试信息。为此,我们需要创建一个自定义过滤器。
编辑/etc/fail2ban/filter.d/java-login.conf
文件,添加以下内容:
[Definition]
failregex = Failed login attempt from IP: <HOST> with username:.*
ignoreregex =
接下来,我们需要为Java应用程序创建一个新的jail配置。
编辑/etc/fail2ban/jail.local
文件,添加以下内容:
[java-login]
enabled = true
filter = java-login
action = iptables[name=JavaLogin, port=http, protocol=tcp]
logpath = /var/log/tomcat/catalina.out
maxretry = 5
findtime = 600
bantime = 3600
在这里,我们指定了日志路径(假设你使用的是Tomcat服务器),最大重试次数为5次,查找时间为10分钟(600秒),封禁时间为1小时(3600秒)。
完成配置后,重启Fail2ban以应用更改:
sudo systemctl restart fail2ban
你可以通过模拟多次失败的登录尝试来测试Fail2ban是否正常工作。如果一切设置正确,Fail2ban将自动封禁尝试暴力破解的IP地址。
要检查Fail2ban的状态和已封禁的IP地址,可以运行以下命令:
sudo fail2ban-client status java-login
maxretry
、findtime
和bantime
。