Wie verwendet man FQDN in Firewall-Regeln für GNU / Linux?

6733
Neil Santos

Ich versuche, eine Firewall für ein GNU / Linux-System einzurichten. AFAIK iptablesund seine Gruppe können FQDNs nicht in ihrer Konfiguration verwenden, da erwartet wird, dass sie betriebsbereit sind, bevor die Netzwerkschnittstelle eingerichtet wird und bevor Zugriff auf DNSs verfügbar ist.

Aber aus meiner Erfahrung mit CentOS, ich weiß von mindestens einer Lösung: apf. Ich kann jedoch nicht, dass es unter Arch Linux richtig funktioniert. ( iptables -nvLerzeugt ein Ergebnis ohne Ergebnis; nichts, was ich bekomme, wenn ich denselben Befehl auf unseren Entwicklungsservern ausführte.)

Ich frage mich, ob es hier irgendjemanden gibt, der es geschafft hat, apfmit Arch Linux zu arbeiten, oder ein anderes Firewall-Frontend oder eine andere Firewall kennt, die mit FQDNs in ihren Regeln arbeiten kann.

Beachten Sie, dass die Ziel-FQDNs von dynamischen DNS-Diensten wie DynDNS stammen . Ich würde gerne wissen, ob es eine Möglichkeit gibt, die Firewall dazu zu bringen, DNS-Suchvorgänge durchzuführen, so wie ich denke apf.

Reverse - DNS - Lookups (was AFAIK, ist das, was passiert, wenn ein FQDN in platziert wird, /etc/hosts.allowund es kann nicht gefunden werden /etc/hosts) nicht nicht funktioniert in diesem Fall, weil zum Beispiel, meine IP nicht auf meine DynDNS FQDN aufzulösen.

(Bitte sagen Sie mir auch, ob dies besser auf ServerFault abgefragt wird.)

0

2 Antworten auf die Frage

2
Darren Hall

Bestimmen Sie in Ihrer /etc/nsswitch.conf die Reihenfolge der Hostauflösung.

Wenn deine Gastgeberlinie ist

hosts: Dateien DNS

Dann wird Ihre / etc / hosts -Datei zuerst vor dem DNS geprüft.

Fügen Sie den vollqualifizierten Domänennamen in Ihre Datei / etc / hosts ein.

Die andere Option besteht darin, von der Firewall-Blockierung zur Verwendung von tcp_wrappers zu wechseln, die über DNS-Lookup übereinstimmen können. DNS-Lookups in Firewalls können problematisch sein und widersprechen Sicherheitskonzepten. Eine andere Option besteht darin, einen Dämon auszuführen, der den DynDNS-Namen abfragt, ermittelt, ob er geändert wurde, und dann die Änderung auf Ihre iptable anzuwenden.

Hm ... Das ist interessant. Gibt es einen vorhandenen Dämon, der dies tut? Oder müsste ich mein eigenes schreiben? Ich nehme an, dass es nicht viel Aufwand sein wird, wenn ich es selbst schreiben muss, aber ich möchte nicht die Anstrengung duplizieren, wenn es bereits existiert. Neil Santos vor 14 Jahren 0
Ich hatte ein Perl-Skript, das alle 5 Minuten von cron ausgeführt wurde. Es würde eine DNS-Suche durchführen, das IP-Adressenpaar Name <> in einer / var-Datei speichern und dann mit den vorhandenen iptables-Regeln vergleichen. Ich schaute nicht zu sehr, ob etwas bereits geschrieben wurde, da das, was ich brauchte, ziemlich einfach war. Darren Hall vor 14 Jahren 0
Süss! Danke für den Tipp! Ich werde versuchen, es auf die gleiche Weise umzusetzen. :) Neil Santos vor 14 Jahren 0
Eine Sache, die ich vorsichtig sein sollte, wenn Sie einen beliebigen Prozess im Daemon-Stil über cron ausführen, verwenden Sie eine Art Sperren, um zu verhindern, dass er sich verdoppelt. Dies gilt insbesondere, wenn Sie auf externe Quellen angewiesen sind, z. B. eine DNS-Suche. Darren Hall vor 14 Jahren 0
1
Neil Santos

Nach Darrens Vorschlag habe ich ein Shell-Skript geschrieben, das die IP-Adresse nachschlägt, und dann die Firewall-Regeln nach Bedarf anpasst (und, wenn nötig, meinte ich, alles von früher löschen und durch die richtige IP ersetzen). Hier ist das Skript:

#!/bin/bash  target_hosts="dynhost.does-not-exist.com another-host.does-not-exist.com"  if [ -f "/root/dynblock-curr" ]; then mv /root/dynblock-curr /root/dynblock-prev fi  touch /root/dynblock-curr  if [ -f "/root/dynblock-prev" ]; then # Remove previously set firewall allows for prev_ip in `cat /root/dynblock-prev`; do ufw delete allow from $prev_ip to any app OpenSSH > /dev/null done fi  for target_host in $target_hosts; do # Look up IP per host # echo "Looking up IP for host:" $target_host target_ip=`host $target_host | cut -d ' ' -f 4` if [ $? -eq 0 ]; then echo $target_ip >> /root/dynblock-curr ufw allow from $target_ip to any app OpenSSH > /dev/null fi done 

Offensichtlich wollte ich nicht mehr als die erforderliche Anzahl von Gehirnzellen dafür ausgeben. Dies wurde getestet und garantiert, dass For For (TM) funktioniert. Dies wird cronalle 15 Minuten ausgeführt.

Ein weiterer (ebenso offensichtlicher) Hinweis: Am Ende habe ich ufwdie iptablesRegeln für mich verwaltet (wie gesagt, minimale Anzahl an Gehirnzellen).