Problem mit IPTables

FreeBSD, Gentoo, openSUSE, CentOS, Ubuntu, Debian
Post Reply
argoran
Posts: 15
Joined: 2005-12-27 21:53

Problem mit IPTables

Post by argoran »

Hallo,

ich habe folgendes Skript:

Code: Select all

#!/bin/bash

### BEGIN INIT INFO
# Provides: IP-Paketfilter
# Required-Start: $network $local_fs
# Required-Stop: $local_fs
# Default-Start: 3 5
# Default-Stop: 0 1 2 4 6
# Short-Description: Harry's IP-Paketfilter
# Description: Harry's IP-Paketfilter provides reasonable
#      IP-Security for Home-Computers and small networks
### END INIT INFO
#

case "$1" in
  start)
    echo "Starte IP-Paketfilter"

    # 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 "
    iptables -A FORWARD -m state --state INVALID -m limit --limit 7200/h -j LOG --log-prefix "FORWARD INVALID "

    # Korrupte Pakete zurueckweisen
    iptables -A INPUT -m state --state INVALID -j DROP
    iptables -A OUTPUT -m state --state INVALID -j DROP
    iptables -A FORWARD -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
    iptables -A FORWARD -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
    iptables -A FORWARD -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
    iptables -A FORWARD -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
    iptables -A FORWARD -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
    iptables -A FORWARD -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
    iptables -A FORWARD -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
    iptables -A FORWARD -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

    # Maximum Segment Size (MSS) für das Forwarding an PMTU anpassen
    iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

    # Connection-Tracking aktivieren
    iptables -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
    iptables -A FORWARD -i ! ppp0 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
    iptables -A FORWARD -m state --state 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

    # IMAP
    iptables -A INPUT -i ppp0 -m state --state NEW -p tcp --dport 143 -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

    # IRC
    iptables -A INPUT -i ppp0 -m state --state NEW -p tcp --dport 6667 -j ACCEPT

    # IPSEC
    iptables -A INPUT -i ppp0 -p 50 -j ACCEPT
    iptables -A INPUT -i ppp0 -p 51 -j ACCEPT
    iptables -A INPUT -i ppp0 -m state --state NEW -p udp --dport 500 -j ACCEPT

    # ICMP Echo-Request (ping) zulassen und beantworten
    iptables -A INPUT -m state --state NEW -p icmp --icmp-type echo-request -j ACCEPT

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

    # Forwarding/Routing
    echo "Aktiviere IP-Routing"
    echo 1 > /proc/sys/net/ipv4/ip_forward 2> /dev/null

    # SYN-Cookies
    echo 1 > /proc/sys/net/ipv4/tcp_syncookies 2> /dev/null

    # Stop Source-Routing
    for i in /proc/sys/net/ipv4/conf/*; do echo 0 > $i/accept_source_route 2> /dev/null; done

    # Stop Redirecting
    for i in /proc/sys/net/ipv4/conf/*; do echo 0 > $i/accept_redirects 2> /dev/null; done

    # Reverse-Path-Filter
    # Auskommentiert, da IPSEC mit RP_Filter nicht funktioniert!
#     for i in /proc/sys/net/ipv4/conf/*; do echo 2 > $i/rp_filter 2> /dev/null; done

    # Log Martians
    for i in /proc/sys/net/ipv4/conf/*; do echo 1 > $i/log_martians 2> /dev/null; done

    # BOOTP-Relaying ausschalten
    for i in /proc/sys/net/ipv4/conf/*; do echo 0 > $i/bootp_relay 2> /dev/null; done

    # Proxy-ARP ausschalten
    for i in /proc/sys/net/ipv4/conf/*; do echo 0 > $i/proxy_arp 2> /dev/null; done

    # Ungültige ICMP-Antworten ignorieren
    echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses 2> /dev/null

    # ICMP Echo-Broadcasts ignorieren
    echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts 2> /dev/null

    # 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

    ;;

  stop)
    echo "Stoppe IP-Paketfilter"
    # Tabelle flushen
    iptables -F
    iptables -t nat -F
    iptables -t mangle -F
    iptables -X
    iptables -t nat -X
    iptables -t mangle -X
    echo "Deaktiviere IP-Routing"
    echo 0 > /proc/sys/net/ipv4/ip_forward

    # Default-Policies setzen
    iptables -P INPUT ACCEPT
    iptables -P OUTPUT ACCEPT
    iptables -P FORWARD ACCEPT
    ;;

  status)
    echo "Tabelle filter"
    iptables -L -vn
    echo "Tabelle nat"
    iptables -t nat -L -vn
    echo "Tabelle mangle"
    iptables -t mangle -L -vn
    ;;

  *)
    echo "Fehlerhafter Aufruf"
    echo "Syntax: $0 {start|stop|status}"
    exit 1
    ;;

esac
Leider stürzt jedes Mal wenn ich es starte der Server ab. Wo liegt der Fehler? Was kann ich tun?

thx
prickelpit
Posts: 36
Joined: 2003-10-21 13:59

Re: Problem mit IPTables

Post by prickelpit »

Was kann ich tun?
Du könnstest das Skript z.B. weglassen, da ein Paketfilter auf einem Rootserver i.d.R. keinen großartigen Sinn macht.
Matthias Diehl
Posts: 315
Joined: 2002-09-24 13:26

Re: Problem mit IPTables

Post by Matthias Diehl »

Du lässt das auf einem Server laufen? Dann ist es klar das Du Dich selbst damit aussperrst. Mal ganz davon abgesehen, dass es kaum einen mir bekannten Grund gibt auf einem Internetserver eine Firewall laufen zu lassen:
Noch viel weniger sinnvoll ist es, mit einem Firewallscript welches man nicht versteht zu hantieren. Das soll keine Anmache sein, aber das von Dir verwendete Script ist auf einen lokalen PC oder ein lokales Netzwerk ausgelegt, welches über eine Wähl- oder DSL-Verbindung mit dem Internet verbunden ist. Es öffnet nur Ports die per Wähl- oder DSL-Leitung reinkommen. Dies ist bei einem Internetserver nicht der Fall. Also werden gar keine Ports geöffnet (die Standardeinstellung ist ja die Pakete zu droppen) und Du hast Dich ausgesperrt. Der Server hängt sich also nicht auf, sondern das Script tut ganz genau das was es tun soll.
Sieh das nicht als Anmache, aber es ist besser Du beschäftigst Dich VORHER mit dem Script und wenn Du nachvollziehen kannst was dort getan wird, dann installierst Du es. Allerdings wirst Du wahrscheinlich vorher feststellen, das Du mit hoher Wahrscheinlichkeit kein solches und bestimmt nicht dieses Script brauchst.
Nix für ungut :)
Matthias
encbladexp
Posts: 84
Joined: 2006-01-04 12:09
Location: Lichtenfels
Contact:

Re: Problem mit IPTables

Post by encbladexp »

Argoran wrote:Leider stürzt jedes Mal wenn ich es starte der Server ab. Wo liegt der Fehler? Was kann ich tun?
Dir selber ein Skript schreiben?
Ich bezweifle das auf deinem Rootserver ein Netzwerkdevice ppp0 existiert :-(

Man kann net einfach irgendwoher ein Skript aus dem Netz laden, starten und fertig ist das Thema firewall/packetfilter... nene, so nicht...

Tipp: "man iptables"

mfg Betz Stefan
argoran
Posts: 15
Joined: 2005-12-27 21:53

Re: Problem mit IPTables

Post by argoran »

nein ist schon ok, ich denke ihr habt Recht. Danke trotzdem.

MfG


Argoran
argoran
Posts: 15
Joined: 2005-12-27 21:53

Re: Problem mit IPTables

Post by argoran »

Eine Frage noch:

Da ich einen vServer habe, habe ich leider keinen Zugriff auf den Kernel, um iptables abzuschalten. Könnt ihr mir ein Beispielskript posten, mit dem ich quasi alle Verbindungen erlauben kann? Wenn ich alle Regeln flushe mit iptables -F ist es bei einem Restart ja wieder da (ich meine die defaultConfig, die mein Betreiber eingerichtet hat). Wie könnte man realisieren, dass wenn das PW mehr als 3mal falsch eingegeben wurde, alle Anfragen von dieser IP geblockt werden? (Um die Scanner außen vor zu lassen)

thx
cosmo
Posts: 16
Joined: 2005-10-17 12:13
Location: Zweibrücken
Contact:

Re: Problem mit IPTables

Post by cosmo »

Hallo,
wie du mit dem IPTables Problem auf dem Vserver umgehst kann ich dir leider nicht sagen, aber du könntest dieses SCript hier http://newald.de/index.php?id=305 probieren um die SSH Brute Forcer ein bisschen zu schwächen. Wenn du das meintest mit "Wie könnte man realisieren, dass wenn das PW mehr als 3mal falsch eingegeben wurde, alle Anfragen von dieser IP geblockt werden? (Um die Scanner außen vor zu lassen)" meintest.

Gruß
encbladexp
Posts: 84
Joined: 2006-01-04 12:09
Location: Lichtenfels
Contact:

Re: Problem mit IPTables

Post by encbladexp »

Argoran wrote: Da ich einen vServer habe, habe ich leider keinen Zugriff auf den Kernel, um iptables abzuschalten. Könnt ihr mir ein Beispielskript posten, mit dem ich quasi alle Verbindungen erlauben kann? Wenn ich alle Regeln flushe mit iptables -F ist es bei einem Restart ja wieder da!
Ich würde mal unter /etc/rc*.d schauen...

Irgendwie & wo muss ja schon mal iptables gestartet worden sein...

Was hast du für ne Distri auf dem Server?

mfg Betz Stefan
argoran
Posts: 15
Joined: 2005-12-27 21:53

Re: Problem mit IPTables

Post by argoran »

Hallo,

ich habe Debian Sarge. In /sbin/ habe ich Dateien namens iptables, iptables-save, iptables-restore, ip6tables, ip6tables-save, ip6tables-restore

MfG
encbladexp
Posts: 84
Joined: 2006-01-04 12:09
Location: Lichtenfels
Contact:

Re: Problem mit IPTables

Post by encbladexp »

Argoran wrote: ich habe Debian Sarge. In /sbin/ habe ich Dateien namens iptables, iptables-save, iptables-restore, ip6tables, ip6tables-save, ip6tables-restore
Wenn du debian sarge hast, solltest du unter /etc/rc2.d und /etc/rcS.d schauen ob da dateien sind die z.B. S99iptables* oder so heisen... Können aber auch anders heisen, der Provider hat da bestimmt was angepasst...

mfg Betz Stefan
PS: Die Sachen unter /sbin lästu du schön gehen...
argoran
Posts: 15
Joined: 2005-12-27 21:53

Re: Problem mit IPTables

Post by argoran »

Hallo,

habe mal ein Screenshot vom Ordnerinhalt gemacht:
rc2.d:
Image

rcS.d:
Image

Habe da leider keine S99iptables

MfG
Post Reply