Root-Server Konfiguration
Die wichtigsten Grundeinstellungen für einen Root-Server werden hier zusammengefasst:
* einen nicht-privilegierten Benutzer hinzufügen
* eine rudimentäre Firewall einrichten(incl. automatisches Startskript)
* eine Java-Umgebung hinzufügen(optional)
Sicherheitshinweis
Achtung:
Der Betreiber eines Servers ist dafür verantwortlich, das dieser nicht für illegale Zwecke mißbraucht werden kann. Neben regelmäßigen Sicherheitsupdates und Verwendung starker Passwörter muß Sorge dafür getragen werden, das der Server so sicher wie möglich abgesichert wird.
Die von mir aufgeführten Hinweise/Tipps/Verfahren sind vielleicht inzwischen veraltet oder falsch.
Nutzung auf eigene Gefahr!
Normale User und der Superuser(root)
Hinweis:
Linux unterscheidet zwischen normalen Benutzern(Usern) und dem privilegiertem root-Zugang.
Der root-Zugang bei Linux ist vergleichbar mit dem Administrator-Zugang bei Windows.
Einziger Unterschied: Bei Linux darf der root wirklich alles ^^. Auch alles versehentlich kaputtmachen..
Bei Befehlen verdeutlicht ein vorangestelltes Zeichen wie $ oder # ob besondere Rechte für die Verwendung nötig sind.
$ bezieht sich auf Befehle, die von jedem normalen Nutzer verwendet werden können.
# bezieht sich auf Befehle, die nur vom Super-User(root) genutzt werden dürfen.
Diese Hinweiszeichen($ bzw. #) dürfen selbstverständlich NICHT mit eingegeben werden!!
Erste Schritte auf dem Server
Via PuTTY kann man sich bequem aus der Ferne in den Server einloggen
Dabei wählt man als Usernamen root und gibt dann das vorher gewählte Passwort für diesen User ein.
Nicht erschrecken: Alles läuft über eine Terminalemulation ab, daher sieht man auch nur Text(und keine "Buttons").
Linux aktuell halten
/etc/apt/sources.list enthält eine Liste der Update-Server.
Diese sollte man folgendermassen anpassen:
# main sources
deb http://ftp.de.debian.org/debian/ stable main contrib non-free
deb-src http://ftp.de.debian.org/debian/ stable main contrib non-free
# security
deb http://security.debian.org/ stable/updates main contrib non-free
deb-src http://security.debian.org/ stable/updates main contrib non-free
# stable-updates
deb http://ftp.de.debian.org/debian/ stable-updates main contrib non-free
deb-src http://ftp.de.debian.org/debian/ stable-updates main contrib non-free
Anstelle von stable kann auch der Codename wie z.B. "Jessie" für Debian 8 oder "testing" für die nächste Version gesetzt werden.
# cat /proc/version zeigt die aktuell genutzte Linux-Version an.
$ cat /etc/*-release zeigt auch den Codenamen der Linux-Version an.
$ lsb_release -a zeigt auch den Codenamen der Linux-Version an.
Linux sucht nicht automatisch nach Updates!
Daher muss man mit den beiden folgenden Befehlen jedesmal selbst ein Update "anstossen":
# apt-get update aktualisiert die Quellen,
# apt-get upgrade führt dann im Anschluß die eigentlichen Updates durch.
Diese beiden Befehle sollte man jedes Mal direkt vor der Installation weiterer Programme durchführen!
Linux aktuell halten(Versions-UPGRADE)
Bekommt man bei seinem Server-Vermieter nur eine veraltete Debian-Version(z.B. noch Wheezy(debian7)), kann man leicht upgraden:
Die Datei /etc/apt/sources.list muss dann meist angepasst werden(Stable reicht aus).
Debian-8(Jessie) ist momentan(Mai 2015) die "Stable"-Version, Debian-9(Stretch) ist die "Testing"-Version.
Das folgende Beispiel zeigt den Inhalt der Datei, wenn man unbedingt schon die neue(testing) Version von Debian testen möchte:
# main sources
deb http://ftp.de.debian.org/debian/ Stretch main contrib non-free
deb-src http://ftp.de.debian.org/debian/ Stretch main contrib non-free
# security
deb http://security.debian.org/ Stretch/updates main contrib non-free
deb-src http://security.debian.org/ Stretch/updates main contrib non-free
# stable-updates
deb http://ftp.de.debian.org/debian/ Stretch-updates main contrib non-free
deb-src http://ftp.de.debian.org/debian/ Stretch-updates main contrib non-free
Wie immer vor Installationen/Updates zuerst die Quellen aktualisieren:
# apt-get update aktualisiert die Quellen,
# apt-get dist-upgrade führt dann im Anschluß ein Distributions UPGRADE durch.
Debian.. kann eigentlich meist problemlos upgegraded werden(im Gegensatz zu einigen.. kommerziellen Betriebssystemen).
Es kann jedoch auch böse haken:
* Treiber für die Ethernetschnittstellen liegen für die neue Version noch gar nicht vor..
* Systemeinstellungen wurden geändert(statt System-V nun System-Init)
* Apache2 wird nun ganz anders konfiguriert..ooh ja!!
Besonders ärgerlich: Alte Anleitungen, die früher wunderbar helfen konnten sind nun WERTLOS -.-
Programme installieren
Fehlt ein Programm auf dem Server kann man es leicht nachinstallieren(sofern man den Namen des *Paketes* kennt):
# apt-cache search Dateimanager sucht z.B. nach Dateimanager in der Paketbeschreibung(aber nur genauso geschrieben).
# apt-get install mc installiert z.B. den mc(midnightcommander!), eine Art NortonCommander-Clone.
Vorsicht: Nicht immer weiß man, ob ein Programm für die Konsole oder gar für einen X11 Server gedacht ist.
Installiert man z.B. versehentlich krusader wird die komplette X11 Umgebung mitinstalliert -.- (sinnlos für Server!)
Vor der Installation werden alle für das gewünschte Paket zusätzlich nötigen Pakete und deren Größe angezeigt.
Grob gesagt: Würden mehr als 20MByte installiert werden sollte man abbrechen.
Dateieditoren
Linux hat mächtige Texteditoren zur Dateimanipulation vorinstalliert, leider erscheinen deren Tastenbefehle für Windowsumsteiger sehr verwirrend, zudem kennt fast niemand deren Namen um sie zu starten(z.B.nano,pico,vim).
Neuere Versionen bieten einen Alias namens editor an, der zumindest einen davon startet.
editor test würde die Datei "test" mit dem voreingestellten Editor öffnen.
# update-alternatives --config editor ändert den vorgegebenen Standard-Editor.
Ich empfehle noch den midnightcommander zu installieren und konfigurieren..
Farbiges Promt/volle Pfadanzeige
Den Prompt einfärben(User=grün/Superuser=rot) und Pfade komplett anzeigen lassen
Linux kürzt automatisch den angezeigten Pfad, sobald man sich im "home"-Verzeichnis befindet:
z.B. steht im Prompt nur ~ als Abkürzung für /home/<Username>/.
Für bereits vorhandene User ersetzt man in /home/<Username>/.bashrc das erste Vorkommen von PS1= durch:
PS1='${debian_chroot:+($debian_chroot)}\[\033[32m\]\u@\h\[\033[m\]:\[\033[36m\]$PWD\[\033[m\]$ ' (grüner Username)
Für root ersetzt man in /root/.bashrc die Zeile export PS1='\h:\w\$ ' durch:
export PS1='${debian_chroot:+($debian_chroot)}\[\033[31m\]\u@\h\[\033[m\]:\[\033[36m\]$PWD\[\033[m\]$ ' (roter Username)
Für alle zukünftigen User ersetzt man in /etc/skel/.bashrc das erste Vorkommen von PS1= durch:
PS1='${debian_chroot:+($debian_chroot)}\[\033[32m\]\u@\h\[\033[m\]:\[\033[36m\]$PWD\[\033[m\]$ ' (grüner Username)
Änderungen werden erst beim nächsten Einloggen sichtbar.
Bash anpassen
Doppelte Befehle in der Bash-Historie vermeiden:
In /etc/profile hinzufügen:
HISTCONTROL="erasedups"
export HISTCONTROL"
Gesamte Historie löschen:
# history -c
Ctrl+r Vervollständigt Befehle, die in der Historie vorhanden sind
Nichtprivilegierte Benutzer hinzufügen
Niemals ohne Grund mit root-Rechten arbeiten! Für jeden "Dienst" einen eigenen Benutzer einrichten!
Näheres unter Linux-Befehle-Userverwaltung
Da ich einen "MiniCraft"-Server anbiete, nenne ich den User mal zum BEISPIEL "minicraft"
(Es wäre schön blöd, einen so offensichtlichen Namen für einen Benutzer einzurichten; jeden *Hacker* würde dies freuen!)
Den User "minicraft", die Gruppe "minicraft" und das Heimatverzeichnis erstellen:
# useradd -s /bin/bash -m minicraft (-s /bin/bash definiert die Shell, -m minicraft kopiert 'Skeleton' nach /home/minicraft)
Für den User "minicraft" noch ein Passwort vergeben:
# passwd minicraft
Weitere User nach Bedarf hinzufügen; Passwordliste nicht vergessen..
Mögliche zusätzliche Dienste die einen eigenen "User" benötigen:
-minecraft(Spiel-Server)
-teamspeak(Sprachübertragung)
Siehe auch Server-Sicherheit(Apache/Firewall/SSH)
SSH-Zugriffe absichern durch Verwendung von Schlüsselpaaren
Dabei beachten, das aus Sicherheitsgründen der User root sich KEINESFALLS direkt anmelden darf, auch nicht mit Schlüsselpaaren!
Dazu diesem Link folgen LINK
Eine Firewall einrichten
Siehe auch Linux-Befehle-iptables und vor allem Sicherheit-Firewall
Über den Wert einer Firewall, die AUF dem zu schützenden Server läuft streiten sich Millionen..
Eine separat vorgeschaltete Firewall ist sinnvoller, doch wer hat das Geld für sowas?
Zudem nutzt die tollste Firewall nichts, wenn sie falsch eingerichtet wurde oder gar ein Programm fehlerhaft ist.
Böse Buben nutzen jede Möglichkeit um an fremder Leute Geld zu kommen -.-
Wer sich dafür interessiert, was wirklich alles so auf einen Server prasselt(Datenpakete), kann sie als Filter nutzen.
Somit trennt man schnell die gewünschten Daten und den Rest(Schrott^^).
Regelwerk /etc/iptables.up beim Booten aktivieren
Ein mit iptables eingerichtetes Regelwerk bleibt nur bis zum nächsten Reboot aktiv!
Dies kann man zur Fehlersuche nutzen, indem man mehrere Regelwerke erstellt und diese testet.
So kann das eine Regelwerk /etc/iptables.up bei jedem Reboot automatisch geladen werden,
während das Regelwerk /etc/iptables.test nur für.. Testzwecke da ist.
Beispiel eines einfachen Regelwerkes:
# editor /etc/iptables.up (den folgenden Text hier einfügen)
*filter
-P FORWARD ACCEPT
-P INPUT ACCEPT
-P OUTPUT ACCEPT
# [ ] [ DRP<<] Alle "defekten" Pakete verwerfen
-A INPUT -i eth0 -p ALL -m state --state INVALID -j DROP
-A FORWARD -j ACCEPT
-A INPUT -j ACCEPT
-A OUTPUT -j ACCEPT
COMMIT
Am Ende noch eine Leerzeile einfügen und das Werk abspeichern. Ohne Leerzeile gibt es einen Fehler!
# cp /etc/iptables.up /etc/iptables.test (das gerade erstellte Werk kopieren)
Beschreibung:
Dieses Beispiel entspricht fast der Vorgabe jedes Linux-Betriebssystems und sperrt GAR NICHTS, alles ist erlaubt.
Einzige Änderung bisher: "Defekte" Pakete werden ignoriert. Das betrifft auch manipulierte Pakete..
KEINESFALLS sollte man jetzt schon am Ende bei INPUT und OUTPUT das ACCEPT zu REJECT ändern!
Denn.. dann würde der Server GAR nichts mehr rein und rauslassen.
WENN man für alle benötigten Dienste entsprechende Regeln gesetzt hat und das auch getestet hat, dann würde es erst Sinn machen..
So muss für den Fernzugriff SSH (Port22) freigegeben sein. Ebenso für HTTP (wenn ein Webserver laufen soll).
Auch für Teamspeak und MineCraft müssen entsprechend die Ports freigegeben werden. Das kommt im Anschluss..
Damit dieses Regelwerk (/etc/iptables.up) bei jedem Start auch geladen wird muss noch ein Skript erstellt werden.
Dieses Skript ändert einige "Variablen"(die ganzen echo-Befehle) und aktiviert am Schluß die IPTABLES (/etc/iptables.up)
Es KANN sein, das einige Systeme meine Werte der "Variablen" übel nehmen. Sorry dafür, aber Netzwerke sind nicht alle gleich!
Wer "Angst" hat, kann alle "echo" Zeilen weglassen. Das sollte keine Probleme verursachen.
# editor /etc/network/if-pre-up.d/iptables (Datei erstellen und den folgenden Text hinein)
#!/bin/bash
echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects
echo 1 > /proc/sys/net/ipv4/conf/all/log_martians
echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
echo 0 > /proc/sys/net/ipv4/conf/all/secure_redirects
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/default/accept_redirects
echo 0 > /proc/sys/net/ipv4/conf/default/accept_source_route
echo 1 > /proc/sys/net/ipv4/conf/default/rp_filter
echo 0 > /proc/sys/net/ipv4/conf/default/secure_redirects
echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects
echo 2 > /proc/sys/net/ipv4/tcp_synack_retries
/sbin/iptables-restore < /etc/iptables.up
# chmod +x /etc/network/if-pre-up.d/iptables (Datei ausführbar machen)
Ein komplettes Regelwerk..
Die Reihenfolge in der die folgenden Regeln aufgeführt sind ist auch die, die genutzt werden sollte.
Was nicht gebraucht wird, kann weggelassen werden. Es sei denn da stände "WICHTIG!"
BEGINN eines jeden iptables-Regelwerks:
Hiermit muss jede iptable-Regel beginnen. Dieser Text steht zu Beginn jeder Datei.
Dieses Beispiel verwirft ALLE eingehenden Datenpakete!! Daher darf es NICHT alleine stehen und aktiviert werden!
Nur was in den zusätzlichen Regeln erlaubt wird kommt überhaupt beim Server an.
Nötig! Aber.. zuerst alle DROP durch ACCEPT ersetzen!!
*filter
# [*P*] **** Policy set default DROP:(FORWARD,INPUT,OUTPUT)
-P FORWARD DROP
-P INPUT DROP
-P OUTPUT DROP
Defekte/manipulierte Pakete verwerfen
Alle defekten(nicht angeforderten, verirrten, manipulierten) Datenpakete werden verworfen.
Eine sehr praktische Regel ;)
# [ ] [ DRP<<] Alle "defekten" Pakete verwerfen
-A INPUT -i eth0 -p ALL -m state --state INVALID -j DROP
Nicht an den Server gerichtete Pakete verwerfen
Unter ServerIP sollte die IP des Servers eingetragen sein, NICHTS anderes!
Aktuell ist MiniCraft.hopto.org auch unter der IP 85.25.99.61 erreichbar
Hält UNMENGEN an Datenmüll aus den Log-Dateien fern.
# [F01] [ DRP<-] Nicht an SERVERIP(85.25.99.61) gerichtete Pakete verwerfen
-A INPUT -i eth0 ! -d 85.25.99.61 -j DROP
loopback schüzten und intern freigeben
Was ist ein loopback? Die lokale Schnittstelle? Keine Ahnung ^^ Wäre nur blöde, wenn von aussen direkter Zugriff möglich wäre..
Zusätzlich laufen auf einem Server verschiedene Dienste, die hierüber miteinander "sprechen" können sollten..
Nötig!
# [F02] [ DRP<-] Nicht von lo0 kommendende Pakete nach 127/8 verwerfen
-A INPUT ! -i lo -d 127.0.0.0/8 -j DROP
# [F03] [ ACC<>] Pakete von/zu loopback (lo0) erlauben
-A INPUT -i lo -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
# [F04] [ DRP<-] Eingehende Pakete mit (FAKE!)Ursprung SERVERIP(85.25.99.61) verwerfen
-A INPUT -i eth0 -s 85.25.99.61 -j DROP
# [ ] [ ACC<>] ICMP3 [ ICMP type: 3 ] Destination unreachable: 3/00..3/04
-A INPUT -i eth0 -p icmp --icmp-type network-unreachable -j ACCEPT
-A OUTPUT -o eth0 -p icmp --icmp-type network-unreachable -j ACCEPT
-A INPUT -i eth0 -p icmp --icmp-type host-unreachable -j ACCEPT
-A OUTPUT -o eth0 -p icmp --icmp-type host-unreachable -j ACCEPT
-A INPUT -i eth0 -p icmp --icmp-type protocol-unreachable -j ACCEPT
-A OUTPUT -o eth0 -p icmp --icmp-type protocol-unreachable -j ACCEPT
-A INPUT -i eth0 -p icmp --icmp-type port-unreachable -j ACCEPT
-A OUTPUT -o eth0 -p icmp --icmp-type port-unreachable -j ACCEPT
-A INPUT -i eth0 -p icmp --icmp-type fragmentation-needed -j ACCEPT
-A OUTPUT -o eth0 -p icmp --icmp-type fragmentation-needed -j ACCEPT
# [ ] [ ACC<>] ICMP4 [ ICMP type: 4 ] Source-quench
-A INPUT -i eth0 -p icmp --icmp-type source-quench -j ACCEPT
-A OUTPUT -o eth0 -p icmp --icmp-type source-quench -j ACCEPT
# [ ] [ ACC<>] ICMP11 [ ICMP type:11 ] time-exceeded
-A INPUT -i eth0 -p icmp --icmp-type time-exceeded -j ACCEPT
-A OUTPUT -o eth0 -p icmp --icmp-type time-exceeded -j ACCEPT
# [ ] [ ACC<=] PINGprovider [ ICMP type: 8 ] nur vom ISP-Pool kommentarlos erlauben
-A INPUT -i eth0 -s 11.22.123.0/17 -p icmp --icmp-type echo-request -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -i eth0 -s 22.33.128.0/17 -p icmp --icmp-type echo-request -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -i eth0 -s 123.123.0.0/17 -p icmp --icmp-type echo-request -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -i eth0 -s 17.123.0.0/17 -p icmp --icmp-type echo-request -m state --state NEW,ESTABLISHED -j ACCEPT
-A OUTPUT -o eth0 -p icmp --icmp-type echo-reply -m state --state ESTABLISHED,RELATED -j ACCEPT
# [ ] [LOG/DRP<<] Alle anderen ICMPs
-A INPUT -i eth0 -p icmp -m limit -j LOG --log-prefix "IP4[ICMP/IN:] "
-A INPUT -i eth0 -p icmp -j DROP
# [ ] [LOG/ACC<-] ECHO-request/reply [ ICMP type: 8 ] alle NICHT vom ISP-Pool loggen und erlauben
-A INPUT -i eth0 -p icmp --icmp-type echo-request -m state --state NEW,ESTABLISHED -j LOG --log-prefix "IP4[I.PING ] "
-A INPUT -i eth0 -p icmp --icmp-type echo-request -m state --state NEW,ESTABLISHED -j ACCEPT
-A OUTPUT -o eth0 -p icmp --icmp-type echo-reply -m state --state ESTABLISHED,RELATED -j ACCEPT
# [ ] [ ACC>=] ECHO-request/reply [ ICMP type: 8 ] vom Server ausgehend erlauben
-A OUTPUT -o eth0 -p icmp --icmp-type echo-request -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -i eth0 -p icmp --icmp-type echo-reply -m state --state ESTABLISHED,RELATED -j ACCEPT
# [ ] [ DRP<<] CHARGEN [Port: 19 t/u] eingehend verwerfen
-A INPUT -i eth0 -p tcp --dport 19 -j DROP
-A INPUT -i eth0 -p udp --dport 19 -j DROP
# [ ] [ ACC>=] FTP [Port: 21 tcp] vom Server ausgehendes FTP (für FTP(active/passive) zu einem anderen FTP-Server benötigt)
-A OUTPUT -o eth0 -p tcp --sport 1024: --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -i eth0 -p tcp --sport 21 --dport 1024: -m state --state RELATED -j ACCEPT
# [ ] [ ACC>=] FTP-DATA [Port: 20 tcp] vom Server ausgehendes FTP<active> (für FTP(active) zu einem anderen FTP-Server benötigt)
-A INPUT -i eth0 -p tcp --sport 20 --dport 1024: -m state --state NEW,ESTABLISHED -j ACCEPT
-A OUTPUT -o eth0 -p tcp --sport 1024: --dport 20 -m state --state ESTABLISHED,RELATED -j ACCEPT
# [ ] [ ACC<=] SSHprovider [Port: 22 tcp] nur vom Ursprung <Serviceprovider IP-Pool> erlauben (für Remotezugriff auf den Server benötigt)
-A INPUT -i eth0 -s 11.22.123.0/17 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -i eth0 -s 22.33.128.0/17 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -i eth0 -s 123.123.0.0/17 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -i eth0 -s 17.123.0.0/17 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
-A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED,RELATED -j ACCEPT
# [ ] [LOG/REJ<-] SSH [Port: 22 tcp] alle NICHT vom ISP-Pool loggen und zurückweisen
-A INPUT -i eth0 -p tcp --dport 22 -j LOG --log-prefix "IP4[dpt:00022.PRB]"
-A INPUT -i eth0 -p tcp --dport 22 -j DROP
# [ ] [ DRP<<] TELNET [Port: 23 tcp] eingehend verwerfen
-A INPUT -i eth0 -p tcp --dport 23 -j DROP
# [ ] [ ACC<=] SMTP [Port: 25 tcp] eingehend erlauben
-A INPUT -i eth0 -p tcp --sport 1024: --dport 25 -m state --state NEW,ESTABLISHED -j ACCEPT
-A OUTPUT -o eth0 -p tcp --sport 25 --dport 1024: -m state --state ESTABLISHED -j ACCEPT
# [ ] [ ACC>=] SMTP [Port: 25 tcp] ausgehend erlauben
-A OUTPUT -o eth0 -p tcp --sport 1024: --dport 25 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -i eth0 -p tcp --sport 25 --dport 1024: -m state --state ESTABLISHED -j ACCEPT
# [ ] [ ACC>=] WHOIS Query [Port: 43 tcp] vom Server ausgehend erlauben (für WHOIS-Abfrage benötigt)
-A OUTPUT -o eth0 -p tcp --sport 1024: --dport 43 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -i eth0 -p tcp --sport 43 --dport 1024: -m state --state ESTABLISHED,RELATED -j ACCEPT
# [ ] [ ACC>=] DOMAIN (DNSquery) [Port: 53 t/u] vom Server ausgehend erlauben (für Namensumwandlung von "opel.de" zu IPs benötigt)
-A OUTPUT -o eth0 -p tcp --sport 1024: --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -i eth0 -p tcp --sport 53 --dport 1024: -m state --state ESTABLISHED,RELATED -j ACCEPT
-A OUTPUT -o eth0 -p udp --sport 1024: --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -i eth0 -p udp --sport 53 --dport 1024: -m state --state ESTABLISHED,RELATED -j ACCEPT
# [ ] [ DRP<<] DNS Query [Port: 53 t/u] vom ausserhalb verwerfen
-A INPUT -i eth0 -p tcp --dport 53 -j DROP
-A INPUT -i eth0 -p udp --dport 53 -j DROP
# [ ] [ DRP<<] w00tw00t [Port: 80 tcp] eingehend verwerfen
-A INPUT -i eth0 -p tcp --dport 80 -m string --to 70 --algo bm --string "GET /w00tw00t.at.ISC.SANS." -j LOG --log-prefix "IP4[DRP:w00tPRB]"
-A INPUT -i eth0 -p tcp --dport 80 -m string --to 70 --algo bm --string "GET /w00tw00t.at.ISC.SANS." -j DROP
# [ ] [ ACC>=] HTTP [Port: 80 tcp] vom Server ausgehend erlauben
-A OUTPUT -o eth0 -p tcp --sport 1024: --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -i eth0 -p tcp --sport 80 --dport 1024: -m state --state ESTABLISHED,RELATED -j ACCEPT
# [ ] [ ACC<>] HTTP [Port: 80 tcp] erlauben
-A INPUT -i eth0 -p tcp --sport 1024: --dport 80: -j ACCEPT
-A OUTPUT -o eth0 -p tcp --sport 80 --dport 1024: -j ACCEPT
# [ ] [ ACC<<] POP3 [Port: 110 t/u] eingehend erlauben
-A INPUT -i eth0 -p tcp --sport 1024: --dport 110 -m state --state NEW,ESTABLISHED -j ACCEPT
-A OUTPUT -o eth0 -p tcp --sport 110 --dport 1024: -m state --state ESTABLISHED -j ACCEPT
# [ ] [ DRP<<] SUNRPC [Port: 111 t/u] eingehend verwerfen
-A INPUT -i eth0 -p tcp --dport 111 -j DROP
-A INPUT -i eth0 -p udp --dport 111 -j DROP
# [ ] [ DRP<<] LOC-SRV [Port: 135 t/u] eingehend verwerfen
-A INPUT -i eth0 -p tcp --dport 135 -j DROP
-A INPUT -i eth0 -p udp --dport 135 -j DROP
# [ ] [ DRP<<] NETBIOS-ns [Port: 137 t/u] eingehend verwerfen
-A INPUT -i eth0 -p tcp --dport 137 -j DROP
-A INPUT -i eth0 -p udp --dport 137 -j DROP
# [ ] [ DRP<<] NETBIOS-dgs [Port: 138 t/u] eingehend verwerfen
-A INPUT -i eth0 -p tcp --dport 138 -j DROP
-A INPUT -i eth0 -p udp --dport 138 -j DROP
# [ ] [ DRP<<] NETBIOS-ssn [Port: 139 t/u] eingehend verwerfen
-A INPUT -i eth0 -p tcp --dport 139 -j DROP
-A INPUT -i eth0 -p udp --dport 139 -j DROP
# [ ] [ DRP<<] SNMP [Port: 161 udp] eingehend verwerfen
-A INPUT -i eth0 -p udp --dport 161 -j DROP
# [ ] [ DRP<<] rsh-spx [Port: 222 t/u] eingehend verwerfen
-A INPUT -i eth0 -p tcp --dport 222 -j DROP
-A INPUT -i eth0 -p udp --dport 222 -j DROP
# [ ] [ ACC>=] HTTPS [Port: 443 tcp] vom Server ausgehend erlauben
-A OUTPUT -o eth0 -p tcp --sport 1024: --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -i eth0 -p tcp --sport 443 --dport 1024: -m state --state ESTABLISHED,RELATED -j ACCEPT
# [ ] [ DRP<<] Microsoft-ds [Port: 445 tcp] eingehend verwerfen
-A INPUT -i eth0 -p tcp --dport 445 -j DROP
# [ ] [ DRP<<] SOCKS [Port: 1080 tcp] eingehend verwerfen
-A INPUT -i eth0 -p tcp --dport 1080 -j DROP
# [ ] [ DRP<<] MS SQL Server [Port: 1433 t/u] eingehend verwerfen
-A INPUT -i eth0 -p tcp --dport 1433 -j DROP
-A INPUT -i eth0 -p udp --dport 1433 -j DROP
# [ ] [ DRP<<] NDL-aas [Port: 3128 tcp] eingehend verwerfen
-A INPUT -i eth0 -p tcp --dport 3128 -j DROP
# [ ] [ DRP<<] [Port: 3251 udp] eingehend verwerfen
-A INPUT -i eth0 -p udp --dport 3251 -j DROP
# [ ] [ DRP<<] RDP [Port: 3389 tcp] eingehend verwerfen
-A INPUT -i eth0 -p tcp --dport 3389 -j DROP
# [ ] [ DRP<<] X11 [Port: 6000 tcp] eingehend verwerfen
-A INPUT -i eth0 -p tcp --sport 6000 -j DROP
# [ ] [ DRP<<] HTTP-alt [Port: 8080 t/u] eingehend verwerfen
-A INPUT -i eth0 -p tcp --dport 8080 -j DROP
-A INPUT -i eth0 -p udp --dport 8080 -j DROP
# [#99] [LOG/REJ->] all FORWARD traffic
-A FORWARD -j LOG --log-prefix "IP4[F.---.REJ] "
-A FORWARD -j REJECT
# [#99] [LOG/REJ<-] all INPUT traffic
-A INPUT -j LOG --log-prefix "IP4[I.---.REJ] "
-A INPUT -j REJECT
# [#99] [LOG/REJ->] all OUTPUT traffic
-A OUTPUT -j LOG --log-prefix "IP4[O.---.REJ] "
-A OUTPUT -j REJECT
COMMIT
# [F14] [ACC<=> ] MineCraft SERVER [Port:25565 tcp]
-A INPUT -i eth0 -p tcp --dport 25565 -m state --state NEW,ESTABLISHED -j ACCEPT
-A OUTPUT -o eth0 -p tcp --sport 25565 -m state --state ESTABLISHED,RELATED -j ACCEPT