IPTables
Loggen von neuen ausgehenden Verbindungen
iptables -t filter -A OUTPUT -m state --state NEW -j LOG --log-prefix "outgoing " --log-level 6
Oder mit ulog (hierfür muss ulogd installiert sein):
iptables -t filter -A OUTPUT -m state --state NEW -j ULOG --ulog-prefix outgoing --ulog-nlgroup 1 --ulog-qthreshold 2
Eventuell ist es sinnvoll, noch die Schnittstelle mit "-i iface" anzugeben (iface könnte bspw. eth0, ppp0 o.ä. sein).
Loggen von eingehenden Verbindungen auf bestimmten Ports
iptables -t filter -A INPUT -m state --state NEW -i eth0 -p tcp -m multiport --dports 80,443 -j LOG --log-prefix "Webserver" --log-level notice
Log Levels
Mit dem Parameter "--log-level" gibt man den "Log Level", wahlweise als Nummer oder als Text, wie folgt an:
Nummer | Text |
---|---|
0 | emerg |
1 | alert |
2 | crit |
3 | error |
4 | warning |
5 | notice |
6 | info |
syslog
"-j LOG" schreibt alle Ereignisse in das Systemlog (/var/log/syslog). So ein Eintrag sieht zum Beispiel so aus:
Aug 19 20:18:38 TravelMateB115 kernel: [ 5435.963994] MAILSRV IN IN=lo OUT= MAC=00:00:00:00:00:00:00:00:00:00:00:00:08:00 SRC=127.0.0.1 DST=127.0.0.1 LEN=44 TOS=0x00 PREC=0x00 TTL=58 ID=20464 PROTO=TCP SPT=39409 DPT=80 WINDOW=1024 RES=0x00 SYN URGP=0
Leider ist die Position der hinteren Attribute (PROTO, DPT, WINDOW usw.) nicht konstant, was das Parsen mittels awk erschwert. Die Position von "SRC" sollte aber konstant sein. Folgendes Script liest Logs von iptables und macht eine DNS-Abfrage auf die IP-Adrese, wobei die Adressen "127.0.0.1"" und "192.168.1.253" ausgenommen werden:
#!/bin/sh for host in $(awk '$12 != "SRC=127.0.0.1" && $12 != "SRC=192.168.1.253" {print $12}' $1 | cut -d'=' -f2); do echo $host $(host -t A $host); done
Wird dieses Script bspw. unter "show_ipt_log" abgespeichert und ausführbar gemacht, so ruft man es wie folgt auf (wenn man als Logpräfix "Webserver" gewählt hat):
grep "Webserver" /var/log/syslog | show_ipt_log
Das ergibt dann eine Ausgabe in etwa wie folgt:
192.168.1.123 123.1.168.192.in-addr.arpa domain name pointer somehost.greatsoft.local.
Generell ist zu empfehlen, dem Log Daemon mitzuteilen, dass man die Logs von iptables gerne in einer eigenen Datei hätte. Dazu trägt man in der Datei /etc/rsyslog.conf in der Sektion "#### RULES ####" folgendes ein:
:msg, contains, "Webserver" -/var/log/ipt_websrv.log
Die Einstellungen werden nach dem Neustart des Daemons (service rsyslog restart) übernommen.
Diese Datei könnte nun sehr groß werden, daher ist es sehr zu empfehlen, die Log Rotation einzustellen. Dazu erstellt man im Verzeichnis /etc/logrotate.d bspw. eine Datei "ipt_websrv" und schreibt dort folgenden Text hinein:
/var/log/ipt_websrv.log { rotate 12 monthly compress missingok notifempty create 644 root root }
Blockieren eines Prozesses eines bestimmten Benutzers
iptables -A OUTPUT -m owner --uid-owner X -m state --state NEW -j REJECT