Binden von Diensten an eine feste IP

Hi,

heute möchte ich zeigen wie man einzelne Dienste auf eine feste IP bindet.

Natürlich ist das uninteressant wenn man nur eine IP hat aber da ich immer empfehle mindestens 2. IPs zu haben, ist dies wieder interessant oder man hat eventuell sogar mehr als eine IP oder möchte einfach innerhalb eines Netzwerkes sicherstellen das Dienste nicht über alle konfigurierten IPs zu erreichen  sind oder sogar darf.

Als Beispielt könnte man das System so konfigurieren das der Webserver über eine IP zu erreichen ist aber der E-Mail Server über eine andere und der DNS wieder über eine andere und SSH wiederum auch eine IP hat die dediziert ist.

Wie immer kommt es hier auf das Umfeld an in dem man einen Server betreibt.

Ich gebe keine Garantie das mein Tutorial auch bei Euch funktioniert und mach vor jeder Änderung erst eine Kopie der original Datei !


Damit man erstmal sehen kann welche Dienste laufen und auf welche IP diese konfiguriert sind arbeiten wir hier mit netstat

Dazu kann man sich als root Anmelden via su oder man arbeitet mit sudo.

wie man sieht habe ich den Befehl netstat -taupen genutzt, dieser zeigt uns TCP, UDP im Grunde alles an.

Kann man sich auch ganz gut merken als Eselsbrücke „Tauben“ nur mit P geschrieben.

Man sieht normal mehr, aber alle Verbunden Hosts habe ich raus gelöscht und die IPs habe ich durch x,y und z ersetzt und das ganze ist nicht von meinem Server.

Da einige IPs öfters vorkommen eine kurze Legende:

  • x = Öffentliche IP
  • y = Management IP
  • z = VPN IP

Um mal einige Beispiele zu nehmen aus der Liste sieht man folgendes:

  • tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 103 39607015 26200/mysqld
  • tcp 0 0 0.0.0.0:110 0.0.0.0:* LISTEN 0 12513 4507/dovecot
  • tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 0 168042340 3956/apache2
  • tcp 0 0 y.y.y.y:53 0.0.0.0:* LISTEN 108 69870338 23713/named
  • tcp 0 0 z.z.z.z:53 0.0.0.0:* LISTEN 108 67307962 23713/named
  • tcp 0 0 x.x.x.x:53 0.0.0.0:* LISTEN 108 26815085 23713/named
  • tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 108 26815083 23713/named

Wie man sieht sind manche Dienste so konfiguriert das diese auf jeder IP „lauschen“ (LISTEN) oder gleich mehrfach (siehe named = DNS).

Hat man jetzt einen Öffentlichen Server mir 2. IPs und eine ist Öffentlich und die 2. nur für das Management, wie ich das immer empfehle, kann man sich jetzt Fragen: Warum soll ein Dienst der nur über die Öffentliche IP zu erreichen sein soll auf allen IPs lauschen ?

Genau, das macht keinen sinn.

Das gleiche gilt im Grunde in einem Netzwerk, ich will ja sicher stellen das ich einen Dienst immer über die gleiche IP erreichen, ich muss auch genau wissen in einem großen Netzwerk welcher Dienst ist auf welchem gerät unter welcher IP zu erreichen und das immer.

Es gibt hier einige Gründe und Szenarien auf die das zutrifft besondern im Bereich mit VLAN und Routing ist das dann extrem Wichtig.

Auf jedenfall wollen wir das jetzt ändern.


Ich werden versuchen hier die meisten standard Dienste ab zu arbeiten wie Webserver, DNS, EMail, MYSQL und SSH.


Apache Webserver

Wie öffnen die ports.conf unter /etc/apache2/ mit unserem lieblings Edtitor.

Und tragen die Listen IP ein die wir haben möchten:

x.x.x.x entspricht eurer öffentlichen IP.

Localhost muss natürlich auch eingetragen sein.

Danach muss der Webserver neugestartet werden.

Je nach System und Version

Schauen wir jetzt mal mit netstat wie es jetzt aussieht.

Wie man sieht ist der Webserver nur noch über die Öffentliche IP und Localhost erreichbar 0.0.0.0 gibt es nicht mehr.


E-Mail Server

Da ich mit Postfix und Dovecot arbeite werde ich das nur bei diesen zwei zeigen von QMail kann ich nur abraten!

Bei Postfix muss nur eine Zeile in der main.cf geändert werden:

Normal steht hier nach dem = all, was sagt das der Dienst auf allen IPs lauschen soll, nach der Änderung lauscht Postfix nur noch auf die angegebene(n) IP(s).

Der Dienst muss natürlich nach der Änderung auch neu gestartet werden.

Wir prüfen erneut mit netstat ob unsere Änderung auch wirksam ist:

Bitte beachten das Postfix als Master aufgeführt ist und nicht als Postfix!


Bei Dovecot hat man 2. Optionen, die eine ist man geht in die dovecot.conf und trägt dort den folgenden Befehl ein oder man macht sich erstellt eine neue Datei und legt dies unter conf.d im Dovecot Verzeichnis ab.

Ich habe mich der Übersichtlichkeit für die 2. option entschieden.

Ich habe eine Datei erstellt mit dem Namen local.conf und folgendes Eingetragen:

Wie schon zu vor mal wieder den Dienst neustarten:

Und wir prüfen ob unsere Änderung auch wirksam ist:

Und wie wir sehen hört Dovecot nur noch auf unserer Vorgegeben IPs und ja Dovecot heißt bei netstat auch Dovecot.


DNS

Bei Bind muss man sehr vorsichtig sein!

Ein falsches Zeichen oder auch Leerzeichen an der falschen stelle und der Dienst läuft nicht mehr, also auf jedenfall vorher die Original Datei kopieren damit ihr ein Backup habt!

Wir öffnen die named.conf unter /etc/ mit dem Editor:

Und fügen den Befehl options am Anfang hinzu:

Ich gehe mal davon aus das die Datei so ähnlich bei Euch aussieht, falls nicht eine Erklärung was hier passiert:

  • listen-on gibt die IP an auf die Bind lauschen soll (listen)
  • dnssec-enable ist „noch“ aus
  • allow-recursion ist heut zu tage ein MUSS! Der DNS Antwortet nur auf DNS Anfragen wenn diese ihm bekannt sind, wenn nicht gibt er auch keine Antwort. Dies ist sehr wichtig um sicher zu stellen das dein Server nicht für DNS-Spoofing missbraucht werden kann!
  • version none bedeutet der DNS gibt nicht bekannt welche Version er hat
  • directory sein Arbeitsverzeichnis
  • auth-nxdomain ist auch ein DNS-Spoofing Schutz
  • pid-file gibt an wo das PID file liegt bzw. abgelegt wird.

Jetzt starten wir den DNS neu:

Und wir prüfen ob der DNS nur noch auf unsere Vorgabe lauscht:

Was einem direkt auffällt ist das Bind auf TCP und UDP lauscht, das ist normal und kann meines wissen nach nur via Iptables gelöst werden.

Das heisst man muss den Port 53 auf dem Protokoll UDP aktiv blocken, was auch zu empfehlen ist, heute reicht TCP vollkommen aus.


MYSQL

Bei MYSQL ist Wichtig sein Setup zu kennen, das heisst habe ich nur ein normalen Hosting Server benötig MYSQL keinen Zugriff in das Internet, die Webseiten mit Datenbanken (CMS) greifen nur lokal auf den MYSQL zu.

Hat man aber Datenbanken die einen Externen Zugriff benötigen muss man darauf achten das die Öffentliche IP mit eingetragen wird und man auch seine Firewall entsprechend anpasst.

Da ich nur einen Server habe nur nur Hoste benötig der MYSQL Dienst keinen Internet Zugriff, also kann ich dafür sorgen das der Dienst auch nur via localhost zu erreichen  ist.

Netterweise ist der Befehl schon in der Konfigurationsdatei drin, muss nur freigegeben und eine IP eingetragen werden:

Man öffnet die my.cnf unter /etc/mysql/ mit seinem Editor:

Sucht die Stelle [mysqld] #bind-address =, recht weit oben und ändert diese in:

Wir haben jetzt die # am Anfang entfernt und die localhost IP 127.0.0.1 eingetragen.

MYSQL neu starten mit :

Danach überprüfen wir wieder unsere Änderung:

Damit ist der MYSQL nur noch intern erreichbar aber nicht mehr über das Internet.


ProFTP

Für den FTP Server ProFTPd hab ich mir eine neue Datei erstellt, da ich mit Plesk arbeite und dieser bei Updates gerne mal die Konfiguration neu schreibt kann ich das damit übergehen.

Ich habe einfach die Plesk Konfiguration unter /etc/xinetd.d/ftp_psa und nach /etc/proftpd.d/server kopiert.

Server ist hier der Name der Datei.

In der Datei habe ich habe ich via Bind Befehl meine IPs eingetragen:

xinetd muss jetzt neu gestartet werden:

Und prüfen wieder ob die Änderung wirksam ist:

Der FTP Server ist nur noch über eine IP zu erreichen.


So das war es dann auch schon wieder, was ich weggelassen habe, da ich es nicht hinbekommen habe und ich denke es ist eventuell ein Bug oder so gewollt ist der Teamspeak Server.

Laut Anleitungen soll man in der ts3server.ini seine IP eintragen, was ich auch gemacht habe, schon immer, aber leider läuft der Teamspeak Server auf allen IPs und sogar auf IPv6 obwohl ich das via sysctrl abgeschaltet habe.

IPv6 im Teamspeak scheint sich auch nicht abschalten zu lassen, ist wohl hard coded, leider, aber was will man machen, aber dafür gibt es ja iptables 🙂

Wenn jemand aber dazu weiß würde ich mich über feedback freuen sowie Kommentare aller art.

Vielen Dank für’s lesen.

Euer DocSchneidi ak Cheech

Tagged , , , , , , , , , , , , , , , , , . Bookmark the permalink.

Schreibe einen Kommentar

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