Fastd peer IP blacklisting am server/fastd.conf ?

unter der annahme jemand hat einen validen fastd pubkey am server hinterlegt und dieser jemand versuht sich via einer ip xy mit dem server zu verbinden …

konkret : jemand versucht sich aus dem freifunknetz von uns (ffrl exit ip) mit einem fstd server von uns zu verbinden, so ein henne - ei ding – oder freifunk durch freifunk … macht keinen sinn

jemand sowas schon geschickt eingebaut … bspw. in die fastd.conf oder ähnliches … denke da über on connect und $PEER_ADDRESS gegen eine blacklist zu checken
danke für Hinweise

iptables -A INPUT -p udp --dport {fastD-port} -s {ffrl-exit-ip} -j DROP

warum so kompliziert?

1 „Gefällt mir“

ja dacht ich mir auch, aber zu sehen welcher key das versucht is schon auch spannend, hilft beim debuggen vor ort

Ich hab das mal irgendwo gesehen und bei mir so eingebaut:

on verify "fastd-blacklist.sh $PEER_KEY";   #alle keys die nicht auf der blacklist stehen sind erlaubt
#on verify "true";                          #alle keys sind erlaubt (blacklist wird nicht genutzt)
#on verify "false";                         #nur eingetragene keys sind erlaubt

und die fastd-blacklist.sh sieht so aus:

#!/bin/bash
PEER_KEY=$1

if /bin/grep -Fq $PEER_KEY /etc/fastd/fastd-blacklist.json; then
   exit 1
else
   exit 0
fi

und noch die fastd-blacklist.json

{
  "peers": 
  [
    {
      "pubkey": "78a61042764d1f3dae43c48a0978eaf6f8768fd1b263e27bf7299f6d47f66ac0",
      "comment": "dummy eintrag"
    },
    {
      "pubkey": "418cbe17f3214abfaba7f23d67ea21ac0d521b19d0abc532e139bb7904187501",
      "comment": "dummy eintrag"
    }
  ]
}
1 „Gefällt mir“

@steneu … und der exitwert != 0 im onverify führt dann dazu das das einloggen nicht klappt ?

Das gezeigte Script kann nur 0 oder 1 zurückliefern.
Aber Rückgabewert von „false“ sollten meiner Ansicht nach auch funktionieren.
Ein nicht vorhandenes Script oder eine nicht vorhandene blacklist-Datei führt ebenso zu „niemand kommt herein.“

1 „Gefällt mir“

Lassen sich auch alle Keys blacklisten, die in einem peers Ordner liegen?

Ich möchte auf einem GW nur Verbindungen von Knoten erlauben die nicht im Netz registriert sind.

Du rufst ein Shellscript auf.
Und wenn das mit einem Code ungleich 0 zurückkommt, dann fliegt der Client beim Fastd kommentarlos raus.

Sprich: Was Du da mit der shellscript machst, das sei Dir überlassen. Entweder lustige grep-Einzeiler, oder eben was python oder awk so hergeben.

1 „Gefällt mir“

Jo wie das hier funktioniert hatte ich gesehen. Das Problem dabei ist ich müsste erstmal 1200 Keys in die Json bringen.

Daher die Frage, ob man mit so einfach Blacklisten kann wie man peers inkludiert.

Es muss doch kein json sein, eine beliebige Ascii-Liste reicht auch.
Du kannst ja durchaus einen find/exec/grep machen.

in der Datei dann eine Liste der fastd keys (mit beliebigem Text dahinter, z.B. als Kommentar)

2 „Gefällt mir“

@anon68922371
Falls es nicht passen sollte, dann beschreibe mal, was Du da GENAU hast. Also ein Verzeichnis. Oder eine Gruppe von Dateien, die zu einem Wildcard passen o.ä.

habe das mal in ein update script gepackt, das man auf einem gateway einfach ausführen kann:

FASTDPATH=/etc/fastd/ffnord-mvpn

cat >>/etc/fastd/fastd-blacklist.sh << EOF
#!/bin/bash
  PEER_KEY=$1
  if /bin/grep -Fq $PEER_KEY /etc/fastd/fastd-blacklist.json; then
       exit 1
  else
       exit 0
  fi
EOF

chmod +x /etc/fastd/fastd-blacklist.sh
rm /etc/fastd/fastd-blacklist.json
cat >>/etc/fastd/fastd-blacklist.json<< EOF
{
  "peers": 
  [
    {
      "pubkey": "78a61042764d1f3dae43c48a0978eaf6f8768fd1b263e27bf7299f6d47f66ac0",
      "comment": "dummy eintrag"
    },
    {
      "pubkey": "78a61042764d1f3dae43c48a0978eaf6f8768fd1b263e27bf7299f6d47f66ac0",
      "comment": "dummy eintrag"
    },
   
  ]
}
EOF

sed -i 's~on verify "true";~on verify "/etc/fastd/fastd-blacklist.sh $PEER_KEY";~g' $FASTDPATH/fastd.conf

service fastd stop
service fastd start

Das ist ja das übliche Verfahren. Aber warum eigentlich als json?
(Das frage ich mich schon seit Jahren…)
Wenn man da eh nur „blöde“ durchgrept zeilenweise, warum dann nicht einfach nur CSV oder html…
Also im Ernst: aus welcher Toolchain bekommt man das so als json, dass man das dann per Cut&Paste da hineinfallen lassen könnte?

1 „Gefällt mir“

hallo,

wenn du ein script hast das dir neigbours aus einer alfred.json rausparst als bsp

1 „Gefällt mir“