Ibland kan det vara användbart att logga alla anslutningar till och från en server – till exempel om du behöver ett underlag för att skriva brandväggsregler eller för felsökning av en felkonfigurerad brandvägg.
Om du kör följande kommando kommer alla regler i brandväggen att rensas och alla anslutningar kommer att loggas till /var/log/messages
:
iptables -F
iptables -I INPUT -m state --state NEW -j LOG --log-level 4 --log-prefix "INCOMING: "
iptables -I OUTPUT -m state --state NEW -j LOG --log-level 4 --log-prefix "OUTGOING: "
Då varje anslutning loggas på en egen rad är detta väldigt oöverskådligt. På en server med mycket trafik kan det bli väldigt många rader i loggfilen.
Med följande korta och enkla one-liner sammanfattas alla anslutningar som finns loggade i /var/log/messages
. Varje host/port-kombination hamnar på en egen rad och antalet anslutningar räknas. Tänk på att /var/log/messages
kan loggroteras.
cat /var/log/messages | grep "IN=" | awk -F'[= ]+' '{for (i=1;i < NF;i++) { if ($i=="DST") dst=$(i+1);if ($i=="SRC") src=$(i+1); if ($i=="PROTO") proto=$(i+1); if ($i=="DPT") dpt=$(i+1); if($i=="INCOMING:"||$i=="OUTGOING:") dir=$i} printf "%s %-20s %-20s %-15s %s \n",dir," DST:"dst," SRC:"src," PROTO:"proto," DPT:"dpt}' |sort | uniq -c
Samma metod kan användas för att logga alla blockerade anslutningar, något som kan vara väldigt användbart vid felsökning. Nedan är ett komplett exempel på ett brandväggsskript som bara tillåter inkommande SSH-anslutningar från 10.10.10.10
och blockerar samt loggar alla andra anslutningar:
#!/bin/bash
I=/sbin/iptables
$I -F
$I -A OUTPUT -s 0/0 -m state --state RELATED,ESTABLISHED -j ACCEPT
#SSH in
$I -A INPUT -p TCP --dport 22 -s 10.10.10.10 -j ACCEPT
$I -A INPUT -m state --state NEW -j LOG --log-level 4 --log-prefix "INCOMING: "
$I -A OUTPUT -m state --state NEW -j LOG --log-level 4 --log-prefix "OUTGOING: "
$I -A INPUT -j DROP
$I -A OUTPUT -j DROP
exit 0
Kontakta oss gärna för mer information. Vi hjälper dig att komma fram till den bästa lösningen för dina behov.