Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

Navigation

Mein Blog magenbrot.net



Mail-, Web-, Domainhosting und vieles mehr durch OVTEC Völker IT.

programmierung:sonstiges:firewall-script

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

Geben Sie Ihren Kommentar ein. Wiki-Syntax ist zugelassen:
B K D O B
 
programmierung/sonstiges/firewall-script.txt · Zuletzt geändert: 16.04.2015 13:05 (Externe Bearbeitung)