Fail2Ban for Domino
Introduction
Blocking IP addresses after a couple of login failures is an effective way to increase security. Fail2Ban has been around for quite a while and is available in may Linux distribution. It uses iptable firewall rules to block IP addresses once an application has reported login failures. There are filters for many applications already included.
Supported environments
- Redhat/CentOS and clones with Firewalld
- Ubuntu with UFW
How does fail2ban work with Domino?
Domino logs authentication errors in a standardized way for all internet protocols.
Fail2Ban keeps track of login failures by IP address and uses IPTables rules to block the traffict, after the specified number of login attempts have been reached.
Fail2Ban provides options to specify separate jail configurations per application.
Usually different applications should block IP addresses directly on all protocols. This is the default behavior, configured in the example configuration.
Example:
[007577:000017-00007F621246D700] 20.03.2022 07:36:42 http: info@acme.net [1.2.3.4] authentication failure using internet password
[007577:000017-00007F621246D700] 20.03.2022 07:36:43 http: IP Address [1.2.3.4] authentication failure using internet password: User is locked out
A Domino log filter with a jail configuration for Domino can feed login failures directly into fail2ban.
Block TLS/SSL errors
Usually TLS connection errors are also an indication of an attack. Therefore the filter string has been updated to also detect TLS/SSL errors.
[003546:000013-00007F12A17E5700] 28.05.2022 00:47:11 TLS/SSL connection 1.2.3.4(50332) -> 111.222.333.444(443) failed with rejected SSLv3 connection
[003546:000013-00007F12A17E5700] 28.05.2022 00:47:20 TLS/SSL connection 1.2.3.4(57820) -> 111.222.333.444(443) failed with no supported ciphers
[003546:000013-00007F12A17E5700] 28.05.2022 00:47:33 TLS/SSL connection 1.2.3.4(40082) -> 111.222.333.444(443) failed with rejected unknown record type
Security scanners might be blocked as well
With this protection enabled, you can’t use remote scans to check your server TLS configuration.
There is a project to scan local servers, which also work for servers which are not exposed externally at all:
https://github.com/drwetter/testssl.sh
In case you don’t want TLS/SSL errors to cause the block count to increase, you can comment out the additional filter line.
Components
The implementation is based on the following two components
-
domino.conf Domino filter configuration containing the regular search expression
-
jail.local Base configuration, including sshd configuration. Either used full configuration or reference for your own configuration
-
domban Fail2Ban for Domino management script Installs and manages all fail2ban operations
Installation
Fail2Ban for Domino is located in extras/fail2ban
.
To install fail2ban and the Domino integration just launch ./domban install
.
Installation requires root permissions. Switch to the root user or leverage sudo if permissions are granted for your Linux user.
The script contains the installation and will also install itself as usr/bin/domban
to fully mangage fail2ban.
Example:
/local/github/domino-startscript/extra/fail2ban/domban install
The installation expects the Start Script Log file in the default location. In case you moved your log, ensure the location in jail.local
is updated.
To edit the configuration invoke domban cfg
.
Verifying the configuration
- Once the environment is setup check first the status of the service via
domban status
- In case of error check the log file via
domban log
- Check the status of your Domino jail via
domban
- Check the status of your SSH jail via
domban ssh
Operations
Once installed all operations can be performed invoking the domban
management script:
-
ssh
Show status of SSH jail -
unblock IP
Unblock specified IP from Domino and SSH jail -
cfg
Configure fail2ban jail.local. Default editor: vi. Use e.g. exportEDIT_COMMAND=nano
-
log [lines]
List fail2ban log (default: last 100 lines) -
status
Show systemd fail2ban status -
reload Reloads fail2ban configuration
-
restart
Restart fail2ban service -
systemd [cmd]
Pass commands to systemd -
install [upd]
Install fail2ban and ‘domban’ script -upd
overwrites existingjail.local
-
test [logfile]
Test Domino fail2ban filter against log - if no log file specified use configured log file
Exampl Output: Status Domino jail
--------------------------------------------------------------------------------
Status for the jail: domino
|- Filter
| |- Currently failed: 1
| |- Total failed: 18
| `- File list: /local/log/notes.log
`- Actions
|- Currently banned: 1
|- Total banned: 2
`- Banned IP list: 192.168.007.42
---------------------------------------------------
Help Output
Domino Fail2Ban
---------------
Syntax: domban
ssh Show status of SSH jail (No parameter = show Domino jail)
unblock <IP> Unblock IP from Domino and SSH jail
cfg Configure fail2ban jail.local. Editor: vi. Use e.g. export EDIT_COMMAND=nano
log [lines] List fail2ban log (default: last 100 lines)
status Show systemd fail2ban status
restart Restart fail2ban service
systemd [cmd] Pass commands to systemd
install [upd] Install fail2ban and 'domban' script - 'upd' overwrites existing 'jail.local'
test [logfile] Test filter against logfile
- No parameter shows Domino jail status
selinux Show SELinux status
selinux logset Lable start script log file with fail2ban access
selinux logdel Remove label for start script log
selinux relable Relable log files