Infrastructure as code - with Ansible

FameSystems
FameSystems · HelpDesk Team
Updated on April 1, 2025

In diesem Artikel erfährst du, wie du mithilfe von Ansible die Einrichtung deiner Server automatisieren kannst.

Warum Ansible?

Ansible ist ein leistungsstarkes Open-Source-Tool für Infrastructure-as-Code (IaC), mit dem du deine Server automatisiert einrichten kannst. Dadurch erreichst du eine reproduzierbare und konsistente Umgebung, ohne jeden Server manuell einrichten zu müssen. Ein großer Vorteil von Ansible ist, dass auf dem Zielserver keine spezielle Software benötigt wird, sondern nur ein SSH-Zugang und Python.

Grundkonzept

Die Konfiguration erfolgt von einem Rechner aus, der Ansible installiert hat (Control Node). Dieser verwaltet dann einen oder mehrere Server (Managed Nodes). Die Server, die du verwalten möchtest, werden in einer Liste gepflegt (Inventory). Die Konfigurationsdatei, in der beschrieben ist, wie die Server eingerichtet werden sollen, nennt man Playbook. Diese Playbooks kannst du gegen beliebig viele Server lauf lassen und das sogar mehrfach hintereinander. Ansible wird bei jeder Ausführung nur die Änderungen vornehmen, die noch nicht angewendet worden sind.

Ziele

Mit dem hier vorgestellten Ansible-Playbook kannst du:

  • Dein Betriebssystem aktuell halten
  • Zusätzliche Betriebssystempakete installieren
  • Docker installieren
  • Einen neuen Nutzer anlegen und mit einem SSH-Schlüssel absichern
  • SSH sicher konfigurieren und den Standardport ändern SSH-Port ändern
  • Weitere Sicherheitseinstellungen vornehmen
  • Firewall mit ufw einrichten UFW-Firewall
  • fail2ban installieren, um Brute-Force-Angriffe abzuwehren
  • Eine Blockliste mit bösartigen IP-Adressen setzen

Los geht's!

Voraussetzungen

Wir benötigen folgendes:

  • Einen Server mit Ubuntu oder Debian
  • Einen lokalen Rechner mit Ansible und sshpass (z. B. installieren mit sudo apt install ansible sshpass unter Debian/Ubuntu)
  • SSH-Zugriff auf den Server mit einem Benutzer, der sudo-Rechte hat

Ansible-Playbook erstellen

Wir starten mit einem kleinen Playbook, das dein Betriebssystem aktuell halten und zusätzliche Pakete installieren kann. Von dort arbeiten wir uns Schritt für Schritt weiter.

Speichere das folgende Playbook als playbook.yml auf deinem lokalen Rechner ab:

- name: Server setup
  hosts: all
  become: true

  tasks:
    - name: Update apt package cache
      apt:
        update_cache: 'yes'
        cache_valid_time: 600

    - name: Upgrade installed apt packages
      apt:
        upgrade: dist
      register: upgrade

    - name: Ensure that a base set of software packages are installed
      apt:
        pkg:
          - curl
          - fail2ban
          - git
          - needrestart
          - net-tools
          - pwgen
          - resolvconf
          - rsync
          - sudo
          - ufw
          - unbound
        state: latest

Playbook ausführen

Bevor wir das Playbook ausführen können, muss der SSH-Fingerabdruck des Zielservers auf unserem lokalen Rechner hinterlegt sein.

Falls du also vorher noch nie mit deinem Server per SSH verbunden warst, solltest du das jetzt tun:

ssh root@server_ip

Dann kannst du folgenden Befehl auf deinem lokalen Rechner ausführen:

ansible-playbook -i server_ip, -u root --ask-pass playbook.yml

Ersetze server_ip mit der IP-Adresse deines Servers. Das Komma nach der IP-Adresse ist wichtig!

Gib, sobald du dazu aufgefordert wirst, dein root-Passwort ein.

Die Ausgabe sollte dann ungefähr wie folgt aussehen:

Damit kannst du kontrollieren, welche Schritte Ansible ausgeführt hat.

Playbook erweitern

SSH-Port ändern

Mit folgendem Schritt können wir den SSH-Port ändern:

- name: Set ssh port number
  lineinfile:
    dest: /etc/ssh/sshd_config
    regexp: 'Port '
    line: 'Port 22222'
    state: present

Damit diese Änderung einen Effekt hat, muss der SSH-Server neugestartet werden. Dafür findest du im kompletten Playbook eine Lösung (siehe weiter unten).

Ab jetzt ist dein Server unter einem anderen SSH-Port erreichbar, d. h. dass du beim Aufrufen von ansible-playbook die Option -e "ansible_port=22222" mitgeben musst!
ansible-playbook -i server_ip, -u root --ask-pass playbook.yml -e "ansible_port=22222"
UFW-Firewall einrichten

Das Einrichten der UFW-Firewall ist durch das eingebaute ufw-Modul sehr einfach:

- name: Deny all incoming
  ufw:
    direction: incoming
    policy: deny

- name: Allow all outgoing
  ufw:
    direction: outgoing
    policy: allow

- name: Allow SSH
  ufw:
    rule: allow
    port: 22222
    proto: tcp

- name: Enable ufw service
  ufw:
    state: enabled

Diese Firewall-Regeln sind sofort aktiv.

Das komplette Playbook

Das Playbook mit allen hier im Artikel vorgestellten Schritten findest du in diesem GitHub Repository.

Du kannst es mit Git auschecken und der Anleitung in der README-Datei folgen, um deinen Server zu konfigurieren.

Wie geht es weiter?

Ansible ist sehr universell einsetzbar und es gibt viele Erweiterungen (Roles). Einige findet man in der Ansible Galaxy, die von der Community erstellte Erweiterungen bereitstellt.

Man kann z. B. auch sehr einfach Cron-Jobs über die entsprechende Rolle cron hinzufügen.

Wenn man weiter in Richtung Härtung des Servers gehen möchte, kann man sich beispielsweise die Playbooks von Ansible Lookdown anschauen. Dort wird unter anderem das CIS (Center for Internet Security) Level 1 angestrebt.

Zusammenfassung

Mit diesem Playbook kannst du einen sicheren und gut konfigurierten Server in wenigen Minuten einrichten. Falls du das Playbook erweitern möchtest, kannst du weitere Pakete oder Schritte ergänzen.

Falls dieser Artikel hilfreich für dich, dann lasse es uns gerne wissen!


From FameSystems | April 1, 2025

Have you found a solution? Perfect!

If you are looking for more: We offer powerful root servers, game servers, web hosting, TeamSpeak servers and reseller options.

Find out more about our products