Einlogen über den Root Account über SSH(z.b mit Putty)
Root Passwort:
Das Root Passwort sollte man so ändern das es mehrere Zahlen,Buchstaben und Sonderzeichen enthällt. Bei den Buchstaben sollte auch noch die Groß- und Kleinschreibung beachtet werden. Ich habe z.b ein 20 Zeichen Passwort mit all den oben genannten Zeichen.
Dass Passwort kann man mit dem folgenden Befehl ändern>
passwd
Arbeitsuser erstellen:
Unter Linux sollte man wenn möglich keine Sachen als Root User starten. Deswegen legt man einen "Arbeitsuser" an.
Der Befehl dazu lautet>
adduser USERNAME
Root Login verbieten:
Den direkten Root Login über z.b Putty sollte man verbieten. Wenn man eingelogt ist kann man ja zum Root wechseln. Aber der direkte Login sollte verhindert werden. Die Konfigurations-Datei befindet sich in /etc/ssh/sshd_config. Bearbeiten kann man sie mit>
nano /etc/ssh/sshd_config
In der Konfigurationsdatei steht
PermitRootLogin yes
was man auf
PermitRootLogin no
ändern sollte.
SSH neustarten:
Unter Debian>
/etc/init.d/sshd restart
Die Konsole(Putty nicht schließen) da falls man einen Fehler gemacht hat die Verbindung trotzdem Bestehen bleibt.
Neues Putty Fenster öffnen und den direkten Root Login testen. Wenn keine Verbindung zustande kommt ist alles richtig.
Jetzt Noch mit dem "Arbeitsuser" testen. Wenn eine Verbindung akzeptiert wird ist alles richtig.
Jetzt zum Root User werden mit>
su
Port-Knocking:
Man sollte den SSH Port grundsätzlich blocken und durch bestimmte Anklopfsignale an bestimmten Ports nur einer bestimmten IP zugriff auf den SSH Port geben. Portscanner listen den SSH Port einfach nicht auf und auch Bruteforce Angriffe auf diesen Port werden verhindert... da er ja immer geschlossen ist und nur für eine autorisierte Person die speziel am Server angeklopft hat geöffnet wird.Unter Debian kann man knockd installieren mit>
apt-get install knockd
Die Konfigurationsdatei befindet sich bei Debian unter /etc/knockd.conf die mit>
nano /etc/knockd.conf
geöffnet werden kann. Hier mal eine Beispiel Konfiguration.
[options]
logfile = /var/log/knockd.log
[openSSH]
sequence = 111,222,333
seq_timeout = 5
command = /sbin/iptables -A INPUT -s %IP% -p tcp --sport 22 --dport 1024:65535 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT && /sbin/iptables -A INPUT -s %IP% -p tcp --dport 22 --sport 1024:65535 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
tcpflags = syn
[closeSSH]
sequence = 444,555,666
seq_timeout = 5
command = /sbin/iptables -D INPUT -s %IP% -p tcp --sport 22 --dport 1024:65535 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT && /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 --sport 1024:65535 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
tcpflags = syn
Hier wird SSH erlaubt für eine Bestimmte IP bei dem Anklopfen auf den Ports 111,222,333 und der Zugriff wieder gelöscht beim Anklopfen auf den Ports 444,555,666.
Knockd aktiviren kann man mit>
nano /etc/default/knockd
Der Klient um Anzuklopfen kann man download unter>
http://www.zeroflux.org/cgi-bin/cvstrac.cgi/knock/wikiTesten>
knockd --debug --verbose
Jetzt den Klienten starten mit der Port Sequenz. In der Putty Konsole müsste dann etwas stehen ob es erfolgreich war oder nicht. Wenn alles erfolgreich war knockd dauerhaft starten mit>
/etc/init.d/knockd start
Beispiel Firewall mit Iptables.
#!/bin/sh
# iptables suchen
iptables=`which iptables`
# wenn iptables nicht installiert abbrechen
test -f $iptables || exit 0
case "$1" in
start)
echo "Starte Firewall..."
# alle Regeln löschen
$iptables -t nat -F
$iptables -t nat -X
$iptables -t filter -F
$iptables -t filter -X
$iptables -t mangle -F
$iptables -t mangle -X
$iptables -X
$iptables -Z
# ICMP Dead Error Messages protection.
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
# 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 10 > /proc/sys/net/ipv4/tcp_fin_timeout
echo 1800 > /proc/sys/net/ipv4/tcp_keepalive_time
echo 0 > /proc/sys/net/ipv4/tcp_window_scaling
echo 0 > /proc/sys/net/ipv4/tcp_sack
# 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
# Required to enable IPv4 forwarding.
echo "1" > /proc/sys/net/ipv4/ip_forward
# This enables dynamic address hacking.
echo "1" > /proc/sys/net/ipv4/ip_dynaddr
# This enables SYN flood protection.
echo "1" > /proc/sys/net/ipv4/tcp_syncookies
# Ping flood protection
echo 1 > /proc/sys/net/ipv4/icmp_ratelimit
# This enables source validation by reversed path according to RFC1812.
echo "1" > /proc/sys/net/ipv4/conf/all/rp_filter
# This option allows a subnet to be firewalled with a single IP address.
echo "1" > /proc/sys/net/ipv4/conf/all/proxy_arp
# This kernel parameter instructs the kernel to ignore all ICMP
echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
# This option can be used to accept or refuse source routed
echo "0" > /proc/sys/net/ipv4/conf/all/accept_source_route
# This option can disable ICMP redirects. ICMP redirects
echo "0" > /proc/sys/net/ipv4/conf/all/accept_redirects
# This option accepts only from gateways in the default gateways list.
echo "1" > /proc/sys/net/ipv4/conf/all/secure_redirects
# This option logs packets from impossible addresses.
echo "1" > /proc/sys/net/ipv4/conf/all/log_martians
# neue Regeln erzeugen
$iptables -N garbage
$iptables -I garbage -p TCP -j LOG --log-prefix="DROP TCP-Packet: " --log-level err
$iptables -I garbage -p UDP -j LOG --log-prefix="DROP UDP-Packet: " --log-level err
$iptables -I garbage -p ICMP -j LOG --log-prefix="DROP ICMP-Packet: " --log-level err
# Default Policy
$iptables -P INPUT DROP
$iptables -P OUTPUT ACCEPT
$iptables -P FORWARD DROP
# über Loopback alles erlauben
$iptables -I INPUT -i lo -j ACCEPT
$iptables -I OUTPUT -o lo -j ACCEPT
if [ -f ports.conf ]; then
for port in `cat ports.conf`
do
$iptables -I INPUT -i eth0 -p TCP --sport $port --dport 1024:65535 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$iptables -I INPUT -i eth0 -p TCP --sport 1024:65535 --dport $port -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$iptables -I INPUT -i eth0 -p UDP --sport $port --dport 1024:65535 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$iptables -I INPUT -i eth0 -p UDP --sport 1024:65535 --dport $port -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
done
fi
#####################################################
# Erweiterte Sicherheitsfunktionen
# SynFlood
$iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT
# PortScan
$iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
# Ping-of-Death
$iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
#####################################################
# bestehende Verbindungen akzeptieren
$iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#####################################################
# Garbage übergeben wenn nicht erlaubt
$iptables -A INPUT -m state --state NEW,INVALID -j garbage
#####################################################
# alles verbieten was bisher erlaubt war
$iptables -A INPUT -j garbage
$iptables -A OUTPUT -j garbage
$iptables -A FORWARD -j garbage
;;
minimal)
echo "Starte Firewall(minimal)..."
# alle Regeln löschen
$iptables -t nat -F
$iptables -t nat -X
$iptables -t filter -F
$iptables -t filter -X
$iptables -t mangle -F
$iptables -t mangle -X
$iptables -X
$iptables -Z
# ICMP Dead Error Messages protection.
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
# 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 10 > /proc/sys/net/ipv4/tcp_fin_timeout
echo 1800 > /proc/sys/net/ipv4/tcp_keepalive_time
echo 0 > /proc/sys/net/ipv4/tcp_window_scaling
echo 0 > /proc/sys/net/ipv4/tcp_sack
# 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
# Required to enable IPv4 forwarding.
echo "1" > /proc/sys/net/ipv4/ip_forward
# This enables dynamic address hacking.
echo "1" > /proc/sys/net/ipv4/ip_dynaddr
# This enables SYN flood protection.
echo "1" > /proc/sys/net/ipv4/tcp_syncookies
# Ping flood protection
echo 1 > /proc/sys/net/ipv4/icmp_ratelimit
# This enables source validation by reversed path according to RFC1812.
echo "1" > /proc/sys/net/ipv4/conf/all/rp_filter
# This option allows a subnet to be firewalled with a single IP address.
echo "1" > /proc/sys/net/ipv4/conf/all/proxy_arp
# This kernel parameter instructs the kernel to ignore all ICMP
echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
# This option can be used to accept or refuse source routed
echo "0" > /proc/sys/net/ipv4/conf/all/accept_source_route
# This option can disable ICMP redirects. ICMP redirects
echo "0" > /proc/sys/net/ipv4/conf/all/accept_redirects
# This option accepts only from gateways in the default gateways list.
echo "1" > /proc/sys/net/ipv4/conf/all/secure_redirects
# This option logs packets from impossible addresses.
echo "1" > /proc/sys/net/ipv4/conf/all/log_martians
# neue Regeln erzeugen
$iptables -N garbage
$iptables -I garbage -p TCP -j LOG --log-prefix="DROP TCP-Packet: " --log-level err
$iptables -I garbage -p UDP -j LOG --log-prefix="DROP UDP-Packet: " --log-level err
$iptables -I garbage -p ICMP -j LOG --log-prefix="DROP ICMP-Packet: " --log-level err
# Default Policy
$iptables -P INPUT DROP
$iptables -P OUTPUT ACCEPT
$iptables -P FORWARD DROP
# über Loopback alles erlauben
$iptables -I INPUT -i lo -j ACCEPT
$iptables -I OUTPUT -o lo -j ACCEPT
$iptables -I INPUT -i eth0 -p TCP --sport 22 --dport 1024:65535 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$iptables -I INPUT -i eth0 -p TCP --sport 1024:65535 --dport 22 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$iptables -I INPUT -i eth0 -p UDP --sport 22 --dport 1024:65535 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$iptables -I INPUT -i eth0 -p UDP --sport 1024:65535 --dport 22 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
#####################################################
# Erweiterte Sicherheitsfunktionen
# SynFlood
$iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT
# PortScan
$iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
# Ping-of-Death
$iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
#####################################################
# bestehende Verbindungen akzeptieren
$iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#####################################################
# Garbage übergeben wenn nicht erlaubt
$iptables -A INPUT -m state --state NEW,INVALID -j garbage
#####################################################
# alles verbieten was bisher erlaubt war
$iptables -A INPUT -j garbage
$iptables -A OUTPUT -j garbage
$iptables -A FORWARD -j garbage
;;
testing)
echo "Testing..."
$0 start
sleep 180
$0 stop
;;
stop)
echo "Stoppe Firewall..."
$iptables -t nat -F
$iptables -t filter -F
$iptables -X
$iptables -P INPUT ACCEPT
$iptables -P OUTPUT ACCEPT
$iptables -P FORWARD ACCEPT
;;
restart|reload|force-reload)
$0 stop
$0 start
;;
*)
echo "Usage: ./firewall (start|stop|minimal|testing|restart|reload|force-reload)"
exit 1
;;
esac
exit 0
Hier wird alles geblockt. Nur die Ports in der ports.conf werden zugelassen.