Plesk, iptables und fail2ban

tsk

Member
Hallo zusammen,

ich habe die letzten Wochen damit verbracht, meinen vServer (Ubuntu 8.04/Plesk 9.5.4, 1 GB. Ram, dyn. 2 GB.) weitest möglich abzusichern, ohne dabei auf den Firewall zurück zu greifen. Diese Maßnahmen sind jetzt abgeschlossen (zumindest vorläufig) und ich möchte diesen mutmaßlich sicheren Server jetzt noch mit Fail2ban ausrüsten, um das Lograuschen zu reduzieren und die letzten verbliebenen „Lücken“ - Mail Ports und Apache, abzusichern. Mir ist auch bewusst, das ein FW auf einem vServer nur einen begrenzten Nutzen haben kann. Ich hätte dazu wahrscheinlich keine bis wenige Fragen, hätte ich nicht Plesk mit im Boot.

Obwohl der FW in Plesk noch deaktiviert ist läuft natürlich iptables bereits – wenn auch nur im „allow all“ Modus. Nach meinem bisherigen Wissensstand wertet Fail2ban Log Einträge aus – und fügt – bei Erreichen eines Schwellenwerts, dynamisch iptables Regeln hinzu, um weitere Anmeldeversuche der Bösen zu verhindern. Genau das möchte ich.

Ich vermute, dass sich hinter dem Plesk Firewall lediglich ein grafisches Frontend zu iptables verbirgt.

Jetzt zu meinen Fragen:

1.Wie verhält sich Plesk, wenn ein Prozess auf dem Server Regeln zur FW Konfiguration hinzufügt? Bleiben die erhalten, oder killt Plesk sie, z.B. im Rahmen eines Updates?

2.Ist es überhaupt sinnvoll, Plesk in diesen Prozess zu involvieren oder sollte ich die (wenigen) Grundregeln, die mir vorschweben, lieber gleich manuell eintragen und den FW auf Plesk Ebene ausgeschaltet lassen? Oder führt das Hinzufügen von Regeln automatisch auch für Plesk zu einem Aktivierungsstatus des FW?

3.Mein ParallelsPowerPanel sagt aktuell „Die Firewall ist zurzeit nicht aktiv. Um die Firewall zu aktivieren, wählen Sie einen der Firewallbetriebsmodi aus.“ Darunter werden 3 Modi gezeigt: Normaler FW Modus, Erweiterter FW-modus mit Standardrichtlinie 'Akzeptieren' und zuletzt dito mit Standardrichtlinie 'Ablehnen'. Gehe ich recht in der Annahme, das die Aussage des PPP, das derzeit KEIN FW aktiv ist falsch ist? Ich vermute, das immer minimal die erste Auswahl, also „Normaler FW Modus“ aktiv ist. Sehe ich das richtig?
Ein iptables -L zeigt zumindest:
Code:
Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

4.Im Plesk Panel finde ich unter „Firewall-Regeln verwalten“ vordefinierte Regeln, die ebenfalls fast alles zulassen (alles außer Weiterleitung). Keine der Regeln ist derzeit editierbar (vielleicht nur deshalb, weil ich noch nichts aktiviert habe?). Wäre dieses der Regelfundus, den ich bei Wahl von „Erweiterter FW-modus mit Standardrichtlinie 'Akzeptieren'“ als Ausgangsbasis erwarten könnte?

5.Im „plesk-9.5-unix-advanced-administration-guide“ steht folgender Satz: „Make sure these ports are opened for all Parallels Plesk Panel services to work with a firewall:“, gefolgt von einer Auflistung sämtlicher Standard Ports plus der spezifischen Plesk Ports. Das „Make sure“ könnte implizieren, dass eine Verlegung des ssh Standardports (wie z.B. von mir vorgenommen) zu einem Ableben des Plesk Panels führen könnte, was natürlich recht unkommod wäre. Gehe ich recht in der Annahme, das es Plesk dabei speziell um „ihre“ Ports ging, im Sinne eines „make sure das zumindest unsere Ports klappen, sonst wird’s finster“?

6.Fail2ban benötigt Python. Ich habe mod_python rausgeschmissen, da ich es nicht (im Apache) benötige. Für mich sind ein Apache Modul und eine Script-Sprache zwei verschiedene Schuhe. Benötigt Fail2ban auch das mod_python?

Sorry für den langen Text und die vielen Fragen – aber ich habe einfach zuviele Fundstellen „ergoogelt“ a la „Lass bloss die Finger von Plesk, wenn es um Firewalls geht“. Andererseits hat ein GUI schon einen gewissen Charme.

Danke für jeden möglichen Input,

Thomas
 
Viele Fragen, eine Antwort:
Entscheide Dich lediglich eine "Firewall" zu nutzten. Entweder das Power-Panel oder Plesk oder iptables per Commandozeile.

Noch die kleinen Fragen am Rande:
zu 5) Ja, Du kannst den ssh-Port verschieben. Solltest nur entsprechend sicher sein, dass er durch die Firewall erreichbar ist.
zu 6) Ja, ist ein riesiger Unterschied.

Eine Frage die hier kurz aufgeworfen wurde und wohl von einem Virtuozzo-Experten beantwortet werden muss:
Konfiguriert die Firewall des Parallels-Power-Panel eigentlich die iptables des Containers oder des Hosts?
Ich denke Letzteres, oder?

huschi.
 
Hallo Huschi,

danke für Deine Antworten. Den ssh Port habe ich bereits verschoben und es ist mir klar, dass, solange ich dafür keine Regel definiere, er mit FW unerreichbar sein wird. Meine Frage bezog sich eher auf die allumfassende Auflistung der Ports in der offiziellen Plesk Doku - und die Formulierung, die den Eindruck erzeugen könnte, genau diese Ports müssen offen sein, damit Plesk damit weiterhin klar kommt. Ich denke jedoch, es geht da eher um die Plesk relevanten Ports.

Das Virtuozzo PPP kann nach meinem bisherigen Verständnis eigentlich nur den gesamten Host Container betreffen - und auch nur im Sinne einer on/off Entscheidung, denn ich sehe bislang dort keine Möglichkeit, irgend welche Regeln zu definieren. Müsste ich aber merken, wenn ich die Einstellung nur im Plesk Panel vornehme. Wenn ich es dort aktiviere müsste ich eigentlich eine Meldung bekommen, das es hostseitig noch abgeschaltet ist. Plesk täte gut daran, redundante Bereiche im Virtuozzo und PPP mal deutlich aufzuräumen. Ist wahrscheinlich eine Altlast des Mergers.

Deine Antwort auf Frage 6 habe ich so gedeutet: Ja, ich brauche Python, aber kein mod_python. Richtig?

Nochmals, danke für die Hilfe.
 
allumfassende Auflistung der Ports ..., die den Eindruck erzeugen könnte, genau diese Ports müssen offen sein, damit Plesk damit weiterhin klar kommt.
Die Doku orientiert sich in erster Linie an laienhafte Administratoren. Es ist also ein Mischung aus den Ports die standardmäßig für einen Webhosting-Server offen bleiben sollten und den Plesk-eigenen Ports.
Jeder fortgeschrittene Admin kann hier locker drüber weg lesen und sein eigenes Ding machen.

nur den gesamten Host Container
Was denn jetzt? Host oder Container?
Falls das Power-Panel (wie ich annehme) lediglich den Host konfiguriert, dann sind es zwei unterschiedliche Firewalls die nichts miteinander zu tun haben. Und Du kannst in Plesk oder auf dem Server keine Einstellungen vom PPP sehen.

Ja, ich brauche Python, aber kein mod_python. Richtig?
Wie viele "ja" brauchst Du? Hab ich aktuell im Angebot: Ein Dutzend für 0 Cent.

huschi.
 
Jeder fortgeschrittene Admin kann hier locker drüber weg lesen und sein eigenes Ding machen.

Jepp - das ist, nach dem Geschriebenen, auch meine Interpretation. Verwirrend war, dass es im "plesk-9.5-unix-advanced-administration-guide" steht, also vom Duktus her nicht unbedingt für laienhafte Admins gedacht. Ich bin selbst noch lange kein fortgeschrittener Admin, dafür aber ein sorgfältiger. Und als solcher frage ich lieber einmal zuviel, als über "ambiguous language" zu stolpern.

Was denn jetzt? Host oder Container?

Ist bei einem vServer - wie bei meinem - nicht der gesamte Host lediglich ein Container? Ich denke schon, und genau den betrifft Virtuozzo. Ich werde hier vorerst nichts aktivieren, sondern lediglich im PPP.

Wie viele "ja" brauchst Du? Hab ich aktuell im Angebot: Ein Dutzend für 0 Cent.

Als von mir hoch geschätzte Quelle für fundierte Informationen würde ich ein "ja" nie unter Wert verkaufen :-)

So, Backup läuft. In 10 Minuten weiß ich mehr.

Grüße,

Thomas
 
Ist bei einem vServer - wie bei meinem - nicht der gesamte Host lediglich ein Container?
Nein, definitiv nicht. Der "Host" (oder auch Host-System) bezeichnet in dem Falle den physikalischen Server auf dem Virtuozzo als Virtualisierungs-System läuft. Ein Container ist eine virtualisierte Einheit (==Vserver).
Ein Host beherbergt also mehrere Container. (Von "Containern" redet man nur bei Virtuozzo/OpenVZ.)

huschi.
 
Nein, definitiv nicht. Der "Host" (oder auch Host-System) bezeichnet in dem Falle den physikalischen Server auf dem Virtuozzo als Virtualisierungs-System läuft.

Prima, wieder was gelernt. Dann müßte also im Parallels Power Panel doch der gleiche FW gemeint sein, wie im Parallels Plesk Panel (wie kann man nur zwei Produkte schaffen, die man identisch abkürzen würde - PPP?), denn Host Europe würde sich hochgradig unvernünftig verhalten, mir per Virtuozzo Zugriff auf ihr Wirtssystem zu gewähren.

Ich hab den FW nur im Plesk Panel aktiviert (natürlich direkt falsch herum - allow-all statt deny-all, was sicherlich am Ende "schlanker" wäre). Aber eine "fang noch mal von vorne an" Funktion gibts nicht. Wahrscheinlich würde dies wieder über Virtuozzo laufen. Hochgradig unstringent.

Nachdem ich anfangs (fast) alles verboten hatte, wurde mir klar, dass das ja völliger Blödsinn ist, etwas zu verbieten, wo eh nichts mehr lauscht. Hab dann alles wieder geöffnet, was ich vorher auf Systemebene geschlossen hatte, bis auf den "Mailpasswort-Änderungsservice", also Port 106. Lieber wäre mir, ich könnte die Regel auch noch raus nehmen und ihn auf andere Weise (falls möglich) an den Localhost binden.

Ansonsten hat alle prima geklappt - hab mich nicht ausgesperrt :-)
Ich wollte ja eigentlich nur eine schlanke Basis für fail2ban.
 
Prima, wieder was gelernt. Dann müßte also im Parallels Power Panel doch der gleiche FW gemeint sein, wie im Parallels Plesk Panel (wie kann man nur zwei Produkte schaffen, die man identisch abkürzen würde - PPP?), denn Host Europe würde sich hochgradig unvernünftig verhalten, mir per Virtuozzo Zugriff auf ihr Wirtssystem zu gewähren.

Das eine ist das Parallels Plesk Panel (PPP), das andere das Virtuozzo Power Panel (VZPP).

Über Letzteres setzt du die Regeln in der Tat direkt auf dem Hostsystem - in der Forward-Chain, die für deine VE zuständig ist.

Aber wie Huschi schon sagte, solltest du nicht mehrere Firewalls mischen, sondern bei einer einzigen bleiben.
 
Ja, ich habe mich jetzt für die Verwaltung über das Plesk Panel entschieden - und es klappt auch alles, wie es soll. Jetzt bleiben mir eigentlich nur 2 Fragen:

1. Ich vermute, dass die FW Konfiguration rebootfest ist, was ja ein "save" der Regeln erfordert. Ich habe bereits die üblichen "verdächtigen" Orte durchsucht, nach einer entsprechenden Datei. Aber ohne Erfolg. Weiß jemand, wo Plesk die ablegt? Meine Idee wäre, sie händisch aufzuräumen bzw. von meiner ersten "allow-all" auf eine "deny-all" Strategie zu wechseln, die m.E. performanter sein dürfte.

2. Ich habe geeignete Quellen für die Installation von fail2ban hinterlegt, vermute aber, dass es auch über den Plesk Autoinstaller gehen könnte. Gibt's fail2ban über den Autoinstaller?
 
Ich muß noch mal stören :-)

Vorab - es läuft alles, wie es soll.

Ich habe mich für die iptables Konfiguration per PPP entschieden - und mit einer "Allow-all" Konfiguration begonnen, erweitert um eine Regel für meinen verlegten SSL Port. Daraus generiert Plesk dann folgendes Regelwerk (ich habe es weitgehend Kommentiert - vielleicht hilfts ja auch anderen):

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
# Flush/delete all rules in every chain
/sbin/iptables -F
# delete every non-builtin chain in the table
/sbin/iptables -X
# Zero the packet and byte counters in all chains
/sbin/iptables -Z
# Default Policies
# Default policy for INPUT chain
/sbin/iptables -P INPUT DROP
# Allowing already established Sessions to receive traffic
/sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Reject all INPUT packets with inproper syn
/sbin/iptables -A INPUT -p tcp ! --syn -j REJECT --reject-with tcp-reset
# Drop all invalid INPUT packets
/sbin/iptables -A INPUT -m state --state INVALID -j DROP

# Default policy for OUTPUT chain
/sbin/iptables -P OUTPUT DROP
# Allowing already established Sessions to output traffic
/sbin/iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Reject output of all packets with inproper syn
/sbin/iptables -A OUTPUT -p tcp ! --syn -j REJECT --reject-with tcp-reset
# Drop all invalid output packets
/sbin/iptables -A OUTPUT -m state --state INVALID -j DROP

# Default policy for FORWARD chain
/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

# Accept everything from loopback
/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
# Allow all incoming traffic on the non-default SSH port (myNewPortNum)
/sbin/iptables -A INPUT -p tcp --dport "myNewPortNum" -j ACCEPT
# Allow plesk-https (Port 8443)
/sbin/iptables -A INPUT -p tcp --dport 8443 -j ACCEPT
# Allow plesk-http (Port 8880)
/sbin/iptables -A INPUT -p tcp --dport 8880 -j ACCEPT

# Allow all incoming web traffic (Port 80 and 443)
/sbin/iptables -A INPUT -p tcp --dport 80 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# Allow ftp (Port 21): Can be allowed, since ftp is not active
/sbin/iptables -A INPUT -p tcp --dport 21 -j ACCEPT
# Allow ssh (Standard Port 22): Can be allowed, since ssh port is moved away and nobody is listening
/sbin/iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# Mail message submission (Port 587, qmail smtpd)
/sbin/iptables -A INPUT -p tcp --dport 587 -j ACCEPT
# smtp (Port 25): "Filtered" even w/o FW because of checked "Nachrichtenübermittlung aktivieren", which limits smtp to Port 587
/sbin/iptables -A INPUT -p tcp --dport 25 -j ACCEPT
# smtps (Port 465, qmail)
/sbin/iptables -A INPUT -p tcp --dport 465 -j ACCEPT
# pop3 (Port 110: Courier pop3d)
/sbin/iptables -A INPUT -p tcp --dport 110 -j ACCEPT
# pop3s (Port 995, Courier pop3s)
/sbin/iptables -A INPUT -p tcp --dport 995 -j ACCEPT
# imap (Port 143, Courier imap)
/sbin/iptables -A INPUT -p tcp --dport 143 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 993 -j ACCEPT
# Block poppassd (Port 106, needed for pop-users password change by localhost only - to do: check if binding to localhost can be done elsewhere )
/sbin/iptables -A INPUT -p tcp --dport 106 -j DROP
# Allow MySQL (Port 3306): May be allowed since Port is bound to localhost
/sbin/iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
# postgres (Port 5432): not installed on system
/sbin/iptables -A INPUT -p tcp --dport 5432 -j ACCEPT
# Allow Tomcat connector port (Port 9008): Tomcat is disabled, therefore not needed
/sbin/iptables -A INPUT -p tcp --dport 9008 -j ACCEPT
# Allow tomcat (Port 9080. non-secure): Tomcat is disabled, therefore not needed
/sbin/iptables -A INPUT -p tcp --dport 9080 -j ACCEPT

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

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

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

# Allow ICMP packets (to do: limit, see next 2 lines)
# /sbin/iptables -A INPUT  -p icmp -m limit --limit 10/second -j ACCEPT
# /sbin/iptables -A INPUT  -p icmp -j DROP
/sbin/iptables -A INPUT -p icmp --icmp-type 8/0 -j ACCEPT

/sbin/iptables -A INPUT -j ACCEPT

/sbin/iptables -A OUTPUT -j ACCEPT

/sbin/iptables -A FORWARD -j DROP

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

Es funktioniert, aber "schön" ist was anderes. Tomcat, Postgres und andere Services sind gar nicht aktiviert, erhalten aber ihre eigene Allow Regel. Schaltet man diese über Plesk ab, erhält man statt dessen eine Deny Regel. Beides ist Resourcenvergeudung und komplett überflüssig.

Schaltet man dann noch die Systemrichtlinien für ein- und ausgehenden restlichen Traffic auf DENY, gibts Ärger mit den Mail Diensten (verstehe ich nicht, wurde doch alles vorher über individuelle Regeln erlaubt). Es gibt also irgend einen Port, den man durch die Systemrichtlinien killt, weil eben nicht die richtige Individualregel existiert.

Ich habe Angst, mich auszusperren, deshalb die Fragen an mögliche Wissende:

1. Plesk 9.5.4 erlaubt mir zwar das Löschen "meiner" Regeln, aber nicht das Löschen von vordefinierten Diensten wie dem unbenötigten Postgres. Dies könnte ich natürlich direkt auf dem Server rausschmeißen. Aber - wie reagiert Plesk auf eine händische Änderung. Am liebsten würde ich jetzt händisch die generierte Regelliste überarbeiten. Sie würde um mehr als 2/3 kürzer, bei identischer Funktionalität.

2. Gibt es irgend eine Möglichkeit eines Plesk-seitigen "alles-auf-Anfang" zurückstellen, also an den Punkt, als nur 3 alles erlaubende Systemrichtlinien existierten (diesen Zustand bezeichnet Plesk mit "kein Firewall aktiv"), und man alternativ eine Allow- oder Deny-all Konfiguration wählen konnte. Ich hoffe, dass bei einer Deny-all Konfiguration nicht für jeden möglichen Dienst, der nicht installiert ist, eine eigene Regel erstellt wird.

Danke im Voraus für vielleicht ersparte schlechte Erfahrungen,

Thomas
 
Kopiere Dir das Firewall-Startscript, sage Plesk er soll es lassen und arbeite auf Deiner Kopie.

huschi.
 
Klingt erschreckend einfach - danke für den Tipp. Dann muß ich nur dran denken, unter Plesk die Finger davon zu lassen. Du weißt aber auch nicht, ob es unter Plesk eine "Complete Revert" Funktion gibt? Ich denke, ich würde mich wohler damit fühlen, den FW komplett ohne Plesk zu betreiben.
 
Öhmm...ja, aber genau die Funktion zum deaktivieren fehlt im PPP. Oder ich bin zu dösig, sie zu finden. Ich vermute, ein Abschalten würde zu Regeln entsprechend "firewall-emergency.sh" führen. 3 Regeln - allowing all war der Zustand vor Aktivierung des FW.
 
Ich vermute, ein Abschalten würde zu Regeln entsprechend "firewall-emergency.sh" führen.

Nicht vermuten - testen! Gemäß Doku wird nach Anwendung der Änderungen versucht, das Pleskpanel zu erreichen. Schlägt dies fehl, wird ein Rollback auf die vorherige Firewall-Konfiguration durchgeführt.
 
Ist mir zwar sehr peinlich, aber genau diese "Doku" habe ich bisher nicht gefunden. Ich habe mir alles zu Plesk 9 runtergeladen (9 PDF) und abgesehen vom "plesk-9.5-unix-advanced-administration-guide.pdf" (in dem dazu fast nichts brauchbares steht) wird der Begriff Firewall gekonnt umschifft. Kannst Du mir sagen, welche Doku Dir vorliegt?
 
Back
Top