iptables Absturz

Moin moin

Ich habe da ein Problemchen mit iptables...
Nunja, anch einigen Attacken und Drohungen auf meinen Server und die dort befindlichen Webseiten bin ich etwas paranoid geworden.
Viele Dienste (SSH, Mail, FTP, ...) sind per iptables geschützt und nurnoch über fest definierte IPs nutzbar.

Das Problem ist, dass ich beim DSL Anschluss natürlich nach jedem Reconnect eine neue dynamische IP bekomme. Danach ist bei iptables wieder alles dicht.

Also hab ich mir eine dyndns domain besorgt und die bei iptables eingetragen, iptables kommt damit klar, und löst die domain zur aktuellen IP auf.
Per Cron lasse ich die firewall immer zum Zeitpunkt x reseten und neu starten, nachdem der Reconnect der DSL Leitung durch ist, damit wieder die aktuelle IP eingetragen werden kann.

Das klappt und geht meistens ein paar Tage gut (manchmal weniger...).

ABER:
Immer wieder kommt der Fehler, dass iptables die dyndns domain angeblich, oder wirklich, nicht auflösen kann.
Dann rastet iptables aus (stürzt ab?) und sperrt gnadenlos jeglichen Verkehr - auch den Webserver.
Resultat: Webseiten offline und Server nurnoch direkt neu zustarten, nichtmehr über remote.

Hat irgendwer in dieser Hinsicht schon Erfahrungen oder hat eine Ahnung, was man machen kann, damit iptables sich nicht andauernd verschluckt?

Danke!

Homeserver
 
Höchstwahrscheinlich sperrt deine IPTables-Regeln auch einkommenden ESTABLISHED-Verkehr, wodurch dein Server keine DNS-Abfragen mehr zurückbekommt bzw. das Ergebnis nicht wieder reinlässt.

Folgende Regel sollte das Problem lösen:
Code:
-A INPUT -m state --state ESTABLISHED -j ACCEPT
bzw. wenn das nicht hilft, dann:
Code:
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
 
Hallo,

Danke für deinen Lösungsvorschlag!
Kling soweit auch logisch, dass iptables einfach nichtmehr auflösen kann, weil die Antwort nicht durchkommt (kann ja auch durchaus so sein).

Allerdings verstehe ich dann nicht, wieso das nur manchmal der Fall ist und die ersten x Male gut geht.

Und ich habe nochmal geschaut, die Regel:

Code:
/sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
befindet sich bereits in iptables, scheint also keine Abhilfe schaffen zu können :-(

Gruß homeserver
 
Irgendwie hab ich den Eindruck, dass dein Script mehr schadet als nützt.

Wäre es evtl eine Option, die zu schützenden Dienste in ein VPN zu legen und nur von da aus erreichbar zu machen?
Ist mit OpenVPN schnell gemacht und deutlich zuverlässiger.
 
Viele Dienste (SSH, Mail, FTP, ...) sind per iptables geschützt und nurnoch über fest definierte IPs nutzbar.
Warum installierst Du Dienste auf einem öffentlich zugänglichen Server, wenn diese nicht öffentlich zugänglich sein sollen?
Wieso "schützt" Du von Haus aus sichere Dienste wie OpenSSH per IPTables? Wie funktioniert Mail "über fest definierte IPs"? Warum darf ich Dir keine Mails schicken?


Anders gefragt: Wovor versuchst Du Deinen Server mittels IPTables zu schützen und warum konfigurierst Du Deine Dienste nicht ordentlich, so dass der IPTables-Müll gar nicht erst zur Debatte stünde?
 
Hallo,
zunächst einmal sorry, dass ich jetzt erst antworte...leider bissel viel um die Ohren gehabt :-(
Und noch einmal vielen Dank für eure Kommentare und Lösungsvorschläge bisher!

Warum installierst Du Dienste auf einem öffentlich zugänglichen Server, wenn diese nicht öffentlich zugänglich sein sollen?
Wieso "schützt" Du von Haus aus sichere Dienste wie OpenSSH per IPTables? Wie funktioniert Mail "über fest definierte IPs"? Warum darf ich Dir keine Mails schicken?


Anders gefragt: Wovor versuchst Du Deinen Server mittels IPTables zu schützen und warum konfigurierst Du Deine Dienste nicht ordentlich, so dass der IPTables-Müll gar nicht erst zur Debatte stünde?

Im prinzip (zumindest aus miner Sicht) ganz logisch:
Ich nutze den Server produktiv und habe dort einige Webseiten drauf.
Für die Verwaltung des Systems nutze ich SSH über einen User dann su etc.
Allerdings bekomme ich häufiger "Drohungen" von Skriptkiddies die meinen nichts besseres zutun zu haben als die Webseiten bzw. den dahinterstehenden Server hacken zu wollen. Daher möchte ich auf nummer sicher gehen und schütze die Dienste die NICHT öffentlich zugägnlich sein sollen per iptables.

Der Webserver ist natürlich uneingeschränkt zugänglich, aber FTP, SSH geht doch niemanden etwas an, außer mich, der die Webseiten administriert. Das gleiche Spielchen beim Mailserver. Mails empfangen ist selbstverständlich offen und kein Problem. Aber die Mails abrufen soll niemand außer mir können, daher schütze ich den Mailserver ebenfalls per iptables.

Meine firewall-activ baut auf einem Gerüst aus Plesk auf, da Plesk aber in dieser hinsicht absolut nicht zu gebrauchen ist (in anderen Dingen aber ganz nett ist), ist die Datei selbst konfiguriert und Plesk funkt da nichtmehr rein.

***.***.***.** steht für eine eingetragene statische IP, von der der Zugang gestattet ist.
beispieldomain.dyndns.org steht für meine dynamische Domain, von der Zugang gestattet sein soll.

Meine firewall-active:

Code:
#!/bin/sh
#
# Automatically generated by Plesk netconf
#

set -e

echo 0 > /proc/sys/net/ipv4/ip_forward
([ -f /var/lock/subsys/ipchains ] && /etc/init.d/ipchains stop) >/dev/null 2>&1 || true
(rmmod ipchains) >/dev/null 2>&1 || true
/sbin/iptables -F
/sbin/iptables -X
/sbin/iptables -Z
/sbin/iptables -P INPUT DROP
/sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables -A INPUT -p tcp ! --syn -j REJECT --reject-with tcp-reset
/sbin/iptables -A INPUT -m state --state INVALID -j DROP
/sbin/iptables -P OUTPUT DROP
/sbin/iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables -A OUTPUT -p tcp ! --syn -j REJECT --reject-with tcp-reset
/sbin/iptables -A OUTPUT -m state --state INVALID -j DROP
/sbin/iptables -P FORWARD DROP
/sbin/iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables -A FORWARD -p tcp ! --syn -j REJECT --reject-with tcp-reset
/sbin/iptables -A FORWARD -m state --state INVALID -j DROP
/sbin/iptables -A INPUT -i lo  -j ACCEPT
/sbin/iptables -A OUTPUT -o lo -j ACCEPT
/sbin/iptables -A FORWARD -i lo -o lo -j ACCEPT
/sbin/iptables -t mangle -F
/sbin/iptables -t mangle -X
/sbin/iptables -t mangle -Z
/sbin/iptables -t mangle -P PREROUTING ACCEPT
/sbin/iptables -t mangle -P OUTPUT ACCEPT
/sbin/iptables -t mangle -P INPUT ACCEPT
/sbin/iptables -t mangle -P FORWARD ACCEPT
/sbin/iptables -t mangle -P POSTROUTING ACCEPT
/sbin/iptables -t nat -F
/sbin/iptables -t nat -X
/sbin/iptables -t nat -Z
/sbin/iptables -t nat -P PREROUTING ACCEPT
/sbin/iptables -t nat -P OUTPUT ACCEPT
/sbin/iptables -t nat -P POSTROUTING ACCEPT


/sbin/iptables -A INPUT -p tcp --dport 12443 -j DROP

/sbin/iptables -A INPUT -p tcp --dport 11443 -j DROP
/sbin/iptables -A INPUT -p tcp --dport 11444 -j DROP

/sbin/iptables -A INPUT -p tcp --dport 8447 -s ***.***.***.** -j ACCEPT


##################################################
##### Subnetze fuer PLESK-Admin hinzufuegen ######

/sbin/iptables -A INPUT -p tcp --dport 8447 -s ***.***.***.** -j ACCEPT

##################################################


/sbin/iptables -A INPUT -p tcp --dport 8447 -j DROP

/sbin/iptables -A INPUT -p tcp --dport 8443 -s ***.***.***.** -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 8443 -s beispielhost.dyndns.org -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 8443 -s ***.***.***.** -j ACCEPT

/sbin/iptables -A INPUT -p tcp --dport 8443 -s ***.***.***.** -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 8880 -s ***.***.***.** -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 8880 -s beispielhost.dyndns.org -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 8880 -s ***.***.***.** -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 8443 -j DROP
/sbin/iptables -A INPUT -p tcp --dport 8880 -j DROP

/sbin/iptables -A INPUT -p tcp --dport 80 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 443 -j ACCEPT

/sbin/iptables -A INPUT -p tcp --dport 21 -s ***.***.***.** -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 21 -s beispielhost.dyndns.org -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 21 -j DROP

/sbin/iptables -A INPUT -p tcp --dport 22 -s ***.***.***.** -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 22 -s beispielhost.dyndns.org -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 22 -s ***.***.***.** -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 22 -s ***.***.***.** -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 22 -s ***.***.***.** -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 22 -j ACCEPT


/sbin/iptables -A INPUT -p tcp --dport 22 -j DROP

/sbin/iptables -A INPUT -p tcp --dport 587 -j DROP

/sbin/iptables -A INPUT -p tcp --dport 25 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 465 -j ACCEPT

/sbin/iptables -A INPUT -p tcp --dport 110 -s **.***.***.** -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 995 -s **.***.***.** -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 110 -s beispielhost.dyndns.org -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 995 -s beispielhost.dyndns.org -j ACCEPT

/sbin/iptables -A INPUT -p tcp --dport 110 -j DROP
/sbin/iptables -A INPUT -p tcp --dport 995 -j DROP

/sbin/iptables -A INPUT -p tcp --dport 143 -s **.***.***.** -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 993 -s **.***.***.** -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 143 -s beispielhost.dyndns.org -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 993 -s beispielhost.dyndns.org -j ACCEPT


/sbin/iptables -A INPUT -p tcp --dport 143 -j DROP
/sbin/iptables -A INPUT -p tcp --dport 993 -j DROP

/sbin/iptables -A INPUT -p tcp --dport 106 -j DROP

/sbin/iptables -A INPUT -p tcp --dport 3306 -j DROP

/sbin/iptables -A INPUT -p tcp --dport 5432 -j DROP

/sbin/iptables -A INPUT -p tcp --dport 9008 -j DROP
/sbin/iptables -A INPUT -p tcp --dport 9080 -j DROP

/sbin/iptables -A INPUT -p udp --dport 137 -j DROP
/sbin/iptables -A INPUT -p udp --dport 138 -j DROP
/sbin/iptables -A INPUT -p tcp --dport 139 -j DROP
/sbin/iptables -A INPUT -p tcp --dport 445 -j DROP

/sbin/iptables -A INPUT -p udp --dport 1194 -j DROP

/sbin/iptables -A INPUT -p udp --dport 53 -j DROP
/sbin/iptables -A INPUT -p tcp --dport 53 -j DROP

/sbin/iptables -A INPUT -p udp -j DROP
/sbin/iptables -A INPUT -p tcp -j DROP

/sbin/iptables -A INPUT -p icmp --icmp-type 8/0 -j DROP

/sbin/iptables -A INPUT -j DROP

/sbin/iptables -A OUTPUT -j ACCEPT

/sbin/iptables -A FORWARD -j DROP

echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /usr/local/psa/var/modules/firewall/ip_forward.active
chmod 644 /usr/local/psa/var/modules/firewall/ip_forward.active
#
# End of script
#

Ich habe dann als cron eingetragen, dass firewall-emergency ausgeführt wird und direkt im Anschluss firewall-active.
Das geht meistens ein paarmal gut, und danach macht iptables komplett dicht. Immer wenn der Hostname nicht direkt aufgelöst werden kann (wieso auch immer?), wie mir scheint, verschluckt sich iptables da.

Ich habe außerdem beobachten können, dass dieses sonderbare Ergebnis nur auftritt, wenn firewall-emergency bzw. firewall-active per cron ausgeführt werden (als root).
Wenn ich das direkt über die Konsole ausführe, bleibt der Fehler meines Beobachtens nach aus.

vielen Dank für eure Mühe schonmal!
 
Da keiner eine Lösung für das Phänomen zu sehen scheint, probiere ich nun folgendes aus:

Bisher wurde alle 2 Minuten jeweils per Cornjob iptables geleert und dann wieder neu gestartet. Dabei hing sich die Firewall auf bzw machte alles dicht.

Ich habe mir nun ein Skript gebastelt, welches beim Aufruf checkt, ob sich die IP der dyndns Domain geändert hat.
Nur dann wird iptables resettet und neu bestückt.
Damit spare ich mir schonmal eine ganze Menge aufrufe und damit mögliche Problemsituationen.
Die Zeit wird jetzt zeigen, ob es zu Problemen kommt, oder das so praktikabel ist.

Danke trotzdem für eure Hilfsansätze!

Gruß homeserver
 
Back
Top