fail2ban mit Ansible und mehr ssh-Sicherheit

Ich will einen Host im „offenen“ Internet via ssh erreichbar machen. Um da noch etwas mehr Sicherheit zu bekommen, habe ich Maßnahmen ergriffen: fail2ban mit Ansible aktivieren, Passwort-Logins verbieten und root-Login nur von internen IPs erlauben. Wer fail2ban noch nicht kennt, findet hier mehr Infos: Im Kern macht es Ports zu, sobald eine bestimmte Aktion zu oft passiert. Also z.B. wird der ssh-Port zugemacht, wenn zu viele Login-Fehlversuche registriert werden. Ich habe es ja auch für owncloud schon verwendet.

fail2ban mit Ansible

Fail2ban wollte ich diesmal auch mit Ansible konfigureren, da ich schon einiges damit erledige. Ich habe mich für die Role tersmitten.fail2ban entscheiden, weil sie mir am einfachsten und gut „alleine“ verwendbar erschien. Damit war/ist die Einrichtung sehr einfach – hier mein Playbook fail2ban.yml:

- name: Install fail2ban
  hosts: fail2ban

  # see https://galaxy.ansible.com/tersmitten/fail2ban/

  roles:
    - role: tersmitten.fail2ban
      tags: fail2ban
      fail2ban_maxretry: 10
      fail2ban_action: "%(action_mwl)s"
      fail2ban_destemail: bla@foo.bar

Hier gleich noch die ersten, wichtigsten Kommandos, um sich anzuschauen, was fail2ban so tut:

tail -f /var/log/fail*log /var/log/auth.log
fail2ban-client status
fail2ban-client status sshd
fail2ban-client set sshd unbanip 192.168.99.99

Passwort-Logins verbieten

Passwort-Logins verbiete ich auch via ansible – das Playbook dazu ist noch trivialer und steht auch unten. Hier könnte/sollte vielleicht in Zukunft noch mehr rein. Mein Playbook sshd-secure2.yml:

- name: secure ssh for external reachable hosts
  hosts: externalsshhosts

  tasks:

    - name: add PasswordAuthentication no to sshd_config line
      lineinfile: dest=/etc/ssh/sshd_config regexp=PasswordAuthentication.* line="PasswordAuthentication no"
      notify: restart sshd

  handlers:

    - name: restart sshd
      service: name=ssh state=restarted 

Root-Login verbieten

Außerdem erlaube ich den direkten root-Login nur von internen IPs. Ich kann das nicht ganz abschalten, weil beim Backup mit backuppc root-Login benötigt wird.

Mein /etc/ssh/sshd_config (sollte in Zukunft natürlich auch per Ansible passieren):

# DSTK 2018-01-01 was: PermitRootLogin prohibit-password
# see match block at bottom of file
PermitRootLogin no
...
# Must be at bottom of file
Match Address 192.168.99.*
    PermitRootLogin prohibit-password

2 thoughts on “fail2ban mit Ansible und mehr ssh-Sicherheit

    1. Ja, stimmt. tersmitten scheint jetzt oefenweb zu heißen. Ich habe keine Ahnung, ob das so wirklich richtig ist. Ich benutze von ihm jetzt jedenfalls:

      oefenweb.postfix
      oefenweb.ssh-keys
      oefenweb.fail2ban
      

      Das Playbook zu fail2ban sieht bei mir nun so aus:

      - name: Install fail2ban
        hosts: fail2ban
      
        # see https://galaxy.ansible.com/oefenweb/fail2ban/
      
        roles:
          - role: oefenweb.fail2ban
            tags: fail2ban
            fail2ban_maxretry: 10
            fail2ban_bantime: 2592000 # 2592000 = 30 days
            fail2ban_action: "%(action_mwl)s"
            fail2ban_destemail: "{{ admin_email }}"
      
        tasks:
          - name: Install several apt packages
            apt: name={{item}} state=installed
            with_items:
              - whois
      

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert