12.12.2017, 22:43 UTC+1

Sie sind nicht angemeldet.

  • Anmelden
  • Registrieren

1

27.07.2012, 11:17

Knoppix Sicherheit; Firewall/IPTABLES & Fail2Ban

Hi Leutz,
habe mir Knoppix 7.0.3 DVD-Version auf einem 16GB-Stick gezogen und mich gleich an der Sicherheit zuschaffen gemacht! Rechner läuft als Standalone System!

Es währe mal toll wenn man sich mal über dieses Tehma mal so richtig auslassen kann, es kommen ja auch Zweifel bei einem auf ob manche Einträge Sinn machen oder nicht, warum muss ich nach jedem Start von Knoppix, die IPTABLES und Fail2Ban sepparat starten? Wie bekomme ich den Autostart hin? Wo kann ich unnötige Dienste ausschalten wie z.B. bei XP? Als Neuling ist im deutschsprachigen Raum alles sehr mager mit Infos Via Debian, Knoppix & Co.

Hier mein Anfang über die bemühung Knoppix etwas sicherer zu bekommen! Bitte keine Infos wie; Knoppix ist sicher genug oder unnütz eine Firewall einzusetzen, dann kennt ihr die Chinesen nicht, die hacken alles und jeden der nicht in China lebt! :D

Erstmal habe ich die hosts.deny im Terminal mit dem Editor: "mcedit /etc/hosts.deny" alle DNS-Anfragen mit dem Befehl: "ALL: ALL" abgelehnt! /etc/hosts.allow bleibt unberührt!

Die Firewall Knoppix läuft über "expert", da ich die IPTABLES mit einem Editor berarbeiten wollte

/etc/sysconfig:
Knoppix Firewall Einstellung sieht so aus:

CURRENTMODE='expert'
REMOTE_PORTS_ALLOWED=' www|https'
IPSEC='off'
ACTIVE='yes'
EXTDEVS=' eth0|ppp0'

IPTABLES Einstellungen sind mit diesen Einträgen zugemüllt :D :

# /etc/sysconfig/iptables
# Knoppix Firewall IPTABLES extra script for "expert" mode only
# Please enter your iptables filter rules here.

#! /bin/bash

# Local Firewall-Script

### BEGIN INIT INFO
# Provides: firewall
# Required-Start: networking $local_fs
# Required-Stop: $local_fs
# Should-Start:
# Should-Stop:
# Default-Start: S
# Default-Stop: 0 6
# Short-Description: IPTables firewall script
### END INIT INFO

# Variablen-Definition
IPT=/sbin/iptables
# Pfad zu modprobe
#MODPROBE=/sbin/modprobe
#LN=192.168.0.0/24
INET=eth0

# Standardmässig alles akzeptieren
$IPT -P INPUT ACCEPT
$IPT -P OUTPUT ACCEPT
$IPT -P FORWARD ACCEPT
$IPT -P POSTROUTING ACCEPT -t nat
$IPT -P PREROUTING ACCEPT -t nat
$IPT -P OUTPUT ACCEPT -t nat

# alle Regeln löschen
$IPT -F
$IPT -F -t nat

# alle benutzerdefinierten Regelketten löschen
$IPT -X

# unbehandelte Pakte verwerfen
$IPT -P INPUT DROP
#$IPT -P OUTPUT DROP
$IPT -P FORWARD DROP

# kein IP Forwarding (kein Masquerading)
#echo 0 > /proc/sys/net/ipv4/ip_forward

# localhost pauschal erlauben
#$IPT -A INPUT -s 127.0.0.1 -j ACCEPT
#$IPT -A OUTPUT -d 127.0.0.1 -j ACCEPT

# gefährliche Ports komplett Sperren

# 22 = ssh
# 23 = telnet
# 25 = Simple Mail Transfer Protocol (SMTP)
# 53 = DNS Server
# 69 = tftp
# 113 = Authentifikationsserver
# 135 = Microsoft DCOM RPC
# 137 - 139 = NetBIOS/Samba ...
# 445 = CIFS Dateisystem für Samba
# 631 = ipp/CUPS
# 1433 = Microsoft SQL Server
# 2049 = NFS
# 3306 = MySQL
# 4444 = W32.Blaster Virus
# 5999 - 6003 = X Displays
# 7100 = X-Font Server
# 7741 = lisa, RLAN
# Schleife fürt für jede IP (Port) zwei Befehle u. Logging aus
for PORT in 22 23 25 53 69 113 135 137 138 139 445 631 1433 2049 3306 4444 5999 6000 6001 6002 6003 7100 7741; do
$IPT -A INPUT -i $INET -p tcp --dport $PORT -j LOG --log-prefix "fw_Meldung:" --log-level warning
$IPT -A OUTPUT -o $INET -p tcp --dport $PORT -j LOG --log-prefix "fw_Meldung:" --log-level warning
$IPT -A INPUT -i $INET -p udp --dport $PORT -j LOG --log-prefix "fw_Meldung:" --log-level warning
$IPT -A OUTPUT -o $INET -p udp --dport $PORT -j LOG --log-prefix "fw_Meldung:" --log-level warning
$IPT -A INPUT -i $INET -p tcp --dport $PORT -j DROP
$IPT -A OUTPUT -o $INET -p tcp --dport $PORT -j DROP
$IPT -A INPUT -i $INET -p udp --dport $PORT -j DROP
$IPT -A OUTPUT -o $INET -p udp --dport $PORT -j DROP
done

# Portrange rausfiltern
$IPT -A FORWARD -p tcp --syn --dport 0:65535 -j DROP
$IPT -A FORWARD -p udp --syn --dport 0:65535 -j DROP
$IPT -A INPUT -p tcp --syn --dport 0:65535 -j DROP
$IPT -A INPUT -p udp --syn --dport 0:65535 -j DROP
$IPT -A OUTPUT -p udp --syn --dport 0:65535 -j DROP
$IPT -A OUTPUT -p tcp --syn --dport 0:20 -j DROP
$IPT -A OUTPUT -p tcp --syn --dport 10000:65535 -j DROP

# IP-Range rausfiltern
# Beispiel: $IPT -A INPUT -m iprange --src-range 0.0.0.0-255.255.255.255 -j DROP

# ping blockieren
$IPT -A INPUT -p icmp -j LOG --log-prefix "fw_Meldung:" --log-level warning
$IPT -A INPUT -p icmp -j DROP

# Von außen kommende Datagramme für diesen Host wehren wir ab.
$IPT -A INPUT -i $ANYDEV -j DROP

# SPOOFING
# Wir sollten keine Datagramme von außen akzeptieren, deren Quelladresse
# zu unserem Netzwerk gehört, also blockieren wir sie.
$IPT -A FORWARD -s $OURNET -i $ANYDEV -j DROP

# SMURF
# Wir verbieten ICMP zu unserer Broadcast-Adresse, um "Smurf"-artige
# Attacken zu verhindern.
$IPT -A FORWARD -m multiport -p icmp -i $ANYDEV -d $OURNET -j DROP

# Fragmente sollten wir akzeptieren. In iptables müssen wir das
# explizit verlangen.
$IPT -A FORWARD -f -j ACCEPT

# Verbindungsversuche aus dem Internet verhindern
$IPT -N wall
$IPT -A wall -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A wall -m state --state NEW -i ! $INET -j ACCEPT
$IPT -A wall -j DROP
$IPT -A INPUT -j wall
$IPT -A FORWARD -j wall

# Regel für INPUT u. FORWARD
$IPT -A INPUT -j wall
$IPT -A FORWARD -j wall

# Masquerading
# die drei modprobe Befehle stellen sicher, dass FTP mit Masquerading funktioniert
#$MODPROBE ip_conntrack
#$MODPROBE ip_conntrack_ftp
#$MODPROBE ip_nat_ftp

#$IPT -t nat -A POSTROUTING -o $INET -j MASQUERADE
#echo 1 > /proc/sys/net/ipv4/ip_forward

# ungewöhnliche Flags verwerfen
$IPT -A INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
$IPT -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
$IPT -A INPUT -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP
$IPT -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
$IPT -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
$IPT -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP

# Nur ungültige Pakete loggen
#$IPT -A INPUT -m state --state INVALID -j LOG --log-prefix "fw_Meldung:" --log-level warning

# Unerwartete Pakete verwerfen und ungültige loggen
$IPT -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
$IPT -A INPUT -p tcp -m state --state INVALID -m limit --limit 10/m -j LOG --log-level info

# Pakete, die zu bestehenden Verbindungen gehören, zulassen
$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# Beschränkung pro Client auf max. 10 Verbindungen in 80 Sekunden auf Port 80
$IPT -A INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent -set
$IPT -A INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --update --seconds 80 --hitcount 10 -j DROP

# IP-Sperre bei mehr als 15 offenen Verbindungen pro Client
$IPT -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 15 -j REJECT --reject-with tcp-reset

# HTTP-CONNECT-Anfragen ablehnen
$IPT -I INPUT -p tcp -d 0/0 --dport 80 -m string --string "CONNECT" -j REJECT

# SYN-Flood-Schutz
$IPT -N syn-flood
$IPT -A INPUT -p tcp --syn -j syn-flood
$IPT -A syn-flood -m limit --limit 1/s --limit-burst 3 -j RETURN
$IPT -A syn-flood -j DROP

# ppp0 connection tracking
$IPT -N no-conns-from-ppp0
$IPT -A no-conns-from-ppp0 -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A no-conns-from-ppp0 -m state --state NEW -i ! ppp0 -j ACCEPT
$IPT -A no-conns-from-ppp0 -i ppp0 -m limit -j LOG --log-prefix "Bad packet from ppp0:"
$IPT -A no-conns-from-ppp0 -i ! ppp0 -m limit -j LOG --log-prefix "Bad packet not from ppp0:"
$IPT -A no-conns-from-ppp0 -j DROP

$IPT -A INPUT -j no-conns-from-ppp0
$IPT -A FORWARD -j no-conns-from-ppp0

# LOG-Regel um zu sehen was geblockt wird
$IPT -A INPUT -j LOG
$IPT -A OUTPUT -j LOG
$IPT -A FORWARD -j LOG

Fail2Ban habe ich nach dieser Anleitung installiert:
Siehe hier


Interessantes über IPTABLES DEUTSCH und Einfluss auf meiner FW:
Klick mich!
A1 – Admin Leitfaden bei Denial of Service Angriffen als PDF

Gruss Hackbanger

Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »Hackbanger« (30.07.2012, 21:41)


klaus2008

Meister

Beiträge: 2 656

Geschlecht: Männlich

2

27.07.2012, 12:21

Hallo!

Zitat

IPTABLES und Fail2Ban sepparat starten? Wie bekomme ich den Autostart hin?

Bei Knoppix ist der übliche Platz für automatisch zu startende Systemdienste die /etc/rc.local.

Falls ein Programm direkt am Ende der /etc/init.d/knoppix-autoconfig ausgeführt werden soll, kann man eine Datei /mnt-system/KNOPPIX/knoppix.sh mit den gewünschten Befehlen erstellen.

Soll ein Programm erst gestartet werden, wenn der Desktop (LXDE) aufgebaut wurde, würde ich eine passenden desktop-Datei im Verzeichnis /home/knoppix/.config/autostart anlegen.

Möchte man Einstellungen bei Start des Xservers vornehmen, könnte man beispielsweise ein Skript im Verzeichnis /etc/X11/Xsession.d ablegen.

Zitat

Wo kann ich unnötige Dienste ausschalten
Der Start einiger Dienste kann in der LXDE über den Menüpunkt "Einstellungen" -> "Desktop-Sitzungseinstellungen" geregelt werden.

Antworten zu vielen Fragen, die Debian-Linux betreffen, kann man im Debian GNU/Linux Anwenderhandbuch finden.

Anmerkung: Der Text wäre lesbarer, wenn die Quelltexte in Code-Tags eingeschlossen würden.

Gruss
Klaus

3

27.07.2012, 12:32

Eingehende IP-Range von China rausfiltern

Für die Leute die keine lust haben, solch eine heiden arbeit auf sich zu nehmen, hier die komplette Adressraum/ IP-Range von China als gezippte TXT-Datei: [attach]706[/attach]

Kleiner auszug aus dem Anhang:

# Eingehende IP-Range von China rausfiltern

$IPT -A INPUT -m iprange --src-range 1.0.1.0-1.0.1.255 -j DROP
$IPT -A INPUT -m iprange --src-range 1.0.2.0-1.0.3.255 -j DROP
$IPT -A INPUT -m iprange --src-range 1.0.8.0-1.0.15.255 -j DROP
$IPT -A INPUT -m iprange --src-range 1.0.32.0-1.0.63.255 -j DROP
$IPT -A INPUT -m iprange --src-range 1.1.0.0-1.1.0.255 -j DROP
$IPT -A INPUT -m iprange --src-range 1.1.2.0-1.1.3.255 -j DROP
USW...........................

FUNZT!

4

27.07.2012, 12:59

Hallo Klaus2008,
danke für deine schnelle AW, werde mich durch dieses Anwenderhandbuch arbeiten, um die Parameter zum automatischen starten von IPTABLEs + Fail2Ban zu realisieren!
Da ich LEIDER von Win XP zu stark abhängig wahr und ich nur Knöpfchen drücken musste, ist das hier alles Neuland für mich!
Deswegen finde ich Debian/ Linux einfach das bessere System weil man mehr gefordert werde und ich möchte Windoof langsam los werden,als Internet-System!
Für Spiele wie Silent-Hunter bleibt es aber auf dem PC! Zwar spiele ich selten Games, dafür mehr mit dem Betiebsystemen! :)

RalfonLinux

Erleuchteter

Beiträge: 2 931

Geschlecht: Männlich

5

27.07.2012, 14:45

Sehr schöne Arbeit, die du dir da gemacht hast.

Du läßt nur 80 und 443 outgoing zu ?
Somit kannst du selber kein FTP/SSH machen ?

BTW: Die srcranges 1.0.1.0-1.0.1.255 und 1.0.2.0-1.0.3.255 kannst du auch noch zusammen fassen 1.0.1.0-1.0.3.255

Das dein grosser Rundumschlag (Chinesen komplett raus) aber auch nicht unbedingt das Beste ist, ist dir hoffentlich klar, oder ?
Auch die Jungs wissen, was ein Proxy ist, und in Lateinamerika betteln sie regelrecht darum als Bot missbraucht zu werden.

Weiterhin sind m. M. nach ca. 30% der chinesischen Absender selber nur Bots/Proxies.
Ich hatte auch schon Jungs von der Bank of Bahamas in der Sickergrube, deren Admin wurde ganz nervös, als ich ihm die Logs zukommen ließ.

Ich würde mehr auf verdächtiges Verhalten triggern (DDOS, ssh, w00t, etc), ist m.M. nach effektiver.

Und ganz effektiv ist es, wenn man die Strippe raus zieht, das geht bei produktiven Servern aber leider nicht. ;-)
Da KNOPPIX "nur" ein Live-System zum Anfixen ist, nicht zum Online-Banking ung Co gedacht ist, würde ich dir raten, zu einer echten Distribution oder einer dafür konzipierten LiveCD zu wechseln.
Dort gibt es auch öfters Updates, und nicht nur 1x zur CeBit.
Könnte bei einem OpennSSHd mal wichtig werden ;-)

Viel Spaß noch
Ralf
Auf Wunsch gibt es nur noch Text und keine Bilder mehr in der Signatur.
Keine ? ....... :evil:

Quellcode

1
2
3
4
5
6
7
8
.
    ~
   - -          M
   /V\         - *
  // \\        /V\
 /( _ )\      // \\
  ^~ ~^      /( _ )\
              ^~ ~^

6

02.08.2012, 11:52

Generell bedeutet Sicherheit erstmal das Einspielen von Sicherheitsupdates und das nicht öffnen von Ports im Inet, die man nicht unbedingt benötigt, sowie die Abhärtung der Anwendungen wo auf geöffneten Ports lauschen.
Und natürlich das beobachten der Logfiles.

Hier findest du gute Links: http://www.debian.org/security/#keeping-secure
Macht natürlich nur bei einer Festplatteninstallation Sinn.

Und schau dir die Security Datei auf der Knoppix-CD an.


Soll das System überhaupt nur als Firewall dienen oder soll es ein normaler Heim-PC mit einer Firewall sein?

Für eine reine Firewall sollte man ein möglichst minimales System verwenden, denn wo weniger Code existiert, können auch weniger Sicherheitslücken entstehen. Sie ist natürlich auf keinem Port vom Inet erreichbar ist und regelmäßige Sicherheitsupdates werden zur Verfügung gestellt.

Bei einem Heim-PC sollte das nicht nötig sein da Knoppix sowieso keine Ports für das Inet öffnet, siehe "netstat -tulpen", mit sudo davor damit Programmnamen angezeigt werden.


Du blockst das ICMP-Protokoll komplett, laut dem Kommentar willst du aber nur Pings blocken.
ICMP darf man niemals ganz blocken. Wenn man Pings blocken will dann möglichst nur aus dem Inet, denn im LAN braucht man das vielleicht mal zur Fehlersuche oderso.

Unsichtbar wird man durch das blocken von Pings schonmal nicht, diese Behauptung ist Blödsinn.
Z.B. der Portscanner nmap beherrscht extra für solche Fälle die -PN Option und währst du tatsächlich nicht da, dann käme sowieso eine ICMP Nachricht von dem Router davor das du nicht da bist.


Ausserdem macht blockiertes ICMP bereits bei der MTU-Path-Discovery Probleme, was zu Performance Einbussen führt.

Wenn ppp0 das Inet-Interface ist würde also das Blockieren von eingehenden Pings dort Sinn machen.
Bei einem DSL-Anschluss sollte man immer am ppp0 MTU-Path-Discovery anwenden.
Ausserdem möchtest du dann warscheinlich NAT (Network Address Translation), bzw. MASQUERADING anwenden?

Es währe auch clever wenn man sicherstellt das der TCP-Port 113 eingehend rejectet wird und zwar mit einem tcp-reset (-j REJECT --reject-with tcp-reset). Denn wenn so ein Packet gedroppt wird, führt das beim Einloggen auf den meisten Emailservern natürlich zu Verzögerungen wegen dem Timeout.

Für ausgehende TCP Verbindungen gilt natürlich immer "-j REJECT --reject-with tcp-reset" und für ausgehende UDP Verbindungen immer "-j REJECT --reject-with icmp-port-unreachable", damit die lokalen Programme ebenfalls nicht in nervige Timeouts laufen.


Und immer schön daran denken das für ein Packet, welches das Regelwerk durchläuft, die erste passende Regel greift.


Und was du damit bezwecken willst ist mir völlig schleierhaft:
# Portrange rausfiltern
$IPT -A FORWARD -p tcp --syn --dport 0:65535 -j DROP
$IPT -A FORWARD -p udp --syn --dport 0:65535 -j DROP
$IPT -A INPUT -p tcp --syn --dport 0:65535 -j DROP
$IPT -A INPUT -p udp --syn --dport 0:65535 -j DROP
$IPT -A OUTPUT -p udp --syn --dport 0:65535 -j DROP
$IPT -A OUTPUT -p tcp --syn --dport 0:20 -j DROP
$IPT -A OUTPUT -p tcp --syn --dport 10000:65535 -j DROP

Gut, wenn man eingehend --syn Packete dropt ist das bei einem Heim-PC sinnvoll.
Das sieht dann wohl eher so aus:
$IPT -A FORWARD -i eth0 -p tcp --syn --dport 0:65535 -j DROP
$IPT -A FORWARD -i eth0 -p udp --syn --dport 0:65535 -j DROP
$IPT -A INPUT -p tcp --syn --dport 0:65535 -j DROP
$IPT -A INPUT -p udp --syn --dport 0:65535 -j DROP
Wenn man das aber ausgehend macht, dann kann man keine Verbindungen mehr aufbauen, also z.B. kann der Web-Browser keine Verbindung mehr zum Google-Server aufbauen.
Lese mal bei Wikipedia über das Thema TCP Handshake.


Und informier dich mal über localhost und loopback-interface, die müssen immer am Anfang erlaubt werden aber wie ich sehe hast du die betreffenden Regeln auskommentiert.


Und dann schau dir noch die /etc/sysctl.conf an. Und lies die manpage von sysctl, also "man sysctl" in der Console eingeben.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »knoppixuser« (02.08.2012, 12:03)


Linux HardwareLinux Computer & PCs | Linux Notebooks & Laptops | Geek Shirts | Geek und Nerd Shirt Shop