Root-Server absichern durch Firewall


Root-Server absichern durch Firewall

Die Meinungen über den realen Nutzen einer Firewall auf einem Rechner gehen weit auseinander:
Die eine Seite lehnt diese Art von Firewalls(auf dem Rechner laufend) strikt ab!
Ihrer Meinung nach wähnen sich Anwender dadurch in einer falscher Sicherheit, was zu Nachlässigkeiten führen könnte.

Die andere Seite schwört auf kryptische Regelwerke, die jeden Schaden fernhalten sollen.

Die Wahrheit mag irgendwo in der Mitte der beiden gegensätzlichen Meinungen liegen, korrekt ist jedoch, das eine Firewall die auf dem betroffenen Rechner läuft durchaus umgangen werden könnte, je nach verwendeter Schadsoftware..

Auf jeden Fall erhält man mit den richtigen Regeln weniger Müll in den Log-Dateien und sieht schneller, wo es hakt :)

Hinweis

Linux-Rechner haben üblicherweise als Vorgabe keine aktiven Firewallregeln!
Wie auch bei Windows werden bei ihnen in den Vorgaben keinerlei suspekte Datenpakete protokolliert, was dazu führt, das *normalen* User gar nichts von den vielen Scans mitbekommen können..
Viele Nutzer fanden die häufigen Meldungen der Firewalls(siehe Zonealarm) gar als Belästigung und gaben alles entnervt frei..

Der Hinweis des Bundesamtes für Sicherheit in der Informationstechnik, eingebaute Firewalls seien ausreichend, gilt für Server sicher NICHT!

Meiner Meinung nach erhöht es die Sicherheit eines Servers leicht, wenn man ein Regelwerk sinnvoll einsetzt.

100%ige Sicherheit wird man kaum erlangen können(siehe Lauschangriffe der US of America). Es kommt nur auf den Aufwand an..
Auch mit einer Firewall darf man das Gehirn nicht vergessen, sonst.. schaltet jemand aus der Ferne die Firewall einfach ab!

Beschreibung

Es gibt verschiedene Möglichkeiten, die das "Filtern" unerwünschter Datenpakete erlauben:
Der Befehl # iptables erlaubt die Erstellung eines Regelwerkes für Netzwerkschnittstellen.

GeoIp..

GeoIp nutzt Tabellen, in denen die IP-Adressen nach Länderkennungen sortiert sind.
Mit einfachen Worten:
Eine Firewall kann damit leicht ganze Länder blocken oder erlauben..sofern man das Paket installiert.

Installation:
# apt-get install xtables-addons-common installiert die benötigten Pakete.
Das sind 28 Pakete die zusammen 40MB/124MB belegen(der gcc belegt davon schon 25MB/64MB).
# apt-get install libtext-csv-xs-perl Dieses Modul ist nötig für den letzten Befehl!!
Leider müssen noch einige Dinge von Hand erledigt werden:
# find / -name 'xt_geoip_dl' -print gibt Ort der Skripte aus: /usr/lib/xtables-addons/xt_geoip_dl
# /usr/lib/xtables-addons/xt_geoip_dl startet das Perl-Skript und lädt die Datenbank herunter.
# mkdir /usr/share/xt_geoip/ erstellt einen möglicherweise fehlenden Ordner.
# /usr/lib/xtables-addons/xt_geoip_build -D /usr/share/xt_geoip *.csv erzeugt aus der Datenbank eine nutzbare Filterregel.
Fügt man diese Regel in die iptables ein:
-A INPUT -i eth0 -m geoip --src-cc CN -j DROP würden z.B. alle Pakete aus CN=China verworfen.

# iptables -m geoip help

@atwillys.de erweitert dies um ein Update-Skript:
#/bin/sh
cd $(dirname $0) || exit 1;
BASE_DIR=$(pwd);
DL_DIR=$BASE_DIR/dl
mkdir -p $DL_DIR >/dev/null 2>&1
cd $DL_DIR || exit 1;
# Get data (only if modified)
wget -N http://geolite.maxmind.com/download/geoip/database/GeoIPv6.csv.gz || exit 1;
wget -N http://geolite.maxmind.com/download/geoip/database/GeoIPCountryCSV.zip || exit 1;
if [ -f GeoIPv6.csv.gz ]; then
  rm GeoIPv6.csv >/dev/null 2>&1
  gzip -dc GeoIPv6.csv.gz > GeoIPv6.csv || exit 1;
fi
if [ -f GeoIPCountryCSV.zip ]; then
  rm GeoIPCountryWhois.csv >/dev/null 2>&1
  unzip GeoIPCountryCSV.zip >/dev/null || exit 1;
fi
echo "Building ..."
cat *.csv | perl $BASE_DIR/xt_geoip_build -D $DL_DIR || exit 1;
rm *.csv
echo "Copying to $BASE_DIR ..."
rm -rf $BASE_DIR/LE && mv -f $DL_DIR/LE $BASE_DIR/
rm -rf $BASE_DIR/BE && mv -f $DL_DIR/BE $BASE_DIR/
echo "Ready."
Vielleicht ist Ubuntu anders.. aber unter Debian heisst das eine Skript nur xt_geoip_build (ohne .pl).

Inzwischen handhabe ich das so: Wer es "wagt" meinen http-Server mit w00tw00t Scans zu belästigen, dessen ganzes Land sperre ich aus!
Da meine Beschwerden bisher nicht beachtet wurden(wozu sind denn diese "complain to e-mail" Hinweise da?) bleiben die eben draussen.
Das sind die Augenblicke, wo ich mir wünschte, jeder Internetzugang wäre nur mit einer echten ID möglich..

W00tW00t...

Einträge wie "W00tW00t" in Apaches Log-Dateien deuten auf einen Scanversuch mit.. eben den W00tWoot Skripten.
Folgender Eintrag in den iptables lässt den Scanversuch ins Leere laufen:
-A INPUT -i eth0 -p tcp --dport 80 -m string --to 100 --algo bm --string "GET /w00tw00t.at.ISC.SANS." -j DROP"
Diese Regel untersucht die ersten 100 Zeichen aller eingehenden Datenpakete mit Ziel Port80(http) auf das Vorkommen von GET w00tw00t.
Trifft diese Regel auf ein Datenpaket zu wird es kommentarlos verworfen.

Das *böse* Datenpaket wird durch obige Filterregel abgefangen, dem Server(apache) ist die eigentliche Verbindungaufnahme da schon bekannt.
Für jeden w00tw00t Scan taucht nun in Apaches Log-Dateien diese Fehlermeldung auf:"-" 408 0 "-" "-".
Keine Panik:
Sie besagt nur, das eine Verbindung geöffnet wurde aber innerhalb einer gewissen Zeit keine weiterer Abruf erfolgte.
Es konnte ja kein Abruf erfolgen, wenn der durch die iptables-Regel abgefangen wurde.

408: Request Timed Out

Nur zur Info..
-A INPUT -p tcp -m tcp --dport 80 -m string --string "cgi" --algo bm --to 1000 -j DROP