Metainformationen zur Seite
Firewall-Script
Fügt eine in der Kommandozeile übergebene IP einer permantenten Blockliste hinzu. Durch ein weiteres Script wird dann eine Chain in iptables mit den neuen Adressen gefüttert.
fügt die IP der Blockliste hinzu:
#!/usr/bin/perl my $blockfile = "/etc/firewall/blockip.txt"; my $fwscript = "/etc/firewall/firewall.fw"; my $IP = $ARGV[0]; my $CHAIN = $ARGV[1]; if ($IP eq "" || $CHAIN eq "") { print "Usage: blockip <ip to block> <BLOCKLIST|B | SILENTDROP|S>\n"; exit; } if ($IP =~ /^(\d{1,3}\.){3}\d{1,3}$/) { print "IP-Check OK\n"; } else { die "IP-Check not OK - exit\n"; } if ($CHAIN eq "BLOCKLIST" || $CHAIN eq "B" || $CHAIN eq "SILENTDROP" || $CHAIN eq "S") { print "CHAIN OK\n"; } else { die "CHAIN should be BLOCKLIST or SILENTDROP\n"; } if (! -e "$blockfile") { print "creating $blockfile."; } else { # check ob IP bereits eingetragen open(BLOCK, "$blockfile") || die("could not open file $blockfile"); while(<BLOCK>) { # Datei durchlaufen und auf IP pruefen $CHECK = $_; } close(BLOCK); } if ("1" eq "0") { # IP ist eingetragen print "IP is already blocked"; } else { # wenn nicht -> eintragen open(BLOCK,">>$blockfile") || die("could not open file $blockfile"); if ($CHAIN eq "B") { $CHAIN="BLOCKLIST"; } if ($CHAIN eq "S") { $CHAIN="SILENTDROP"; } print BLOCK "$IP:$CHAIN\n"; close(BLOCK); print "Successfully added new IP - restarting firewall"; system($fwscript) == 0 || die "could not execute $fwscript: $?" }
erzeugt den iptables-Befehl (kann dann zum Beispiel aus dem normalen Firewallscript heraus aufgerufen werden):
#!/bin/sh iptables -N BLOCKLIST iptables -A BLOCKLIST -j LOG --log-prefix "BLOCKLIST -- " iptables -A BLOCKLIST -j DROP iptables -N SILENTDROP iptables -A SILENTDROP -j DROP COUNT1=0 COUNT2=0 for LINE in `cat /etc/firewall/blockip.txt`; do IP=`echo $LINE | awk -F":" '{print $1}'` CHAIN=`echo $LINE | awk -F":" '{print $2}'` if [ $CHAIN = "BLOCKLIST" ]; then COUNT1=`echo $COUNT1+1 | bc` iptables -I INPUT -i eth0 -s $IP -j BLOCKLIST else COUNT2=`echo $COUNT2+1 | bc` iptables -I INPUT -i eth0 -s $IP -j SILENTDROP fi done logger -p info "BLOCKLIST now blocking $COUNT1 IPs" logger -p info "SILENTDROP now blocking $COUNT2 IPs"
Diskussion