Table of Contents

Ασφάλεια - Fail2Ban

mail

fail2ban

Δοκιμές

Για την δοκιμή των παρακάτω φίλτρων χρησιμοποιούμε το fail2ban-regex

Για να ελέγξουμε το αρχείο /var/log/mail.log για εκφράσεις που ταυτίζονται με το φιλτρο /etc/fail2ban/filter.d/dovecot-pop3.conf εκτελούμε

fail2ban-regex /var/log/mail.log /etc/fail2ban/filter.d/dovecot-pop3.conf

Γενικές

Μπορούμε να αλλάξουμε κάποιες γενικές ρυθμίσεις γιατί οι επιθέσεις χρησιμοποιούν πολύ τα defaults από το fail2ban π.χ. μέχρι 3 sasl authentication failures ανα 10 λεπτά ώστε να μην γίνουν banned. Για να το πάμε ανά 30 λεπτά σε όλες τις υπηρεσίες στο αρχείο jail.local μπορούμε να προσθέσουμε κάτω από το [DEFAULT] (ή μέσα σε συγκεκριμένη υπηρεσία)

findtime = 1800

dovecot pop/imap

Στο αρχείο /etc/fail2ban/jail.local εισάγουμε

[dovecot-pop3]
enabled  = true
filter   = dovecot-pop3
action   = iptables[name=POP3, port=pop3, protocol=tcp]
logpath  = /var/log/mail.log
maxretry = 5
bantime  = 86400
#
[dovecot-imap]
enabled  = true
filter   = dovecot-imap
action   = iptables[name=IMAP, port=imap, protocol=tcp]
logpath  = /var/log/mail.log
maxretry = 5
bantime  = 86400

Δημιουργούμε στην συνέχεια τα αρχεία

/etc/fail2ban/filter.d/dovecot-pop3.conf

[Definition]
#
failregex = (?: pop3-login: Authentication failure).*rip=(?P<host>\S*),.*
          (?: pop3-login: Aborted login).*rip=(?P<host>\S*),.*
          (?: pop3-login: Disconnected).*rip=(?P<host>\S*),.*
ignoreregex =

και /etc/fail2ban/filter.d/dovecot-imap.conf

[Definition]
failregex = (?: imap-login: Authentication failure).*rip=(?P<host>\S*),.*
#          (?: imap-login: Aborted login).*rip=(?P<host>\S*),.*
#          (?: imap-login: Disconnected).*rip=(?P<host>\S*),.*
ignoreregex =

courier pop

Δημιουργούμε το αρχείο /etc/fail2ban/jail.local και επικολλούμε κομμάτια κώδικα από το αρχείο fail2ban.conf. Με π.χ filter=courierlogin λαμβάνει ρυθμίσεις από το αρχείο filter.d/courierlogin και έτσι μπορούμε να μην χρησιμοποιήσουμε δικό μας failregex, αλλά το προκαθορισμένο.

Οι παρακάτω ρυθμίσεις αποτρέπουν συνεχόμενες προσπάθειες σύνδεσης με τυχαία username και κωδικούς σε pop (courierpop3 filter) καθώς και σε smtp (Relay access denied) (postfix filter)

[courierpop3]
#
enabled  = true
port     = pop3
filter   = courierlogin
logpath  = /var/log/mail.log
maxretry = 10
bantime = 86400
#
[postfix]
#
enabled  = true
port     = smtp
filter   = postfix
logpath  = /var/log/mail.log
maxretry = 10
bantime = 86400

sasl

Τροποποιούμε το αρχείο /etc/fail2ban/filter.d/sasl.conf δηλώνοντας την παρακάτω regexpr

failregex = : warning: [-._\w]+\[<HOST>\]: SASL (?:LOGIN|PLAIN|(?:CRAM|DIGEST)-MD5) authentication failed: authentication failure$
 : warning: [[]::ffff:(?P<host>\S*)[]]: SASL CRAM-MD5 authentication failed: authentication failure$
 : warning: [[]::ffff:(?P<host>\S*)[]]: SASL CRAM-MD5 authentication failed: authentication failure

Ενεργοποιούμε το φίλτρο στο αρχείο /etc/fail2ban/jail.local

[sasl]
enabled  = true
port     = smtp,ssmtp,imap2,imap3,imaps,pop3,pop3s
filter   = sasl
logpath  = /var/log/mail.log
maxretry = 10
findtime = 3600
bantime = 86400

Αντιμετώπιση Προβλημάτων

Σε περίπτωση που έχουμε ρυθμισμένους και άλλους κανόνες στα iptables π.χ limit_port_bandwidth πιθανόν να δούμε τα ακόλουθα στα logs του fail2ban

2012-02-01 19:52:32,229 fail2ban.jail   : INFO   Jail 'dovecot-imap' started
2012-02-01 19:52:32,296 fail2ban.actions.action: ERROR  iptables -N fail2ban-postfix
iptables -A fail2ban-postfix -j RETURN
iptables -I INPUT -p tcp -m multiport --dports smtp -j fail2ban-postfix returned 200
2012-02-01 19:52:32,299 fail2ban.actions.action: ERROR  iptables -N fail2ban-POP3
iptables -A fail2ban-POP3 -j RETURN
iptables -I INPUT -p tcp --dport pop3 -j fail2ban-POP3 returned 400
2012-02-01 20:13:47,712 fail2ban.jail   : INFO   Jail 'dovecot-imap' stopped

Θα πρέπει να βρούμε κανόνες που δεν συγκρούονται (FIXME limit-port bandwidth to work with fail2ban)

passwords

Μέσω perl μπορούμε να επιβάλλουμε δυνατά passwords. Π.χ. η παρακάτω regexpr επιβάλλει

^.*(?=.{8,})(?=.*\d)(?=.*[a-zA-Z])(?=.*[\`\~\!\*\(\)@#$%^&\-\_\{\[\}\]\:\;\"\'\<\,\>\.\?\/\\+=]).*$

Η παρακάτω επιβάλλει

^.*(?=.{8,})(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).*$

Πηγές