PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Linuxserver absichern - WIE ?



tschiffler
10.01.05, 11:14
Hi

Ich habe einen Root-Server auf welchem ich gerne alle Ports ausser die wirklich benötigten sperren, es soll weder von Aussen noch von Innen eine Anfrage auf einen anderen Server kommen. Es läuft darauf:

DHCP-Client (Vorgabe vom Provider)
Mail (Pop3 & SMTP)
SSH
FTP
HTTP
HTTPS

Nun habe ich vergangene Woche die Suse-Firewall ausprobiert mit dem Resultat dass ich es nicht gerafft bekommen habe (über YAST). Er hat mir einfach mal alles deaktiviert und meine aktivierungen verworfen.

Kann mir einer nen Link zu nem Tutorial geben wie ich sowas mit IP-Tables (das müsste doch das richtige Stichwort sein ?) konfiguriere ?

Ne Step-By-Step wäre super.

Danke für die Hilfe

Gruß Thomas

sirmoloch
10.01.05, 11:26
Eine kleine Hilfe: http://harry.homelinux.org/
Ganz viel Hilfe: http://www.netfilter.org/

Krischi
10.01.05, 11:33
Vielleicht auch für Dich brauchbar:
http://www.oreilly.de/german/freebooks/linuxfireger/
http://www.simonzone.com/software/guarddog/

tschiffler
10.01.05, 12:48
Hi

Ich habe nun dieses Script, aber noch ne Frage dazu:


# iptables-Modul
modprobe ip_tables
# Connection-Tracking-Module
modprobe ip_conntrack
# Das Modul ip_conntrack_irc ist erst bei Kerneln >= 2.4.19 verfuegbar
modprobe ip_conntrack_irc
modprobe ip_conntrack_ftp

# Tabelle flushen
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
iptables -t nat -X
iptables -t mangle -X

# Default-Policies setzen
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

# MY_REJECT-Chain
iptables -N MY_REJECT

# MY_REJECT fuellen
iptables -A MY_REJECT -p tcp -m limit --limit 7200/h -j LOG --log-prefix "REJECT TCP "
iptables -A MY_REJECT -p tcp -j REJECT --reject-with tcp-reset
iptables -A MY_REJECT -p udp -m limit --limit 7200/h -j LOG --log-prefix "REJECT UDP "
iptables -A MY_REJECT -p udp -j REJECT --reject-with icmp-port-unreachable
iptables -A MY_REJECT -p icmp -m limit --limit 7200/h -j LOG --log-prefix "DROP ICMP "
iptables -A MY_REJECT -p icmp -j DROP
iptables -A MY_REJECT -m limit --limit 7200/h -j LOG --log-prefix "REJECT OTHER "
iptables -A MY_REJECT -j REJECT --reject-with icmp-proto-unreachable

# MY_DROP-Chain
iptables -N MY_DROP
iptables -A MY_DROP -m limit --limit 7200/h -j LOG --log-prefix "PORTSCAN DROP "
iptables -A MY_DROP -j DROP

# Alle verworfenen Pakete protokollieren
iptables -A INPUT -m state --state INVALID -m limit --limit 7200/h -j LOG --log-prefix "INPUT INVALID "
iptables -A OUTPUT -m state --state INVALID -m limit --limit 7200/h -j LOG --log-prefix "OUTPUT INVALID "

# Korrupte Pakete zurueckweisen
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A OUTPUT -m state --state INVALID -j DROP

# Stealth Scans etc. DROPpen
# Keine Flags gesetzt
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j MY_DROP

# SYN und FIN gesetzt
iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j MY_DROP

# SYN und RST gleichzeitig gesetzt
iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j MY_DROP

# FIN und RST gleichzeitig gesetzt
iptables -A INPUT -p tcp --tcp-flags FIN,RST FIN,RST -j MY_DROP

# FIN ohne ACK
iptables -A INPUT -p tcp --tcp-flags ACK,FIN FIN -j MY_DROP

# PSH ohne ACK
iptables -A INPUT -p tcp --tcp-flags ACK,PSH PSH -j MY_DROP

# URG ohne ACK
iptables -A INPUT -p tcp --tcp-flags ACK,URG URG -j MY_DROP

# Loopback-Netzwerk-Kommunikation zulassen
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# Connection-Tracking aktivieren
iptables -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# HTTP
iptables -A INPUT -i ppp0 -m state --state NEW -p tcp --dport 80 -j ACCEPT

# HTTPS
iptables -A INPUT -i ppp0 -m state --state NEW -p tcp --dport 443 -j ACCEPT

# SMTP
iptables -A INPUT -i ppp0 -m state --state NEW -p tcp --dport 25 -j ACCEPT

# POP3
iptables -A INPUT -i ppp0 -m state --state NEW -p tcp --dport 110 -j ACCEPT

# POP3S
iptables -A INPUT -i ppp0 -m state --state NEW -p tcp --dport 995 -j ACCEPT

# NNTP
iptables -A INPUT -i ppp0 -m state --state NEW -p tcp --dport 119 -j ACCEPT

# DNS
iptables -A INPUT -i ppp0 -m state --state NEW -p tcp --dport 53 -j ACCEPT
iptables -A INPUT -i ppp0 -m state --state NEW -p udp --dport 53 -j ACCEPT

# FTP
iptables -A INPUT -i ppp0 -m state --state NEW -p tcp --dport 21 -j ACCEPT

# SSH
iptables -A INPUT -i ppp0 -m state --state NEW -p tcp --dport 22 -j ACCEPT

# MYSQL
iptables -A INPUT -i ppp0 -m state --state NEW -p tcp --dport 3306 -j ACCEPT

# NTP
iptables -A INPUT -i ppp0 -m state --state NEW -p udp --dport 123 -j ACCEPT

# Default-Policies mit REJECT
iptables -A INPUT -j MY_REJECT
iptables -A OUTPUT -j MY_REJECT

# Max. 500/Sekunde (5/Jiffie) senden
echo 5 > /proc/sys/net/ipv4/icmp_ratelimit

# Speicherallozierung und -timing für IP-De/-Fragmentierung
echo 262144 > /proc/sys/net/ipv4/ipfrag_high_thresh
echo 196608 > /proc/sys/net/ipv4/ipfrag_low_thresh
echo 30 > /proc/sys/net/ipv4/ipfrag_time

# TCP-FIN-Timeout zum Schutz vor DoS-Attacken setzen
echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout

# Maximal 3 Antworten auf ein TCP-SYN
echo 3 > /proc/sys/net/ipv4/tcp_retries1

# TCP-Pakete maximal 15x wiederholen
echo 15 > /proc/sys/net/ipv4/tcp_retries2

Kann es sein, dass mein Server hiermit zwar alle Anfragen (beispielsweise SMTP) von aussen annimmt, aber nix versenden kann ?

Funktioniert das nun auch, dass wenn beispieslweise auf dem Server selbst ein Dienst laufen würde der über bestimmte Ports etwas tun möchte, dies nicht mehr möglich ist (Beispiel, jemand installiert über ne Shell einen Eggdrop - das soll nicht funzen)

Gruß Thomas

Frey
10.01.05, 13:08
Wenn du deine Dienste richtig konfigurierst brauchst du keine Firewall.
http://faq.1und1.de/server/root_server/security/2.html

`kk
10.01.05, 13:08
Es funktioniert das was da steht, nicht mehr.
Du blockst alles, außer...


Wenn du deine Dienste richtig konfigurierst brauchst du keine Firewall.
Quark, mein Server kann nicht gepingt und nicht gescannt werden.
Das finde ich dann doch recht nützlich.

Wenn 1&1 das schreibt kann es natürlich sein, dass die das schon rausfiltern für dich. Ansonsten auf jeden Fall Iptables nutzen. Imho.

ricci007
10.01.05, 13:10
Ich wuerde mir erstmal eine Strategie ueberlegen, dein FW-Skript ist ziemlich konfus und wirr :confused: :confused: :confused:

Warum explizit noch DROPs definieren, wenn du oben schon



iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP


Die Table fushes wuerde ich so realisieren



iptables -F
iptables -X
iptables -Z


SMTP ware so auch besser, da du es nur auf NEW packages bezogen hast. Und wenn du SMTP (als Client) betreiben willst, also z. B. deine Mails mit GMX auf deiner Linux-Kiste verschicken willst, wuerde ich nicht INPUT, sondern OUTPUT nehmen ;-)



# SMTP
iptables -A OUTPUT -i ppp0 -p tcp --dport 25 -j ACCEPT


Naja, aber wie gesagt, erstmal einlesen und dann ne eigene FW schreiben, man sieht, dass du deine Strategie nicht durchdacht hast. Erstmal aufschreiben, was du nutzt und dann ueberlegen wie du es realisieren willst und dann anfangen :eek: :eek: :eek:

LG

ricci007

tschiffler
10.01.05, 13:10
Wenn du deine Dienste richtig konfigurierst brauchst du keine Firewall.
http://faq.1und1.de/server/root_server/security/2.html

das ist schon klar, nur habe ich 2 meiner freunde ne shell gegeben
der eine installierte, obwohl nicht abgesprochen nen eggdrop
das soll eben nicht sein und das würde ich gerne mittels eines packetfilters unterbinden :)

Frey
10.01.05, 13:21
Schränke eher die Rechte der Shell ein. Denn sonst kann dein Freund auf die Idee kommen dein Firewallscript auszuschalten.


Quark, mein Server kann nicht gepingt und nicht gescannt werden. Das finde ich dann doch recht nützlich.

Und ? Scannen kann ich deinen Server immer noch und wenn du deine Dienste falsch konfigurierst hast nützt dir die Firewall auch nichts mehr.

tschiffler
10.01.05, 13:24
Schränke eher die Rechte der Shell ein. Denn sonst kann dein Freund auf die Idee kommen dein Firewallscript auszuschalten.

dennoch würde ich mich wohler fühlen wenn ich 100%ig weiss, dass da nix anderes raus kommt (selbstverständlich in erster Linie rein, aber ich würde eben gerne beides damit "erschlagen")

Die Dienste sind bereits angepasst, die die oben aufgelistet sind, sind die einzigen die noch aktiv sind !

Wie gesagt, allerdings möchte ich alles andere 100%ig sperren !

fs111
10.01.05, 13:57
Es funktioniert das was da steht, nicht mehr.
Du blockst alles, außer...


Quark, mein Server kann nicht gepingt und nicht gescannt werden.
Das finde ich dann doch recht nützlich.


Aha, und ping abschalten erhöht die Sicherheit, oder wie? Und wieso kann ich Dich nicht scannen, wenn Du doch Dienste anbietest? So ein Quatsch.

fs111

Tomek
10.01.05, 14:01
fs111 hat völlig Recht. Nennt man auch "Security by Obscurity".

steve-e
10.01.05, 14:13
Ja, am besten gleich ICMP komplett verbieten ... :ugly:

@tschiffler
Ich hab meine Iptablesregeln auch auf denne von Harrys Generator aufgebaut. Bei mir muss jedoch auch der ausgehende Verkehr expliziet freigeschaltet werden, im Gegensatz zu deinem Script.

Hab ich zwar gestern Abend für meinen Desktop-Rechner geschrieben, sollte sich aber auch auf dein Einsatzgebiet übertragen lassen.

hmarburg
10.01.05, 22:23
Ich muss mal ein wenig OT werden aber es brennt mir auf der Seele.

Ich will auch einen root-Server! Ich habe zwar keine Ahnug wie man so ein Ding richtig ans laufen bekommt, damit es nicht gleich zum Spamrelay oder zur Wurmschleuder wird. Aber ich muß ihn haben!

`kk
10.01.05, 22:36
Aha, und ping abschalten erhöht die Sicherheit, oder wie?
Verringern tut es die Sicherheit sicherlich nicht.
Einen guten Grund gibt es dafür aber auch nicht. Das muss ich zugeben. *g*



Und wieso kann ich Dich nicht scannen, wenn Du doch Dienste anbietest? So ein Quatsch.
Welche Dienste biete ich denn an?
Du wirst es nicht glauben, aber es werden keine angezeigt werden.

Irgendwelche (gut durchgeführten) Angriffe verhindern wird das sicherlich nicht, aber vielleicht irgendwelche mit Portscannern bewaffnete Kiddies.

Nein? Warum?
Bitte klärt mich auf...

Gruß, Kai.

PS:

Nennt man auch "Security by Obscurity".
Simmt. Wenn aber "Grundsicherheit" vorhanden ist, machen solche Methoden doch nichts? Sie verringern die Sicherheit doch nicht oder?
Die Methoden sollten eine sichere Serverkonfiguration nicht ersetzen. Das ist mir klar.

Gute Nacht ;)

Roger Wilco
11.01.05, 00:05
Verringern tut es die Sicherheit sicherlich nicht.
Einen guten Grund gibt es dafür aber auch nicht. Das muss ich zugeben. *g*
Aber ein Grund dagegen: Es erschwert die Administration. Was bringt es dir, alle ICMP-Messages zu droppen? Hingegen ist es durchaus nützlich, wenn ping, traceroute und Co. mal sinnvollen Output anbieten.



Welche Dienste biete ich denn an?
Du wirst es nicht glauben, aber es werden keine angezeigt werden.
Irgendwelche Dienste wirst du extern anbieten müssen, sonst ist es per Definition kein Server. Sei es http, smtp oder ssh. Das sind auch alles Dienste. Und wenn du die blockierst kannst du die Daemons gleich beenden.


Irgendwelche (gut durchgeführten) Angriffe verhindern wird das sicherlich nicht, aber vielleicht irgendwelche mit Portscannern bewaffnete Kiddies.

Nein? Warum?
Bitte klärt mich auf...
Nein. Schonmal die nmap man-page gelesen? Darum.

`kk
11.01.05, 07:47
Aber ein Grund dagegen: Es erschwert die Administration. Was bringt es dir, alle ICMP-Messages zu droppen? Hingegen ist es durchaus nützlich, wenn ping, traceroute und Co. mal sinnvollen Output anbieten.


Traceroute funzt problemlos... nebenbei. Ansonsten:
Stimmt schon, das war von Harry so übernommen und ich hab's erstmal so gelassen....



Irgendwelche Dienste wirst du extern anbieten müssen, sonst ist es per Definition kein Server. Sei es http, smtp oder ssh. Das sind auch alles Dienste. Und wenn du die blockierst kannst du die Daemons gleich beenden.

Ich blocke keine Dienste, die ich benutze.


Nein. Schonmal die nmap man-page gelesen? Darum.
Bisher nicht. Weiß zwar nicht was du meinst, aber das werd ich ja dann sehen. ;)

Grützi, Kai.

Tomek
11.01.05, 07:51
Stimmt schon, das war von Harry so übernommen udn ich hab's erstmal so gelassen....
Toll! Einfach Scripte aus dem Internet übernehmen ohne das Script zu analysieren und zu verstehen was es eigentlich macht. :rolleyes:


Es läuft auch alles, nur kannst du das nicht durch einen Portscan herausfinden. Da musst du schon manuell testen.
Doch kann man. Wie schon Roger sagte, lies bitte die Manpage.

Informiere dich bitte über das Thema Security by Obscurity. Kurz angerissen: Versuche die Serverdienste so sicher wie möglich zu konfigurieren und nicht alles zu verstecken.

`kk
11.01.05, 07:55
Doch kann man. Wie schon Roger sagte, lies bitte die Manpage.
Danke, das wusste ich nicht.

Dann bin ich ja fertig, super. ;)

Gruß, Kai.

sirmoloch
11.01.05, 07:56
ICMP-Pakete zu droppen bringt sicherheitmäßig absolut nichts. Es bringt vielleicht den Vorteil, dass Ping-Flood-DoS Attacken nutzlos werden, aber einen richtigen Cracker interessiert das herzlich wenig.

Vielleicht findest du ein paar interessante Sachen für dich auf diesen Seiten:
http://www.bsi.de/literat/index.htm
http://www.securityfocus.com/
http://www.oreilly.de/german/freebooks/linuxfireger/

Deine Sicherheits-Theorien musst du jedenfalls gründlich überdenken...;)

`kk
11.01.05, 07:57
Deine Sicherheits-Theorien musst du jedenfalls gründlich überdenken...;)

Naja, die mit der Firewall schon ja. :D
Keine Sorge, der Rest ist besser konfiguriert. ;)

Tomek
11.01.05, 07:58
ICMP-Pakete zu droppen bringt sicherheitmäßig absolut nichts. Es bringt vielleicht den Vorteil, dass Ping-Flood-DoS Attacken nutzlos werden, ...
Nein, das ist nicht richtig. Ein (D)DoS kann auch sehr wirkungsvoll sein, selbst wenn du auf die Echo-Requests nicht antwortest. Zwar wird in dem Fall keine Echo-Reply gesendet, jedoch ist die Leitung trotzdem "dicht".

Tomek
11.01.05, 08:03
Man kann z.B. folgendes machen:

# Throttle incoming ICMP packets
$IPTABLES -A INPUT -i $EXT -p icmp ! --icmp-type echo-request -m limit --limit 100/s --limit-burst 100 -j ACCEPT
$IPTABLES -A INPUT -i $EXT -p icmp ! --icmp-type echo-request -m limit --limit 100/m --limit-burst 50 -j LOG --log-level debug --log-prefix "FW: icmp flood: "
$IPTABLES -A INPUT -i $EXT -p icmp ! --icmp-type echo-request -j DROP

# Throttle incoming ICMP echo requests
$IPTABLES -A INPUT -i $EXT -p icmp --icmp-type echo-request -m limit --limit 50/s --limit-burst 50 -j ACCEPT
$IPTABLES -A INPUT -i $EXT -p icmp --icmp-type echo-request -m limit --limit 100/m --limit-burst 50 -j LOG --log-level debug --log-prefix "FW: ping flood: "
$IPTABLES -A INPUT -i $EXT -p icmp --icmp-type echo-request -j DROP
Damit beantwortet man grundsätzlich ICMP-Requests, jedoch nur eine bestimmte Anzahl. Wenn es zuviel wird, wird nicht mehr geantwortet. Verhindert aber, wie gesagt, nicht unbedingt eine erfolgreiche (D)DoS-Attacke.

sirmoloch
11.01.05, 08:11
Nein, das ist nicht richtig. Ein (D)DoS kann auch sehr wirkungsvoll sein, selbst wenn du auf die Echo-Requests nicht antwortest. Zwar wird in dem Fall keine Echo-Reply gesendet, jedoch ist die Leitung trotzdem "dicht".

Wohl wahr, aber dagegen kann man wohl kaum etwas machen.

`kk
11.01.05, 09:04
Ok, danke an alle.
Dann kann ich ja im Grunde die FW abschalten... oder den Vorschlag von Tomek benutzen. Eher letzteres. :)

Meine Seite war sowieso langsam, weil (bitte korrigiert mich) jeder Browser die Seite erstmal anpingt, ob sie erreichbar ist.

Grützi, Kai.

sirmoloch
11.01.05, 09:08
Meine Seite ist sowieso langsam, weil (bitte korrigiert mich) jeder Browser die Seite erstmal anpingt, ob sie erreichbar ist.

Davon habe ich noch nie etwas gehört.

Normalerweise wird eine DNS-Anfrage losgeschickt und nachdem die IP-Adresse bekannt ist wird eine (HTTP-)GET-Anfrage gestellt.

`kk
11.01.05, 13:47
Hm, ok ich hab es auch nur von jemandem gehört...
Meistens reagiert der Server auch superschnell. Keine Ahnung.
Dann werd ich noch Tomeks Regeln reintun und gut is.

Danke & Gruß, Kai.