traceroute blockieren mit IPTABLES

#0
16.08.2006, 01:51
Member

Beiträge: 31
#1 hallo

habe auf meinem ipsec gateway (debian stable) follgenden firewall script:

Code

#!/bin/sh

EXT_IF="eth0"
INT_IF="eth1"
LOCAL_LAN="192.168.114.0/24"
REMOTE_LAN1="192.168.0.0/24"
REMOTE_LAN2="192.168.1.0/24"
REMOTE_LAN3="10.20.0.0/8"
IPTABLES="/sbin/iptables"

$IPTABLES -t mangle -F
$IPTABLES -t mangle -X
$IPTABLES -t nat -F
$IPTABLES -t nat -X
$IPTABLES -F
$IPTABLES -X

# in case of stop

#case $1 in

# stop )

#$IPTABLES -P INPUT ACCEPT
#$IPTABLES -P FORWARD ACCEPT
#$IPTABLES -P OUTPUT ACCEPT

#exit0

#;;

$IPTABLES -P INPUT DROP
$IPTABLES -P FORWARD DROP
$IPTABLES -P OUTPUT ACCEPT


# Public Networks
$IPTABLES -A INPUT -s 202.X.X.0/28 -j ACCEPT

# Allowed Services
$IPTABLES -A INPUT -p tcp -m multiport --dport 80,443 -i eth0 -j ACCEPT

# Allow DNS
$IPTABLES -A INPUT -p tcp --dport 53 -j ACCEPT
$IPTABLES -A INPUT -p udp --dport 53 -j ACCEPT

# Allow FTP
$IPTABLES -A INPUT -p tcp -m tcp --dport 21 -j ACCEPT

# Allow SSH
$IPTABLES -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT

# Allow access from LAN
$IPTABLES -t nat -A POSTROUTING -s $LOCAL_LAN -o $EXT_IF -j SNAT --to 202.X.X.10

# Mark VPN packets
$IPTABLES -t mangle -A PREROUTING -i $EXT_IF -p esp -j MARK --set-mark 1 #VPN

$IPTABLES -t nat -A PREROUTING -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPTABLES -t nat -A PREROUTING -s $REMOTE_LAN1 -i $EXT_IF -m mark --mark 1 -j ACCEPT
$IPTABLES -t nat -A PREROUTING -s $REMOTE_LAN2 -i $EXT_IF -m mark --mark 1 -j ACCEPT
$IPTABLES -t nat -A PREROUTING -s $REMOTE_LAN3 -i $EXT_IF -m mark --mark 1 -j ACCEPT

$IPTABLES -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

$IPTABLES -A INPUT -i eth1 -p icmp -j ACCEPT
$IPTABLES -A INPUT -i $EXT_IF -p udp -m udp --dport 500 -j ACCEPT #VPN
$IPTABLES -A INPUT -i $EXT_IF -m mark --mark 1 -j ACCEPT

$IPTABLES -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPTABLES -A FORWARD -i $EXT_IF -m mark --mark 1 -j ACCEPT
$IPTABLES -A FORWARD -i $INT_IF -j ACCEPT

# Allow loopback-device
$IPTABLES -A INPUT -i lo -j ACCEPT

# Spoof protection
$IPTABLES -t nat -A PREROUTING -d $LOCAL_LAN -i $EXT_IF -j DROP
wie kann ich zusätzlich traceroute von extern blockieren ?
Seitenanfang Seitenende
16.08.2006, 11:32
Member
Avatar Xeper

Beiträge: 5289
#2 Hätte jetzt gesagt ICMP für eth0 blockieren aber das tust du ja schon oder?
__________
E-Mail: therion at ninth-art dot de
IRC: megatherion @ Freenode
Seitenanfang Seitenende
16.08.2006, 12:43
Member

Themenstarter

Beiträge: 31
#3 korrekt, ICMP wird blockiert, aber traceroute ist immer noch erlaubt.
ich möchte eben beides blockieren ICMP und traceroute.

weiss jemand was ich noch zusätzlich eintragen muss ?
Seitenanfang Seitenende
16.08.2006, 14:04
Member
Avatar Xeper

Beiträge: 5289
#4 Hmm naja traceroute macht ja nichts anderes als ICMP benutzen, verstehe ich jetzt nicht ganz aber na gut.
__________
E-Mail: therion at ninth-art dot de
IRC: megatherion @ Freenode
Seitenanfang Seitenende
16.08.2006, 14:47
Member

Themenstarter

Beiträge: 31
#5 sorry, falsch geschaut !

traceroute wird doch blockiert.
Seitenanfang Seitenende
26.02.2007, 09:30
Member

Beiträge: 43
#6

Zitat

Hmm naja traceroute macht ja nichts anderes als ICMP benutzen
soweit ich das noch in erinnerung hatte, funktioniert traceroute über UDP (linux), Ports UDP 33434:33523

windows tracert hingegen icmp...

da dein Policies alle auf DROP gesetzt sind, wird also auch alles geblocked was nicht explizit zugelassen wird...

dies nur ergänzend...
Dieser Beitrag wurde am 26.02.2007 um 17:22 Uhr von lucy editiert.
Seitenanfang Seitenende
26.02.2007, 10:34
Member

Themenstarter

Beiträge: 31
#7 vielen herzlichen dank !
Seitenanfang Seitenende
26.02.2007, 10:40
Member

Themenstarter

Beiträge: 31
#8 mein firewall script sieht jetzt folgendermassen aus und hoffe alles OK.
anyway kann jemand einen blick werfen ?

Code

#!/bin/sh

EXT_IF="eth0"
INT_IF="eth1"
LOCAL_LAN="192.168.115.0/24"
REMOTE_LAN1="192.168.0.0/24"
REMOTE_LAN2="192.168.1.0/24"
REMOTE_LAN3="10.0.0.0/8"
IPTABLES="/sbin/iptables"

$IPTABLES -t mangle -F
$IPTABLES -t mangle -X
$IPTABLES -t nat -F
$IPTABLES -t nat -X
$IPTABLES -F
$IPTABLES -X


case "$1" in
   start)
     echo -n "Starting firewall.."


# Flush then restrict
$IPTABLES -F
$IPTABLES -P FORWARD DROP
$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT ACCEPT



# SYN-flood atack protection
$IPTABLES -A INPUT -p tcp --syn -m limit --limit 1/s -j ACCEPT
$IPTABLES -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT

# Disable ping
$IPTABLES -A INPUT -p icmp --icmp-type echo-request -j DROP
$IPTABLES -A INPUT -p icmp --icmp-type echo-reply -j DROP



# Public Networks
$IPTABLES -A INPUT -s 202.X.X.0/28 -j ACCEPT

# Allowed Services
$IPTABLES -A INPUT -p tcp -m multiport --dport 80,443 -i eth0 -j ACCEPT

# Allow DNS
$IPTABLES -A INPUT -p tcp --dport 53 -j ACCEPT
$IPTABLES -A INPUT -p udp --dport 53 -j ACCEPT

# Allow FTP
$IPTABLES -A INPUT -p tcp -m tcp --dport 21 -j ACCEPT

# Allow SSH
$IPTABLES -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT

# Allow SMTP
$IPTABLES -A INPUT -p tcp -m tcp --dport 25 -j ACCEPT

# Allow IMAP
$IPTABLES -A INPUT -p tcp -m tcp --dport 993 -j ACCEPT

# Allow SSL encryption
$IPTABLES -A INPUT -p tcp -m tcp --dport 465 -j ACCEPT

# Allow access from LAN
$IPTABLES -t nat -A POSTROUTING -s $LOCAL_LAN -o $EXT_IF -j SNAT --to 202.X.X.10

# Mark VPN packets
$IPTABLES -t mangle -A PREROUTING -i $EXT_IF -p esp -j MARK --set-mark 1 #VPN

#$IPTABLES -t nat -A PREROUTING -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPTABLES -t nat -A PREROUTING -s $REMOTE_LAN1 -i $EXT_IF -m mark --mark 1 -j ACCEPT
$IPTABLES -t nat -A PREROUTING -s $REMOTE_LAN2 -i $EXT_IF -m mark --mark 1 -j ACCEPT
$IPTABLES -t nat -A PREROUTING -s $REMOTE_LAN3 -i $EXT_IF -m mark --mark 1 -j ACCEPT

$IPTABLES -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

$IPTABLES -A INPUT -i eth1 -p icmp -j ACCEPT
$IPTABLES -A INPUT -i $EXT_IF -p udp -m udp --dport 500 -j ACCEPT #VPN
$IPTABLES -A INPUT -i $EXT_IF -m mark --mark 1 -j ACCEPT

$IPTABLES -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPTABLES -A FORWARD -i $EXT_IF -m mark --mark 1 -j ACCEPT
$IPTABLES -A FORWARD -i $INT_IF -j ACCEPT

# Allow loopback-device
$IPTABLES -A INPUT -i lo -j ACCEPT

# Spoof protection
$IPTABLES -t nat -A PREROUTING -d $LOCAL_LAN -i $EXT_IF -j DROP


        echo "..done"
                ;;

        stop)

                echo -n "Stopping firewall.."
                $IPTABLES -F
                $IPTABLES -P FORWARD DROP
                $IPTABLES -P OUTPUT ACCEPT
                $IPTABLES -P INPUT ACCEPT
                echo "done"

                ;;
        restart)
                echo -n "Restarting firewall.."
                $IPTABLES -F
                $IPTABLES -P FORWARD DROP
                $IPTABLES -P OUTPUT ACCEPT
                $IPTABLES -P INPUT ACCEPT
                $0 stop
                $0 start
                ;;
        reload)
                echo "Reloading"
                $0 start
                ;;
        *)
                echo "Unknown command" 1>&2
                ;;
esac
Seitenanfang Seitenende
26.02.2007, 11:35
Member

Beiträge: 43
#9 ich weiss nicht ob das wirklich von dir so beabsichtigt ist, möglich ist ja alles.
jedoch fällt mir auf...

relativ weit oben:
############

# Disable ping
$IPTABLES -A INPUT -p icmp --icmp-type echo-request -j DROP
$IPTABLES -A INPUT -p icmp --icmp-type echo-reply -j DROP

weiter unten:
#########
$IPTABLES -A INPUT -i eth1 -p icmp -j ACCEPT

..in dieser reihenfolge wirst du nie ein Ping auf die netzadresse von eth1 absetzen können (icmp type 8), denn der erste abgesetzte "ping" - egal auf welchem interface durchläuft den oberen filter und wird gedroppt.

Interesse halber, was willst du damit erreichen?
$IPTABLES -A INPUT -p icmp --icmp-type echo-reply -j DROP

MFG
Seitenanfang Seitenende
26.02.2007, 11:49
Member
Avatar Xeper

Beiträge: 5289
#10 Soll er doch die Regel $IPTABLES -A INPUT -i eth1 -p icmp -j ACCEPT dann nach oben setzen.

Zitat

Interesse halber, was willst du damit erreichen?
$IPTABLES -A INPUT -p icmp --icmp-type echo-reply -j DROP
Das geht wahrscheinlich nur bei -A OUTPUT oder?
__________
E-Mail: therion at ninth-art dot de
IRC: megatherion @ Freenode
Seitenanfang Seitenende
26.02.2007, 11:57
Member

Beiträge: 43
#11

Zitat

Xeper postete
Soll er doch die Regel $IPTABLES -A INPUT -i eth1 -p icmp -j ACCEPT dann nach oben setzen.
...genau so würde ich das sehen ^^, deswegen mein hinweis, allerdings muss man immer hinterfragen was der besitzer tatsächlicherreichen will ^^, da dies ja immerhin eine gültige regel ist ;) auch wenn ich es mehr für einen schönheitsfehler halte...

Zitat

Das geht wahrscheinlich nur bei -A OUTPUT oder?
ich tippe eher, das er wenn er von diesem host auf dem diese iptables läuft, einen ping woandershin absetzt, er niemals eine Ping antwort bekommen wird.

eine Output regel kann das natürlich auch sein, als folge (antwort) einer INPUT echo request, aber wenn der INPUT schon geblockt wird, gibts auch kein OUTPUT, gell?

-------------
@cc

1) ...und wenn du dein firewall script wegen der übersichtlichkeit mal kürzen magst, denn in der regel ändert sich ja nicht viel wenn man sie einmal "richtig" konfiguriert hat, kannst du sowas hier auch benutzen:

################################################
# meine Ports SSH, FTP, IMAP ...etc.
MY_PORTS="21 22 993" # beliebig erweiterbar

for PORT in ${MY_PORTS} ; do
$IPTABLES -A INPUT -p tcp -m tcp --dport ${PORT} -j ACCEPT
done
################################################
bzw. auch mit multiports, aber dort aufpassen wegen der 15 port limitation

du könntest auch alle tcp pakete auf gültigkeit (syn flagg gesetzt) überprüfen, immer wenn eine neue Verbindung aufgebaut wird...

##### TCP_CHECK Regel #####
$IPTABELES -N TCP_CHECK
$IPTABELES A TCP_CHECK -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABELES -A TCP_CHECK -p tcp --syn -j ACCEPT
$IPTABELES -A TCP_CHECK -p tcp -j DROP
#######################
nun müsstest du allerdings alle anderen TCP Regeln durch dieses Target "jagen"...

z.B.
################################################
# meine Ports SSH, FTP, IMAP ...etc.
MY_PORTS="21 22 993" # beliebig erweiterbar

for PORT in ${MY_PORTS} ; do
$IPTABLES -A INPUT -p tcp -m tcp --dport ${PORT} -j TCP_CHECK
done
################################################

naja, seh das nur als kleine ergänzung ;) nicht als kritik an deinem script...

2) ...sehe ich das richtig, das dein IPSEC Gateway eine "sogenannte" Eier-legende-Woll-Milch-Sau" ist?

du erlaubst ziemlich viele dienste auf diesem System, oder gehts dir "eigentlich" mehr darum, deinen "dahinterliegen LAN's" FTP, IMAP , SMTP over TLS/SSl etc. Zugänge zu ermöglichen?
Die vielen INPUT Regeln weisen darauf hin, das dieses System IMAP, FTP und SMTP server ist...
ich halte es nicht für ratsam, ein "derart" wichtiges system mit allen diensten (FTP, ec.) zu penetrieren, es ist einfach zu angreifbar, immerhin bildet es den abschlusspunkt zu deinem LAN, das willst du doch schützen oder?

...anderenfalls muesste man ein paar INPUT Regeln in FORWARD regeln umwandeln.
Wenn du passives FTP auch ermöglichen möchtest (FTP Server) , dann müsstest du noch ein paar mehr TCP ports aufmachen (standard TCP/35035:49049, insofern nicht am TCP dienst konfigurierbar ist)...

für die Nutzung von FTP durch dieses gateway für deine LANS, solltest du nicht vergessen, die iptables module
> ip_conntrack_ftp und ip_nat_ftp zu laden, sonst wird es evtl. probleme geben.
kannst du mit #~ lsmod überprüfen

so das wars auch schon...

MFG
Dieser Beitrag wurde am 26.02.2007 um 13:09 Uhr von lucy editiert.
Seitenanfang Seitenende