Automatischer Import einer Blockliste

Frogman

Benutzer
Mitglied seit
01. Sep 2012
Beiträge
17.485
Punkte für Reaktionen
8
Punkte
414
Tja, Du schreibst nichts dazu, wohin Du sie denn eigentlich importieren willst... Um damit was zu machen?
 

Fraggle

Benutzer
Mitglied seit
15. Mrz 2009
Beiträge
493
Punkte für Reaktionen
6
Punkte
18
Oops, zur Ergänzung der automatischen Blockierung.
Man kann ja manuell IPs blocken. In diese Funktion soll die Liste importiert werden.
 

TeXniXo

Benutzer
Mitglied seit
07. Mai 2012
Beiträge
4.948
Punkte für Reaktionen
99
Punkte
134
Was erhoffst du dir eigentlich hiervon? Hast du tagtägliche "Angriffe" von außen?
Wie ist deine externe Link-Adresse (Domain, DDNS oder Quickconnect)?
 

Fraggle

Benutzer
Mitglied seit
15. Mrz 2009
Beiträge
493
Punkte für Reaktionen
6
Punkte
18
Was erhoffst du dir eigentlich hiervon?
Abwehr von Angriffen ohne 2. Verbindungsversuch um weitere Angriffe noch unattraktiver zu werden zu lassen-
Hast du tagtägliche "Angriffe" von außen?
Nein, ist auch irrelevant, es geht um die Möglichkeit und warum sollte ich es nicht nutzen? Ein tägliches oder zweitägliches Aktualisieren der Liste ist kein Problem.
Wie ist deine externe Link-Adresse (Domain, DDNS oder Quickconnect)?
Es ist ein DDNS über meinen Webhoster.
 

ruedi61

Gesperrt
Mitglied seit
01. Apr 2016
Beiträge
72
Punkte für Reaktionen
0
Punkte
6
Salü

Ja, die IP's kannst du direkt in die Autoblock Datenbank importieren.
Rich (BBCode):
sqlite3 -csv /etc/synoautoblock.db "select * from AutoBlockIP;" |  awk -F',' '{print $1}'

Anstatt 'select' machst du ein 'insert' query. Da kannst du dir mit 'wget' relativ einfach ein Script zusammenbasteln.
 

ruedi61

Gesperrt
Mitglied seit
01. Apr 2016
Beiträge
72
Punkte für Reaktionen
0
Punkte
6
Anbei kleines Beispiel, kannst du als Vorlage speichern oder deinen Wünschen anpassen :)
Ausführen als root



Es ist ein Bash Script, hab nur php gewählt, damit es farbig wird hier im Broswer...
PHP:
#!/bin/ash
#
# version 0.1
# Script import IP's from blocklist.de
# by Ruedi61, 15.11.2016
#
# DSM 6.0.3 AutoBlockIP Table:
# CREATE TABLE AutoBlockIP(IP varchar(50) PRIMARY KEY,RecordTime date NOT NULL,ExpireTime date NOT NULL,Deny boolean NOT NULL,IPStd varchr(50) NOT NULL);

# Download from www.blocklist.de
# Select Typ: {all} {ssh} {mail} {apache} {imap} {ftp} {sip} {bots} {strongips} {ircbot} {bruteforcelogin}
BLOCKLIST_TYP="bruteforcelogin"

# Delete IP after x Day's OR use 0 for permanent block
DELETE_IP_AFTER="1" 

# Show Time this Script need at the bottom; 0=no 1=yes
SHOW_TIME="0"


###############################################################################################################
# Do NOT change after here
UNIXTIME=`date +%s`
UNIXTIME_DELETE_IP=`date -d "+$DELETE_IP_AFTER days" +%s`
wget -q "https://lists.blocklist.de/lists/$BLOCKLIST_TYP.txt" -O /tmp/blocklist.txt

cat "/tmp/blocklist.txt" | while read BLOCKED_IP
do
    # Check if IP valid
    VALID_IPv4=`echo "$BLOCKED_IP" | grep -Eo "^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$" | wc -l`

    if [[ $VALID_IPv4 -eq 1 ]]; then
        # Convert IPv4 to IPv6 :)
        IPv4=`echo $BLOCKED_IP | sed 's/\./ /g'`
        IPv6=`printf "0000:0000:0000:0000:0000:FFFF:%02X%02X:%02X%02X" $IPv4`
        CHECK_IF_EXISTS=`sqlite3 /etc/synoautoblock.db "SELECT DENY FROM AutoBlockIP WHERE IP = '$BLOCKED_IP'" | wc -l`
        if [[ $CHECK_IF_EXISTS -lt 1 ]]; then
            INSERT=`sqlite3 /etc/synoautoblock.db "INSERT INTO AutoBlockIP VALUES ('$BLOCKED_IP','$UNIXTIME','$UNIXTIME_DELETE_IP','1','$IPv6')"`
            echo "IP added to Database!   -->  $BLOCKED_IP"
        else
            echo "IP already in Database! -->  $BLOCKED_IP"
        fi
    fi
done

rm /tmp/blocklist.txt

if [[ $SHOW_TIME -eq 1 ]]; then
    END=`date +%s`
    RUNTIME=$((END-UNIXTIME))
    echo "Finish after $RUNTIME Seconds"
fi
exit 0
 

Fraggle

Benutzer
Mitglied seit
15. Mrz 2009
Beiträge
493
Punkte für Reaktionen
6
Punkte
18
Super, danke. Dieses Script läßt Du dann sicher per Cronjob im gewünschten Intervall ausführen, korrekt?
 

ruedi61

Gesperrt
Mitglied seit
01. Apr 2016
Beiträge
72
Punkte für Reaktionen
0
Punkte
6
Jein, ich blockiere die IP's bereits in der Firewall/Router, nicht erst an der DS...
Aber ja, kannst es im Crontab laufen lassen.
 

Mahoessen

Benutzer
Mitglied seit
20. Jul 2016
Beiträge
964
Punkte für Reaktionen
176
Punkte
63
Hallo, das Thema ist zwar schon älter, für mich aber aktuell, da auf meiner DS sowohl Mailserver als auch der Webserver läuft, und beide öffentlich erreichbar sind.
Durch diese Liste kann man vorab schon mal eine Menge abfangen..
Nachdem ich seit geraumer Zeit mal wieder ins Log geschaut habe, steht dort vereinzelt folgende Fehlermeldung:

IP already in Database! --> 1.193.97.78
Error: table AutoBlockIP has 7 columns but 5 values were supplied
IP added to Database! --> 1.193.99.36

1. Zeile : i.O.
2. Zeile : ??
3. Zeile : i.O.

ich verstehe den Fehler aus der 2. Zeile nicht. Die Importdatei hat an der betreffenden Stelle eine normale IPV4 stehen...

hat jemand Ähnliches oder kann den Fehler deuten ??

viele Grüße

Mahoessen
 

synfor

Benutzer
Sehr erfahren
Mitglied seit
22. Dez 2017
Beiträge
8.461
Punkte für Reaktionen
1.396
Punkte
288
Zeige doch mal die angeblich fehlerhafte Zeile.
 

Mahoessen

Benutzer
Mitglied seit
20. Jul 2016
Beiträge
964
Punkte für Reaktionen
176
Punkte
63
Hi, die Zeile, die ich in #10 gezeigt hatte:

Error: table AutoBlockIP has 7 columns but 5 values were supplied

bedeutet für mich, dass in der Datenbank-Tabelle "AutoblockIP" 7 Spalten sind, aber nur 5 unterstützt werden ??

viele Grüße

Mahoessen
 

synfor

Benutzer
Sehr erfahren
Mitglied seit
22. Dez 2017
Beiträge
8.461
Punkte für Reaktionen
1.396
Punkte
288
Es geht um die Zeile der Importdatei und nicht um die im Log. Vergleiche die mit denen ohne Error.
 

Ulfhednir

Benutzer
Sehr erfahren
Mitglied seit
26. Aug 2013
Beiträge
3.246
Punkte für Reaktionen
912
Punkte
174
Die Meldung besagt, dass die Tabelle 7 Spalten hat, der vorliegende Datensatz aber nur 5 dieser Spalten bedient.
Ich tippe auf Nullwerte, die beim Importvorgang nicht berücksichtigt werden.

Beispiel
Spalte A | Spalte B | Spalte C | Spalte D | Spalte E | Spalte F | Spalte G
Wert | Wert | Wert | Wert | Wert | NULL | NULL
 

AndiHeitzer

Benutzer
Sehr erfahren
Mitglied seit
30. Jun 2015
Beiträge
3.214
Punkte für Reaktionen
503
Punkte
174
Code:
###############################################################################################################
# BLOCKLIST von 'blocklist.de' einfügen
UNIXTIME=`date +%s`
UNIXTIME_DELETE_IP=`date -d "+$DELETE_IP_AFTER days" +%s`
wget -q "https://lists.blocklist.de/lists/$BLOCKLIST_TYP.txt" -O /volume1/_WARTUNGS-SCRIPTE_/autoblock__block-list__${DSNAME}.txt

cat "/volume1/_WARTUNGS-SCRIPTE_/autoblock__block-list__${DSNAME}.txt" | while read BLOCKED_IP
do
  # Check if IP valid
  VALID_IPv4=`echo "$BLOCKED_IP" | grep -Eo "^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$" | wc -l`
 
  if [[ ${VALID_IPv4} -eq 1 ]]; then
    # Convert IPv4 to IPv6 :)
    IPv4=`echo $BLOCKED_IP | sed 's/\./ /g'`
    IPv6=`printf "0000:0000:0000:0000:0000:FFFF:%02X%02X:%02X%02X" $IPv4`
    CHECK_IF_EXISTS=`sqlite3 /etc/synoautoblock.db "SELECT DENY FROM AutoBlockIP WHERE IP = '$BLOCKED_IP'" | wc -l`
    if [[ ${CHECK_IF_EXISTS} -lt 1 ]]; then
      INSERT=`sqlite3 /etc/synoautoblock.db "INSERT INTO AutoBlockIP VALUES ('$BLOCKED_IP','$UNIXTIME','$UNIXTIME_DELETE_IP','1','$IPv6','$TYPE','$META')"`
      echo "IP added to Database as deny!   -->  $BLOCKED_IP"
    else
      echo "IP already in Database as deny! -->  $BLOCKED_IP"
    fi
  fi
done

if [[ ${SHOW_TIME} -eq 1 ]]; then
  END=`date +%s`
  RUNTIME=$((END-UNIXTIME))
  echo "Finish after $RUNTIME Seconds"
fi
 

Mahoessen

Benutzer
Mitglied seit
20. Jul 2016
Beiträge
964
Punkte für Reaktionen
176
Punkte
63
@AndiHeitzer

Hi, danke !!!, das Script läuft sauber durch !!

Gruß ausm Ruhrpott

Mahoessen
 
  • Like
Reaktionen: AndiHeitzer

Mahoessen

Benutzer
Mitglied seit
20. Jul 2016
Beiträge
964
Punkte für Reaktionen
176
Punkte
63
Hi, leider habe ich mich etwas zu früh gefreut...
output.log vom script:
Bildschirmfoto 2020-10-26 um 21.47.19.png

und hier kommt nichts an...
Bildschirmfoto 2020-10-26 um 21.47.50.png

ausgeführt wird das script als root, manueller Import funktioniert ....
 

synfor

Benutzer
Sehr erfahren
Mitglied seit
22. Dez 2017
Beiträge
8.461
Punkte für Reaktionen
1.396
Punkte
288
Die Meldung besagt, dass die Tabelle 7 Spalten hat, der vorliegende Datensatz aber nur 5 dieser Spalten bedient. Ich tippe auf Nullwerte, die beim Importvorgang nicht berücksichtigt werden.
Warum gab es dann nicht generell eine Fehlermeldung?
 

Mahoessen

Benutzer
Mitglied seit
20. Jul 2016
Beiträge
964
Punkte für Reaktionen
176
Punkte
63
Hallo, ich bin einen Schritt weiter...
nach dem Import über das script sind die Einträge alle in der /etc/synoautoblock.db enthalten, DSM zeigt die IPs unter Freigabe-/Blockierungsliste nicht an. Ausprobiert habe ich es indem ich die .db gelöscht habe, die Listen im DS waren leer, dann der autom. Import via Script. Danach war die .db wieder da, inkl. Inhalt und die Liste im DSM ist immer noch leer.
=> funktioniert also, wird aber nicht richtig angezeigt...
 

lueddich

Benutzer
Mitglied seit
10. Dez 2012
Beiträge
52
Punkte für Reaktionen
8
Punkte
8
Moin zusammen!

ich habe das Skript bei mir implementiert und ehrlich - geil! Danke an Ruedi61 und AndieHeitzer!

Man muss es sich aktuell nur "zusammenkopieren", daher hier einmal in Gänze:

Bash:
#!/bin/ash
#
# version 0.1
# Script import IP's from blocklist.de
# by Ruedi61, 15.11.2016
#
# DSM 6.0.3 AutoBlockIP Table:
# CREATE TABLE AutoBlockIP(IP varchar(50) PRIMARY KEY,RecordTime date NOT NULL,ExpireTime date NOT NULL,Deny boolean NOT NULL,IPStd varchr(50) NOT NULL);

# Download from www.blocklist.de
# Select Typ: {all} {ssh} {mail} {apache} {imap} {ftp} {sip} {bots} {strongips} {ircbot} {bruteforcelogin}
BLOCKLIST_TYP="bruteforcelogin"

# Delete IP after x Day's OR use 0 for permanent block
DELETE_IP_AFTER="1"

# Show Time this Script need at the bottom; 0=no 1=yes
SHOW_TIME="0"


###############################################################################################################
# Do NOT change after here
UNIXTIME=`date +%s`
UNIXTIME_DELETE_IP=`date -d "+$DELETE_IP_AFTER days" +%s`
wget -q "https://lists.blocklist.de/lists/$BLOCKLIST_TYP.txt" -O /volume1/_WARTUNGS-SCRIPTE_/autoblock__block-list__${DSNAME}.txt

cat "/volume1/_WARTUNGS-SCRIPTE_/autoblock__block-list__${DSNAME}.txt" | while read BLOCKED_IP
do
  # Check if IP valid
  VALID_IPv4=`echo "$BLOCKED_IP" | grep -Eo "^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$" | wc -l`
 
  if [[ ${VALID_IPv4} -eq 1 ]]; then
    # Convert IPv4 to IPv6 :)
    IPv4=`echo $BLOCKED_IP | sed 's/\./ /g'`
    IPv6=`printf "0000:0000:0000:0000:0000:FFFF:%02X%02X:%02X%02X" $IPv4`
    CHECK_IF_EXISTS=`sqlite3 /etc/synoautoblock.db "SELECT DENY FROM AutoBlockIP WHERE IP = '$BLOCKED_IP'" | wc -l`
    if [[ ${CHECK_IF_EXISTS} -lt 1 ]]; then
      INSERT=`sqlite3 /etc/synoautoblock.db "INSERT INTO AutoBlockIP VALUES ('$BLOCKED_IP','$UNIXTIME','$UNIXTIME_DELETE_IP','1','$IPv6','$TYPE','$META')"`
      echo "IP added to Database as deny!   -->  $BLOCKED_IP"
    else
      echo "IP already in Database as deny! -->  $BLOCKED_IP"
    fi
  fi
done

if [[ ${SHOW_TIME} -eq 1 ]]; then
  END=`date +%s`
  RUNTIME=$((END-UNIXTIME))
  echo "Finish after $RUNTIME Seconds"
fi

Viele Grüße,
Jan
 


 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat