Honeypot IP Tables Konfiguration

Firewire2002

Registered User
Als Statistik-Liebhaber hab ich mich mal durch Huschi's Artikel (Portscan-Honeypot mit iptables - huschi.net) inspirieren lassen. :)

Honeypot auf Port 22,23,135 mit einer Sperre für 8 Stunden und einer Erhöhung der ip_list_tot auf 1000 (Anzahl der Einträge in der Liste für das recent Modul)
Im Anhang ist der derzeitige Stand. Unter Munin :: Eisscholle.net :: Snowball.Eisscholle.net :: IPTables dürfen die aktuellen Statistiken bewundert werden.

Ich schätze das Limit von 1000 (Standard ist 100) wird noch nicht reichen.
Wer hält dagegen? :)
 

Attachments

  • Honeypot.png
    Honeypot.png
    71.6 KB · Views: 402
Habe das Limit ip_list_tot mal auf 100.000 Einträge erhöht.
Dürfte auch interessant werden, wie sich CPU und Ram dazu verhält. :)

Theorie aus Linux Büchern ist mir zu langweilig. Ich mach lieber Experimente. :D

@djrick:
Falls du deine Statistiken mit meinen vergleichen willst, bedenke das bei mir 34 IPs hochgefahren sind.
Das könnte sich etwas auf die Statistiken auswirken. ;)
 
Last edited by a moderator:
Du könntest mir aber mal das Munin Plugin posten :)

An der Menge der öffentlichen IPs könnte ich mithaten, jedoch werden von meinen 64 möglichen IPs 61 von der Firewall direkt geblockt (wüsste auch nicht wozu ein Terminal Client o.Ä. vom Internet aus erreichbar sein sollte ;) )
 
Last edited by a moderator:
Hmm ich weiß nicht. Dafür sollte man sich eigentlich schämen. :o
Aber na gut:

Code:
#!/bin/bash

if [ "$1" = "autoconf" ]; then
	echo yes 
	exit 0
fi

if [ "$1" = "config" ]; then
	echo 'graph_title Number of IPTables on System'
	echo 'graph_args --base 1000 -l 0 '
	echo 'graph_vlabel number of rules'
	echo 'graph_category Network'
	echo 'graph_order iptrulesnumstatic iptrulesnumdrop iptrulesnumpscan'
	echo 'graph_info This graph shows the number of Iptables Rules on System.'
	echo 'iptrulesnumstatic.label Static Rules'
	echo 'iptrulesnumstatic.draw AREA'
	echo 'iptrulesnumdrop.label Drop Rules'
	echo 'iptrulesnumdrop.draw STACK'
	echo 'iptrulesnumpscan.label Port Scans'
	echo 'iptrulesnumpscan.draw STACK'	
	exit 0
fi

pscan=$(cat /proc/net/ipt_recent/portscan | wc -l)
drop=`iptables -L -n | grep -e "^DROP.*" | wc -l`
static=`iptables -L -n | grep -v Chain | grep -v -e "target.*prot.*opt.*source.*destination" | grep -v -e "^$" | wc -l`
static=`echo "${static}-${drop}" | bc`

echo "iptrulesnumstatic.value ${static}"
echo "iptrulesnumdrop.value ${drop}"
echo "iptrulesnumpscan.value ${pscan}"
 
OK eine dumme Frage, nach der Anleitung von Huschi: Portscan-Honeypot mit iptables - huschi.net wird ja nur ein Port überwacht...jetzt will ich aber noch weitere Ports überwachen, also hab ich das Script so abgewandelt...:

Code:
#!/bin/sh

HP_IPT='/sbin/iptables'
HP_Time=3600

$HP_IPT -N honeypot
$HP_IPT -A INPUT -s ! 127.0.0.1 -j honeypot
$HP_IPT -A honeypot -m recent --update --seconds $HP_Time --name portscan -j DROP

$HP_IPT -A honeypot -p tcp -m tcp --dport 21 -m recent --name portscan --set -j LOG --log-prefix "IPTABLES -- HONEYPOT -- P 21 " --log-level 6 --log-ip-options
$HP_IPT -A honeypot -p tcp -m tcp --dport 21 -m recent --name portscan --set -j DROP

$HP_IPT -A honeypot -p tcp -m tcp --dport 22 -m recent --name portscan --set -j LOG --log-prefix "IPTABLES -- HONEYPOT -- P 22 " --log-level 6 --log-ip-options
$HP_IPT -A honeypot -p tcp -m tcp --dport 22 -m recent --name portscan --set -j DROP

$HP_IPT -A honeypot -p tcp -m tcp --dport 80 -m recent --name portscan --set -j LOG --log-prefix "IPTABLES -- HONEYPOT -- P 80 " --log-level 6 --log-ip-options
$HP_IPT -A honeypot -p tcp -m tcp --dport 80 -m recent --name portscan --set -j DROP

$HP_IPT -A honeypot -p tcp -m tcp --dport 443 -m recent --name portscan --set -j LOG --log-prefix "IPTABLES -- HONEYPOT -- P 443 " --log-level 6 --log-ip-options
$HP_IPT -A honeypot -p tcp -m tcp --dport 443 -m recent --name portscan --set -j DROP

$HP_IPT -A honeypot -j RETURN
Ist das so richtig?
 
Tja....nichts?! :)
Ausser meinem Reboot (denn was anderes funktioniert nicht mehr) steht dort nichts.

Was klappt:
Code:
#!/bin/sh

HP_IPT='/sbin/iptables'
HP_Time=3600

$HP_IPT -N honeypot
$HP_IPT -A INPUT -s ! 127.0.0.1 -j honeypot
$HP_IPT -A honeypot -m recent --update --seconds $HP_Time --name portscan -j DROP

$HP_IPT -A honeypot -p tcp -m tcp --dport 21 -m recent --name portscan --set -j LOG --log-prefix "IPTABLES -- HONEYPOT -- P 21 " --log-level 6 --log-ip-options
$HP_IPT -A honeypot -p tcp -m tcp --dport 21 -m recent --name portscan --set -j DROP

$HP_IPT -A honeypot -j RETURN

Erweitere ich es aber so:
Code:
#!/bin/sh

HP_IPT='/sbin/iptables'
HP_Time=3600

$HP_IPT -N honeypot
$HP_IPT -A INPUT -s ! 127.0.0.1 -j honeypot
$HP_IPT -A honeypot -m recent --update --seconds $HP_Time --name portscan -j DROP

$HP_IPT -A honeypot -p tcp -m tcp --dport 21 -m recent --name portscan --set -j LOG --log-prefix "IPTABLES -- HONEYPOT -- P 21 " --log-level 6 --log-ip-options
$HP_IPT -A honeypot -p tcp -m tcp --dport 21 -m recent --name portscan --set -j DROP

$HP_IPT -A honeypot -p tcp -m tcp --dport 22 -m recent --name portscan --set -j LOG --log-prefix "IPTABLES -- HONEYPOT -- P 22 " --log-level 6 --log-ip-options

[B][COLOR="Red"]HIER[/COLOR][/B]

$HP_IPT -A honeypot -p tcp -m tcp --dport 22 -m recent --name portscan --set -j DROP

$HP_IPT -A honeypot -p tcp -m tcp --dport 80 -m recent --name portscan --set -j LOG --log-prefix "IPTABLES -- HONEYPOT -- P 80 " --log-level 6 --log-ip-options
$HP_IPT -A honeypot -p tcp -m tcp --dport 80 -m recent --name portscan --set -j DROP

$HP_IPT -A honeypot -p tcp -m tcp --dport 443 -m recent --name portscan --set -j LOG --log-prefix "IPTABLES -- HONEYPOT -- P 443 " --log-level 6 --log-ip-options
$HP_IPT -A honeypot -p tcp -m tcp --dport 443 -m recent --name portscan --set -j DROP

$HP_IPT -A honeypot -j RETURN
Bricht bei "hier" der Server zusammen.

Also der Server läuft weiter bloss sperrt mich das iptables script dann aus:
Code:
IPTABLES -- HONEYPOT -- P 22IN=eth0 OUT= MAC=00:xxxxxxxxxxxx SRC=MEIN_PC_IP DST=SERVERIP LEN=40 TOS=0x00 PREC=0x00 TTL$=3954 DPT=22 WINDOW=64279 RES=0x00 ACK URGP=0
 
Last edited by a moderator:
Sehe ich das richtig?
Jemand, der bei einer beliebigigen IP Deines Servers (einzige Ausnahme: 127.0.0.1) eine SSH-Verbindung versucht wird blockiert?.
Und das Ganze gibst Du über ssh ein?
:confused::confused::confused:
 
....Whistler sieht das schon richtig, ich glaube ich hab vercheckt was Honypot genau macht.....

Hmm dann mal anders gefragt: Welche Ports sollte man sinnvollerweise damit blocken?
 
Zunächst mal die, welche man nicht braucht :D

In Huschis Beispiel ist das Telnet, weil man auf einem Server ja wohl kaum einen Telnet-Port öffnen wird.
Ein Angreifer scannt aber erstmal und hofft vielleicht doch auf einen Telnet-Zugang - das verrät ihn.

Wenn man mehrere IPs hat, kann man das noch weiter treiben. SSH und (z.B.) SMTP sind nur auf eine IP gebunden, Verbindungsversuche auf andere IPs führen zum Sperren der Quell-IP.
Lediglich Port 80, 443 oder was auch immer der Grund für die verschienenen IPs ist, bleibt offen.

Ein potientieller Spammer scannt Port 25 in einer ganzen IP-Range - und landet damit im Honeypot.

Eine weitere Steigerung gestattet das Port-Knocking. Hier wird die (temporäre) Regel, weche SSH gestattet, erst nach dem Anklopfen erzeugt - ein direkter Verbindungsversuch prallt an der Firewall ab.
 
Zunächst mal die, welche man nicht braucht :D
Und genau da liegt mein Denkfehler...danke :)

Vielleicht sollte Huschi einen solchen Hinweis noch in den Artikel mit aufnehmen ;)

... So habs auch mal auf Telnet und DNS gestellt (da ich keinen DNS nutze). Sonst noch irgendwelche Vorschläge? :)
 
Last edited by a moderator:
Ok...mit einem Rechner komm ich nicht so ganz an die Ergeibnisse von Firewire ran :)
 

Attachments

  • ptables-day.png
    ptables-day.png
    20.6 KB · Views: 212
Ich checks einfach ned, auf nem Rootserver klappts, auf nem vServer nicht, habt Ihr ne Idee?

Rootserver:

Code:
root@srvxxx:~# iptables -N honeypot
root@srvxxx:~# iptables -A INPUT -s ! 127.0.0.1 -j honeypot
root@srvxxx:~# iptables -A honeypot -m recent --update --seconds 600 --name portscan -j DROP
root@srvxxx:~# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
honeypot   0    -- !localhost            anywhere

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Chain honeypot (1 references)
target     prot opt source               destination
DROP       0    --  anywhere             anywhere            recent: UPDATE seconds: 600 name: portscan side: source

und der vServer:

Code:
root@backuppc:~# iptables -N honeypot
root@backuppc:~# iptables -A INPUT -s ! 127.0.0.1 -j honeypot
root@backuppc:~# iptables -A honeypot -m recent --update --seconds 600 --name portscan -j DROP
[B]iptables: No chain/target/match by that name[/B]
root@backuppc:~# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
honeypot   all  -- !localhost.localdomain  anywhere

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Chain honeypot (1 references)
target     prot opt source               destination

Verwunderte Grüsse
Basti
 
Ich würd mal sagen, bei deinem vServer fehlt das passende Kernelmodul. ;)

Code:
# lsmod | grep "^ipt_recent"
ipt_recent             13208  4

Edit:
Ok...mit einem Rechner komm ich nicht so ganz an die Ergeibnisse von Firewire ran :)
Was für ein Timeout für die DROP Regeln hast du denn gesetzt? Huschis 10 Minuten oder meine 8 Stunden? Das dürfte auch ein kleinen Unterschied machen, wenn mans vergleichen will. ;)
 
Last edited by a moderator:
Bestätige auf meinem Vserver funktioniert das ganze auch nicht (deswegen hab ich ja beim Testen auch zweimal den Rootserver abgeschossen...nicht dass ichs net vorher auf einem NICHTproduktivsystem testen wollte...).

Mein Timeout steht bei: 1 Stunde, wobei ich überlege ob 8 Stunden nicht mehr Sinn machen. 10 Min finde ich definitiv zuwenig.

EDIT: Wie erhöht man das iptalbes Limit...zB auf 1000?
 
Last edited by a moderator:
Back
Top