Hallo!
Ich habe wiedermal ein Problem. Ich wollte letztens meinen Debian 3.1 Server, der nur auf textbasis läuft updaten. Dabei stellte sich allerdings heraus, dass dies nicht möglich ist, weil der Server keine Namen auflösen kann. Ich route allerdings über ihn Daten ins Netzwerk weiter und an den Clients funktioniert die Namensauflösung wunderbar.
Was mir schon aufgefallen ist:
Ich habe ein skript, welches die Ports in der Firewall schliesst. Wurde das Skript gestartet kann der Server keine Namen mehr auflösen. Allerdings will ich nicht dauernd meine Server neustarten, nur um updates einspielen zu können.
Welchen Port muss ich öffnen für lo bzw. wie erledige ich dies?
[Skript start]
EXTERNDEV=’eth1′
INTERNDEV=’eth0′
iptables -A INPUT -p tcp -i $EXTERNDEV –dport 21 -j DROP
iptables -A INPUT -p tcp -i $EXTERNDEV –dport 22 -j DROP
iptables -A INPUT -p tcp -i $EXTERNDEV –dport 23 -j DROP
iptables -A INPUT -p tcp -i $EXTERNDEV –dport 25 -j DROP
iptables -A INPUT -p tcp -i $EXTERNDEV –dport 79 -j DROP
iptables -A INPUT -p tcp -i $EXTERNDEV –dport 80 -j DROP
iptables -A INPUT -p tcp -i $EXTERNDEV –dport 98 -j DROP
iptables -A INPUT -p tcp -i $EXTERNDEV –dport 110 -j DROP
iptables -A INPUT -p tcp -i $EXTERNDEV –dport 111 -j DROP
iptables -A INPUT -p tcp -i $EXTERNDEV –dport 113 -j DROP
iptables -A INPUT -p tcp -i $EXTERNDEV –dport 135 -j DROP
iptables -A INPUT -p tcp -i $EXTERNDEV –dport 137 -j DROP
iptables -A INPUT -p tcp -i $EXTERNDEV –dport 139 -j DROP
iptables -A INPUT -p tcp -i $EXTERNDEV –dport 143 -j DROP
iptables -A INPUT -p tcp -i $EXTERNDEV –dport 443 -j DROP
iptables -A INPUT -p tcp -i $EXTERNDEV –dport 445 -j DROP
iptables -A INPUT -p tcp -i $EXTERNDEV –dport 631 -j DROP
iptables -A INPUT -p tcp -i $EXTERNDEV –dport 701 -j DROP
iptables -A INPUT -p tcp -i $EXTERNDEV –dport 901 -j DROP
iptables -A INPUT -p tcp -i $EXTERNDEV –dport 10000 -j DROP
iptables -A INPUT -p tcp -i $EXTERNDEV –dport 8080 -j DROP
iptables -A INPUT -p tcp -i $EXTERNDEV –dport 4662 -j DROP
iptables -A INPUT -p tcp -i $EXTERNDEV –dport 3389 -j DROP
iptables -A INPUT -p tcp -i $EXTERNDEV –dport 5000 -j DROP
iptables -A INPUT -p tcp -i $EXTERNDEV –dport 6000 -j DROP
iptables -A INPUT -p udp -i $EXTERNDEV –dport 1:65535 -j DROP
[Skript Ende]
Danke für die Hilfe
Hi,
1. Hilfe zur Selbsthilfe
fejf@kobayashi:[~] > cat /etc/services | grep -i domain
domain 53/tcp # Domain Name Server
domain 53/udp
2. Falls das zu unverständlich ist: die DNS Auflösung verwendet Standardmäsig Port 53 UDP. Somit hast du es mit deiner letzten Regel geblockt (iptables -A INPUT -p udp -i $EXTERNDEV –dport 1:65535 -j DROP). Also mach einfach vor diese Zeile ein:
iptables -A INPUT -p udp -i $EXTERNDEV –dport 53 -j ACCEPT
Des Weiteren würde ich dir empfehlen die Sache komplett anders anzugehen: normalerweise stellt man die Default-Policy auf DROP (iptables -A INPUT -P DROP && iptables -A FORWARD -P DROP && iptables -A OUTPUT -P DROP) und erlaubt anschließend einzelne Ports. Somit hast du nur Ports offen die wirklich gebraucht werden und es kann dir nicht passieren das du einen Port aus versehen vergisst zu blocken.
MfG,
FEJF
Hallo,
ich kann das Ganze nicht so recht nachvollziehen. Das Script blockt doch nur
alle eingehenden Verbindungen von außen, eine DNS Abfrage ist aber eine
ausgehende Verbindung, d.h. sie dürfte nicht geblockt werden. Meine Firewall
blockiert sämtliche Ports von außen und ich habe das Problem nicht.
Habe ich hier irgendeine Denkpanne?
Ich habe eher den Eindruck, dass irgendjemand in /etc/resolv.conf
herumwildert.
mfg
Rico
resolv.conf enthält:
search ktl.at
nameserver xxx.xxx.xxx.xxx
nameserver xxx.xxx.xxx.xxx
Diese nameserver sind unter windows (clients) auch eingetragen und dort funktioniert es.
zu 1) da bekomme ich diese ausgabe!
~# cat /etc/services | grep -i domain
domain 53/tcp nameserver # name-domain server
domain 53/udp nameserver
zu 2) Durch die Eingabe von dem bekomme ich leider auch keine Namensauflösung.
Es wird zwar angenommen, aber funktioniert nicht.
Also das Skript block eingehende Verbindungen – egal welche. Und eine Antwort auf eine DNS-Abfrage ist nun auch mal eine eingehende Verbindung ;) man könnte das auch eleganter lösen:
iptables -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT
Das erlaubt alle eingehenden Verbindungen zu denen eine Ausgehende Verbindung schon vorhanden ist, jedoch keine neuen eingehenden Verbindungen.
fejf
Zu 2.: die Zeile muss vor deiner letzten iptables Zeile stehen! Wenn erst mal das -p 1:65535 -j DROP in iptables ausgeführt wurde hilft danach kein ALLOW mehr. So bald der zu dem DROP kommt hört er auf zu suchen. Also mach einfach mal meine Zeile an den Anfang deines Skripts.
fejf