Iptables in Echtzeit monitoren

Ich hatte grade die mal wieder die angenehme Erfahrung iptables in Echtzeit zu debuggen.

Hier ist ein kleiner Einzeiler, der dabei helfen kann.

watch -n 1 "sudo iptables-save -t nat -c"

iptables-save hat den netten Parameter -c, welcher die Counter der getroffenen Regeln in [packet:byte] anzeigt.

Wenn Ihr wie ich eine Menge web Traffic auf vielen VM habt, wollt Ihr vielleicht noch Traffic zu 443 rausfiltern. Außerdem kann es helfen nur Regeln zu listen, die mindestens einmal getriggert haben.

watch -n 1 "sudo iptables-save -t nat -c | grep -v '0:0' |grep -v '443'"

Das gibt euch eine kompakte Übersicht darüber, welche Regeln greifen und kann fürs Echtzeitdebugging helfen.

Happy hacking :)


Monitoring iptables in realtime

I just had the pleasurable experience of debugging iptables again.

Here is a short oneliner that lets you debug your iptables in realtime.

watch -n 1 "sudo iptables-save -t nat -c"

iptables-save has the convienient flag -c, which is showing it's counters as [packet:byte]

If you have a lot of web traffic on vm's like me you might want to filter out 443. Also rules that do not trigger at all [0:0] can be filtered out.

watch -n 1 "sudo iptables-save -t nat -c | grep -v '0:0' |grep -v '443'"

This gives you a good indication as to wich rules get applied in realtime.
A useful tool for debugging.

Happy hacking :)


OpenLDAP auf CentOS 7

In diesem Artikel soll es darum gehen, wie man OpenLDAP auf CentOS 7 installiert und wie man es rudimentär bedient.

Er bedient sich grob an dem offiziellen Quick Start Guide.

Warum CentOS 7 und nicht CentOS 8?

  • CentOS 8 geht 2021 end of life, CentOS 7 hat noch support bis 2024. Click mich für Details.

Warum openLDAP und nicht 389ds / FreeIPA

  • Lernzwecke
  • Es funktioniert und ist relativ einfach handlebar

Basisinstallation

Im Gegensatz zu CentOS8 bei dem man openLDAP selbst bauen muss, ist es bei CentOS7 bereits in den Repos.

yum install openldap openldap-servers

Der server kommt mit dem slapd service daher.
Diesen starten und enablen wir.

systemctl start slapd
systemctl enable slapd

Prüft anschließend, dass der Dienst läuft und port 389 gebunden hat.

[root@openldap ~]# systemctl status slapd
● slapd.service - OpenLDAP Server Daemon
   Loaded: loaded (/usr/lib/systemd/system/slapd.service; enabled; vendor preset: disabled)
   Active: active (running) since Mi 2021-01-13 11:02:31 CET; 1min 59s ago
     [...]


[root@openldap ~]# netstat -tulpen | grep slapd
tcp        0      0 0.0.0.0:389             0.0.0.0:*               LISTEN      0          312156     15731/slapd
tcp6       0      0 :::389                  :::*                    LISTEN      0          312157     15731/slapd

Initiale Konfiguration

Bei der Installation von openLDAP werden einige Tools mitinstalliert.
Diese werden wir nun verwenden um die initiale Konfiguration der openLDAP Instanz vorzunehmen.

Slapcat - exportiert Daten im ldif Format.

Slapcat is used to generate an LDAP Directory Interchange Format (LDIF) output based upon the contents of a slapd(8) database.

slappasswd - hasht passwörter

Slappasswd is used to generate an userPassword value suitable for use with ldapmodify(1), slapd.conf(5) rootpw configuration

Da wir bisher noch kein Passwort gesetzt haben, nutzen wir slappasswd um initial ein Passwort zu setzen.

[root@openldap ~]# slappasswd
New password:
Re-enter new password:
{SSHA}mLWOOC88hfX1HH0l0mZQDhJjqHfgsBqi

Dies wirft euch ein gehashtes Passwort aus, welches wir gleich brauchen werden.

Zunächst aber schauen wir uns an, wie ldif files aufgebaut sind.
LDIF (LDAP Data Interchange Format) Dateien beschreiben den Inhalt eines Directories oder beinhalten Änderungsaufforderungen.

dn (Distinguished Name) - Ist der ein Objekt eindeutig identifizierende name. Achtung, in kanonischer Schreibweise!

changetype - ist die Art der Änderung der vorzunehmenden Änderung. Möglich sind:

  • add
  • delete
  • modify
  • modrdn (Modify RDN, relative distinguished name)
  • moddn - (Modify DN, distinguished name)

replace: <attribute> - ist die Anweisung den Wert von <attribute> zu ändern

<attribute>: <value> - definiert den Wert des zu ändernden Attributes

Mit diesen Infos solltet Ihr jetzt in der Lage sein folgende dreiÄnderungen zu lesen.

(Tragt hier jeweils eure eigenen Werte ein)

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=YOURDOMAIN,dc=local

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=YOURADMINUSER,dc=YOURDOMAIN,dc=local

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: {SSHA}mLWOOC88hfX1HH0l0mZQDhJjqHfgsBqi

Wir replacen in olcDatabase={2}hdb,cn=config die Werte von:

  • olcSuffix mit dc=YOURDOMAIN,dc=local
  • olcRootDN mit cn=YOURADMINUSER,dc=YOURDOMAIN,dc=local
  • olcRootPW mit {SSHA}mLWOOC88hfX1HH0l0mZQDhJjqHfgsBqi

Was ist dieses OLC?

OLC steht für on-line configuration und ermöglicht es Änderungen an dem LDAP Schema zu machen, ohne den Deamon neu starten zu müssen.

Historically OpenLDAP has been statically configured, that is, to make a change to the configuration the slapd.conf file was modified and slapd stopped and started. In the case of larger users this could take a considerable period of time and had become increasingly unacceptable as an operational method. OpenLDAP version 2.3 introduced an optional new feature whereby configuration may be performed at run-time using a DIT entry called cn=config. The feature is known by a varied and confusing number of terms including on-line configuration (OLC) (our favorite), zero down-time configuration, cn=config and slapd.d configuration.
https://www.zytrax.com/books/ldap/ch6/slapd-config.html

Um diese werte wie in der neu angelegten .ldif Datei beschrieben zu modifizieren, nutzen wir nun ldapmodify.

Ldapmodify - ein Werzeug zum hinzufügen und editieren von LDAP Einträgen

ldapmodify opens a connection to an LDAP server, binds, and modifies or adds entries. The entry information is read from standard input or from file through the use of the -f option.
ldapmodify manpage

Ldapmodify ist Teil des Paketes openldap-clients.

yum install openldap-clients

ldapmodify sagen wir mit -H, mit welcher URI es sich verbinden soll. In diesem Fall nutzen wir den lokalen Unix Socket, welcher laufen sollte.
Prüfen könnt ihr das folgendermaßen.

[root@openldap slapd.d]# ss -l -p |grep ldap
u_str  LISTEN     0      128    /var/run/ldapi 312152                * 0                     users:(("slapd",pid=15731,fd=7))

Mit -f geben wir an, dass es die Änderungen aus einem File eingelesen werden sollen.

Der Output sollte etwa so aussehen:

[root@openldap slapd.d]# ldapmodify -H ldapi:/// -f db.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={2}hdb,cn=config"

modifying entry "olcDatabase={2}hdb,cn=config"

modifying entry "olcDatabase={2}hdb,cn=config"

Leseempfehlungen

LDAP for Rocket Scientists

Modifying Entries Using ldapmodify

Oracle® Identity Management User Reference - LDIF Format for Entries

Ubuntu Serverguide ab Seite 112


3 node cluster mit pacemaker CentOS Minimal

In diesem Atrikel möchte ich die Einrichtung und Verwaltung eines Pacemaker / Corosync 3 Node Cluster erklären.

Die Idee von Pacemaker ist es, Ressourcen auf mehreren Servern hochverfügbar zu halten. Ressourcen können hier sowohl Dienste wie ein Webserver oder eine Datenbank, aber auch eine IP Adresse sein.

In diesem Beispiel ist die Ressource ein Apache Webserver auf Ubuntu 18.04.

Installation

(Führt die Schritte auf allen nodes aus)
Zunächst installieren wir das die Pakete pacemaker, pcs und crmsh.

yum install -y pcs

Startet pcsd (pacemaker corosync daemon) und aktiviert ihn, damit er auch nach einem Neustart wieder zur Verfügung steht.

sudo systemctl start pcsd
sudo systemctl enable pcsd

Pacemaker kommt mit dem user hacluster daher.
Diesen könnt ihr in euerer /etc/passwd sehen.

Dieser user wird verwendet um den Node in einem Cluster zu authentifizieren. Gebt ihm daher mit passwd ein neues passwort.

Damit der Pacemaker Cluster eingerichtet und alle Nodes zum Cluster werden können müssen ein paar Dingege gegeben sein:
- Die Nodes müssen sich sich gegenseitig per DNS auflösen können
- Die nodes müssen sich erreichen können
- Die Nodes müssen traffic auf Port 2224 zulassen

Tragt also zunächst die IPs und Hostnames die /etc/hosts Datei ein…

... und prüft, dass Ihr die anderen Hosts erreichen könnt.

Fügt jetzt noch eine IP Tables Regel hinzu, welche 2224 für eingehenden Traffic öffnet.

sudo iptables -A INPUT -p tcp -m tcp --dport 2224 -j ACCEPT
sudo iptables -A INPUT -p tcp -m tcp --dport 3121 -j ACCEPT
sudo iptables -A INPUT -p udp -m udp --dport 5404 -j ACCEPT
sudo iptables -A INPUT -p udp -m udp --dport 5405 -j ACCEPT
sudo iptables -A INPUT -p tcp -m tcp --dport 21064 -j ACCEPT

Cluster einrichten

Wir werden nun erstmal die Nodes untereinander authentifizieren.

sudo pcs cluster auth [node1] [node2] [node3]

(Sollte hierbei was schief gehen, könnt ihr mit pcs pscd clear-auth [node] auths wieder aufheben)

Diese Autentifizierungen sind unidirektional, die Nodes sind also untereinander authentifiziert. Das könnt ihr sehen, wenn ihr auf einem anderen Node versucht die Authentifizierung vorzunehmen.

Die Authorizierungen unseres 3 Node Clusters untereinander verhalten sich jetzt ungefähr so.

Das macht aber noch keinen Cluster, sondern erstmal nur drei untereinander mit pcs authorizierte Nodes. Also erstellen wir jetzt einen Cluster.

sudo pcs cluster setup --name [name] [node] [node] [node]

Solltet ihr meldungen erhalten, ein node wäre bereits in einem cluster, führ auf diesem pcs cluster destroy aus.

 


3 node cluster mit pacemaker/corosync Ubuntu

In diesem Atrikel möchte ich die Einrichtung und Verwaltung eines Pacemaker / Corosync 3 Node Cluster erklären.

Die Idee von Pacemaker ist es, Ressourcen auf mehreren Servern hochverfügbar zu halten. Ressourcen können hier sowohl Dienste wie ein Webserver oder eine Datenbank, aber auch eine IP Adresse sein.

In diesem Beispiel ist die Ressource ein Apache Webserver auf Ubuntu 18.04.

Installation

(Führt die Schritte auf allen nodes aus)
Zunächst installieren wir die Pakete pacemaker, pcs und crmsh.

sudo apt install -y pacemaker pcs crmsh

Startet pcsd (pacemaker corosync daemon) und aktiviert ihn, damit er auch nach einem Neustart wieder zur Verfügung steht.

sudo systemctl start pcsd
sudo systemctl enable pcsd

Pacemaker kommt mit dem user hacluster daher.
Diesen könnt ihr in euerer /etc/passwd sehen.

Dieser user wird verwendet um den Node in einem Cluster zu authentifizieren. Gebt ihm daher mit passwd ein neues passwort.

Damit der Pacemaker Cluster eingerichtet und alle Nodes zum Cluster werden können müssen ein paar Dingege gegeben sein:
- Die Nodes müssen sich sich gegenseitig per DNS auflösen können
- Die nodes müssen sich erreichen können
- Die Nodes müssen traffic auf Port 2224 zulassen

Tragt also zunächst die IPs und Hostnames die /etc/hosts Datei ein…

... und prüft, dass Ihr die anderen Hosts erreichen könnt.

Fügt jetzt noch eine IP Tables Regel hinzu, welche 2224 für eingehenden Traffic öffnet.

sudo iptables -A INPUT -p tcp -m tcp --dport 2224 -j ACCEPT
sudo iptables -A INPUT -p tcp -m tcp --dport 3121 -j ACCEPT
sudo iptables -A INPUT -p udp -m udp --dport 5404 -j ACCEPT
sudo iptables -A INPUT -p udp -m udp --dport 5405 -j ACCEPT
sudo iptables -A INPUT -p tcp -m tcp --dport 21064 -j ACCEPT

Cluster einrichten

Wir werden nun erstmal die Nodes untereinander authentifizieren.

sudo pcs cluster auth [node1] [node2] [node3]

(Sollte hierbei was schief gehen, könnt ihr mit pcs pscd clear-auth [node] auths wieder aufheben)

Diese Autentifizierungen sind unidirektional, die Nodes sind also untereinander authentifiziert. Das könnt ihr sehen, wenn ihr auf einem anderen Node versucht die Authentifizierung vorzunehmen.

Die Authorizierungen unseres 3 Node Clusters untereinander verhalten sich jetzt ungefähr so.

Das macht aber noch keinen Cluster, sondern erstmal nur drei untereinander mit pcs authorizierte Nodes. Also erstellen wir jetzt einen Cluster.

sudo pcs cluster setup --name [name] [node] [node] [node]

Solltet ihr meldungen erhalten, ein node wäre bereits in einem cluster, führ auf diesem pcs cluster destroy aus.

 


CentOS - Etherape installieren

In diesem Artikel möchte ich kurz die Schritte aufzeigen, die es braucht um etherape auf einem CentOS 7 zum laufen zu bringen.

Zunächst installieren wir das EPEL release.
EPEL steht für Extra Packages on Enterprise Linux und ist ein Repository, welches vom Fedora Projekt maintained wird und unter Enterprise Linux Distributionen wie CentOS hochwertige Softwarepakete bereitstellt.

yum install epel-release

Anschließend aktualisieren wir die Paketquellen mit yum update.

Etherape selbst ist nicht in dem EPEL repo enthalten, allerdings einige Pakete, die wir benötigen um es selbst zu kompilieren. Diese installieren wir jetzt.

yum install spice-glib-devel.x86_64 goocanvas2-devel.x86_64 libpcap-devel.x86_64 itstool popt-devel.x86_64

Jetzt geht es an die Installation von Etherape selbst.
Die Sourcefiles laden wir mit wget herunter.

wget https://sourceforge.net/projects/etherape/files/latest/download

Die heruntergeladene Datei "download" ist ein tar Archiv.
Dieses entpacken wir.

tar -xzf download

Navigiert jetzt in den entpackten Ordner und startet das Konfigurationsscript.

cd etherape-0.9.14
./configure

Hierbei sollten keine Probleme auftreten.
Falls doch, versucht es mit erhöhten Rechten.

Jetzt erstellen wir mit make das makefile und mit make install installieren wir etherape.

sudo make && sudo make install

Standartmäßig wird etherape unter /usr/local/bin installiert.
Da sudo unter CentOS 7 im default nur befehle in /usr/bin und /usr/sbin sucht, müsste etherape jetzt mit /usr/local/bin/etherape gestartet werden.

Um das zu fixen rufen wir mit sudo visudo die datei /etc/sudoers auf und erweitern secure_path= um :/usr/local/bin/

Jetzt kann etherape vom Terminal aus gestartet werden.
Der Parameter -i definiert, welches Interface Ihr euch anschauen wollt.

sudo etherape -i eth0

Cheers,
Ori