Intrusion Detection

Version: 1.0
Getestet: CentOS 5

Unter Linux gibt es verschiedene Möglichkeiten, ein hostbasiertes Intrusion Detection System (IDS) zu installieren. Dies Variante kommt mit Boardmitteln aus, dh. es werden lediglich ein paar Iptables Regeln gesetzt. Das Paket Iptables ist bei jeder Distribution dabei. Es werden definierte Ports sowohl auf Connects über TCP als auch über UDP überwacht. Wird versucht, einen Connect auf einem der überwachten Ports herzustellen, so wird die entsprechende IP für einen bestimmten Zeitraum komplett geblockt und ein Eintrag in ein gesondertes Logfile geschrieben.

Beim Arbeiten mit Iptables gilt wie immer: Vorsicht!

Installation

Separates Logfile anlegen
touch /var/log/firewall
Syslog anpassen (anschließend Syslog neustarten)

/etc/syslog.conf

kern.warn                                               /var/log/firewall
Iptables Rules
#!/bin/sh
# Basic IDS via IPTABLES Rules
# SRC IP will be locked out for some time (LOCKOUT_TIME) [seconds]

IPTABLES_BIN='/sbin/iptables'
LOCKOUT_TIME=60

### Chain IDS ###

$IPTABLES_BIN -N IDS
$IPTABLES_BIN -A IDS -m recent --update --seconds $LOCKOUT_TIME --name portscan -j DROP

### Trusted Networks/Hosts ###

$IPTABLES_BIN -A INPUT -s 127.0.0.1 -j ACCEPT
$IPTABLES_BIN -A INPUT -s x.x.x.x -j ACCEPT
$IPTABLES_BIN -A INPUT -s y.y.y.y/16 -j ACCEPT
$IPTABLES_BIN -A INPUT -s z.z.z.z/24 -j ACCEPT

### All Other ###

$IPTABLES_BIN -A INPUT -j IDS

### TCP Rules ###

$IPTABLES_BIN -A IDS -p tcp -m multiport --dport 1,7,9,11,15,21,23,25,70,79,109,110,111 -m recent --name portscan --set -j LOG --log-prefix "Portscan " --log-level 4 --log-ip-options
$IPTABLES_BIN -A IDS -p tcp -m multiport --dport 1,7,9,11,15,21,23,25,70,79,109,110,111 -m recent --name portscan --set -j DROP
$IPTABLES_BIN -A IDS -p tcp -m multiport --dport 119,138,143,512,513,514,515,540,635,1080 -m recent --name portscan --set -j LOG --log-prefix "Portscan " --log-level 4 --log-ip-options
$IPTABLES_BIN -A IDS -p tcp -m multiport --dport 119,138,143,512,513,514,515,540,635,1080 -m recent --name portscan --set -j DROP
$IPTABLES_BIN -A IDS -p tcp -m multiport --dport 1524,2000,2001,4000,4001,5742,6000,6001,6667,12345,12346 -m recent --name portscan --set -j LOG --log-prefix "Portscan " --log-level 4 --log-ip-options
$IPTABLES_BIN -A IDS -p tcp -m multiport --dport 1524,2000,2001,4000,4001,5742,6000,6001,6667,12345,12346 -m recent --name portscan --set -j DROP
$IPTABLES_BIN -A IDS -p tcp -m multiport --dport 20034,27665,30303,32771,32772,32773,32774,31337,40421,40425,49724,54320 -m recent --name portscan --set -j LOG --log-prefix "Portscan " --log-level 4 --log-ip-options
$IPTABLES_BIN -A IDS -p tcp -m multiport --dport 20034,27665,30303,32771,32772,32773,32774,31337,40421,40425,49724,54320 -m recent --name portscan --set -j DROP

### UDP Rules ###

$IPTABLES_BIN -A IDS -p udp -m multiport --dport 1,7,9,66,67,68,69,111,137,161 -m recent --name portscan --set -j LOG --log-prefix "Portscan " --log-level 4 --log-ip-options
$IPTABLES_BIN -A IDS -p udp -m multiport --dport 1,7,9,66,67,68,69,111,137,161 -m recent --name portscan --set -j DROP
$IPTABLES_BIN -A IDS -p udp -m multiport --dport 162,474,513,517,518,635,640,641,666,700,2049 -m recent --name portscan --set -j LOG --log-prefix "Portscan " --log-level 4 --log-ip-options
$IPTABLES_BIN -A IDS -p udp -m multiport --dport 162,474,513,517,518,635,640,641,666,700,2049 -m recent --name portscan --set -j DROP
$IPTABLES_BIN -A IDS -p udp -m multiport --dport 31335,27444,34555,32770,32771,32772,32773,32774,31337,54321 -m recent --name portscan --set -j LOG --log-prefix "Portscan " --log-level 4 --log-ip-options
$IPTABLES_BIN -A IDS -p udp -m multiport --dport 31335,27444,34555,32770,32771,32772,32773,32774,31337,54321 -m recent --name portscan --set -j DROP

### Chain IDS End ###

$IPTABLES_BIN -A IDS -j RETURN
Rules für abspeichern (erhält Rules bei Reboots)

CentOS/RHEL

/etc/init.d/iptables save

Betrieb

Recent Liste anzeigen
cat /proc/net/ipt_recent/*
Recent Liste löschen
echo clear > /proc/net/ipt_recent/*
Iptable Rules anzeigen
iptables -L
Iptable Rules löschen
iptables -F
Iptable Chains löschen
iptables -X

CC-GNU GPL | CC-by

maec.de