使用Fail2ban来阻止错误的ISPConfig登录
首先:如果你不偏执,你不需要这个。 ISPConfig做一个很好的工作来阻止每分钟超过五次失败的用户登录。
另一方面,你可能想要微调这一点。
在本教程中,我们将编写一个ISPConfig插件来记录失败的登录到syslog,使用rsyslogd过滤这些条目,并添加一个fail2ban规则来阻止恶意用户的IP。
再次:我们也不需要这部分。 如果将ISPConfig的Loglevel设置为DEBUG,则无论如何都将记录失败的登录。 但是我们不想让所有其他的混乱,我们呢?
所以我们需要一个插件将失败的登录日志记录到syslog中:
〜ispconfig / interface / lib / plugins / login_fail2ban_plugin.inc.php
class login_fail2ban_plugin {
var $plugin_name = 'login_fail2ban_plugin';
var $class_name = 'login_fail2ban_plugin';
function onLoad() {
global $app;
$app->plugin->registerEvent('login_failed',$this->plugin_name,'log_fail');
}
function log_fail($event_name,$data) {
openlog("ispconfig", LOG_PID | LOG_PERROR, LOG_LOCAL0);
syslog(LOG_WARNING, "Login failed for user ".$_POST['username']." on IP ".$_SERVER['REMOTE_ADDR']);
}
}
ISPConfig有一种奇怪的方式缓存它的插件,所以你可能想要清除您的域的浏览器缓存现在。
现在,我们不希望在/ var / log / syslog中
。 如果您的服务器拥挤,则会出现大量日志记录,并且fail2ban不需要过滤所有垃圾。
我们来使用rsyslogd:
/etc/rsyslog.d/12-ispconfig.conf
if $programname == 'ispconfig' then /var/log/ispconfig.log
现在重新启动rsyslog
service rsyslog restart
创建一个fail2ban过滤器规则:
/etc/fail2ban/filter.d/ispconfig.conf
[Definition]
failregex = (.*) Login failed for user (.*) on IP <HOST>
ignoreregex =
测试它(您应该尝试使用虚假的用户名/密码登录,以显示任何内容)。
fail2ban-regex /var/log/ispconfig.log /etc/fail2ban/filter.d/ispconfig.conf
并为您的/etc/fail2ban/jail.conf
添加一个监狱:
[ispconfig]
enabled = true
port = http,https
filter = ispconfig
logpath = /var/log/ispconfig.log
重新启动fail2ban,你完成了。
service fail2ban restart
玩的开心!