geoblock.ini als lokale Config von Git ausnehmen, geoblock.ini.example als Vorlage
This commit is contained in:
@@ -1,2 +1,3 @@
|
|||||||
__pycache__/
|
__pycache__/
|
||||||
*.pyc
|
*.pyc
|
||||||
|
geoblock.ini
|
||||||
|
|||||||
@@ -14,7 +14,8 @@ und droppt Pakete bereits auf Netzwerk-Ebene.
|
|||||||
| Datei | Zweck |
|
| Datei | Zweck |
|
||||||
|---|---|
|
|---|---|
|
||||||
| `geoblock.py` | Hauptscript: laedt Laender-IPs, setzt/entfernt ipset+iptables-Regeln |
|
| `geoblock.py` | Hauptscript: laedt Laender-IPs, setzt/entfernt ipset+iptables-Regeln |
|
||||||
| `geoblock.ini` | Konfiguration (Laenderliste, Chain, Logging, ...) |
|
| `geoblock.ini.example` | Beispiel-Konfiguration (Vorlage im Repo, siehe unten) |
|
||||||
|
| `geoblock.ini` | Eure eigene, lokale Konfiguration (Laenderliste, Chain, Logging, ...) — **nicht** im Repo/Git, siehe unten |
|
||||||
| `geoblock.service` | systemd-Unit, fuehrt `--apply` aus |
|
| `geoblock.service` | systemd-Unit, fuehrt `--apply` aus |
|
||||||
| `geoblock.timer` | systemd-Timer: beim Booten + einmal taeglich |
|
| `geoblock.timer` | systemd-Timer: beim Booten + einmal taeglich |
|
||||||
| `install_geoblock.sh` | Installer: kopiert alles nach `/opt/geoblock`, richtet Timer ein (Testserver optional, siehe unten) |
|
| `install_geoblock.sh` | Installer: kopiert alles nach `/opt/geoblock`, richtet Timer ein (Testserver optional, siehe unten) |
|
||||||
@@ -34,11 +35,23 @@ sudo ./install_geoblock.sh
|
|||||||
```
|
```
|
||||||
|
|
||||||
Das:
|
Das:
|
||||||
- installiert `geoblock.py` + `geoblock.ini` nach `/opt/geoblock/`
|
- installiert `geoblock.py` + `geoblock.ini.example` nach `/opt/geoblock/`
|
||||||
(bestehende `.ini` wird NICHT ueberschrieben, neue landet als `.example`)
|
und erzeugt daraus, falls noch keine vorhanden ist, `geoblock.ini`
|
||||||
|
(bestehende `geoblock.ini` wird NIE ueberschrieben)
|
||||||
- legt `/var/log/geoblock/` an
|
- legt `/var/log/geoblock/` an
|
||||||
- installiert + aktiviert `geoblock.timer` (`systemctl enable --now`)
|
- installiert + aktiviert `geoblock.timer` (`systemctl enable --now`)
|
||||||
|
|
||||||
|
**Wichtig:** `geoblock.ini` ist eure lokale, echte Konfiguration (Laender,
|
||||||
|
Ports, ggf. Proxy-Zugangsdaten) — die Datei steht deshalb in `.gitignore`
|
||||||
|
und wird NIE ins Repo committed. Vorlage/Referenz ist `geoblock.ini.example`
|
||||||
|
(die landet im Repo und wird bei jeder Installation frisch mitkopiert).
|
||||||
|
Wer das Script direkt aus dem Repo-Verzeichnis heraus nutzt (ohne
|
||||||
|
`install_geoblock.sh`), muss die `.ini` einmal selbst anlegen:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cp geoblock.ini.example geoblock.ini
|
||||||
|
```
|
||||||
|
|
||||||
**Der Test-Webserver wird standardmaessig NICHT installiert.** Wer ihn
|
**Der Test-Webserver wird standardmaessig NICHT installiert.** Wer ihn
|
||||||
braucht (siehe Abschnitt "Verbindungstest" unten), haengt die Option
|
braucht (siehe Abschnitt "Verbindungstest" unten), haengt die Option
|
||||||
`--with-testserver` an:
|
`--with-testserver` an:
|
||||||
|
|||||||
@@ -0,0 +1,80 @@
|
|||||||
|
; Beispiel-Konfiguration fuer geoblock.py
|
||||||
|
;
|
||||||
|
; countries: Komma-getrennte ISO-3166-1-alpha-2-Laendercodes (klein- oder
|
||||||
|
; grossgeschrieben, egal), die geblockt werden sollen.
|
||||||
|
; Liste der Codes: https://www.ipdeny.com/ipblocks/
|
||||||
|
;
|
||||||
|
; chain: iptables-Chain, in die die DROP-Regel eingehaengt wird.
|
||||||
|
; INPUT = Verbindungen ZU diesem Host (Standard-Anwendungsfall).
|
||||||
|
;
|
||||||
|
; interface: optional, z.B. eth0 -- nur Traffic auf diesem Interface pruefen.
|
||||||
|
; Leer lassen = alle Interfaces.
|
||||||
|
;
|
||||||
|
; log: true/false -- wenn true, wird vor dem DROP ein iptables LOG-
|
||||||
|
; Eintrag geschrieben (dmesg / /var/log/kern.log), praefixed
|
||||||
|
; mit log_prefix. Das ist NICHT dasselbe wie log_file (siehe unten)!
|
||||||
|
;
|
||||||
|
; ipset_name: Name des ipset-Sets, das alle IP-Bereiche der Laender enthaelt.
|
||||||
|
;
|
||||||
|
; log_file: optional Pfad zu einer eigenen Log-Datei des Scripts selbst
|
||||||
|
; (zusaetzlich zu stderr/systemd-Journal). Bei jedem Lauf wird
|
||||||
|
; eine Zeile angehaengt, u.a. eine maschinenlesbare
|
||||||
|
; "RESULT status=OK/ERROR ..."-Zeile. Genau diese wertet das
|
||||||
|
; mitgelieferte checkmk-Plugin (geoblock_checkmk) aus.
|
||||||
|
; Leer lassen = keine Datei-Logs.
|
||||||
|
; Verzeichnis muss existieren und fuer root beschreibbar sein
|
||||||
|
; (das Installer-Script legt es automatisch an).
|
||||||
|
;
|
||||||
|
; ports: optional, Komma-getrennte Liste von Ports/Portbereichen, die
|
||||||
|
; geblockt werden sollen, z.B. "80,443" oder "8000:9000" (Bereich)
|
||||||
|
; oder gemischt "22,80,443,8000:8010".
|
||||||
|
; LEER LASSEN (Standard) = alle Ports/Protokolle werden fuer die
|
||||||
|
; gelisteten Laender geblockt (klassisches Geoblocking).
|
||||||
|
; GESETZT = nur diese Ports werden geblockt, der Rest bleibt fuer
|
||||||
|
; alle Laender offen. Praktisch, um NICHT gleich den ganzen Host
|
||||||
|
; (inkl. z.B. SSH-Port 22) fuer ein Land zu sperren, sondern nur
|
||||||
|
; eine einzelne Anwendung/einen Testport (z.B. den mitgelieferten
|
||||||
|
; Testserver auf 8899) -- schuetzt beim Testen davor, sich selbst
|
||||||
|
; auszusperren.
|
||||||
|
;
|
||||||
|
; protocol: nur relevant wenn "ports" gesetzt ist. tcp (Standard), udp,
|
||||||
|
; oder "tcp,udp" fuer beides. Fuer die meisten Web-/App-Ports
|
||||||
|
; reicht "tcp".
|
||||||
|
;
|
||||||
|
; proxy: optional, HTTP(S)-Proxy-URL, ueber den das Script ipdeny.com
|
||||||
|
; erreicht -- fuer Hosts, die zwar aus dem Internet erreichbar
|
||||||
|
; sind (z.B. hinter Reverse-Proxy/Firewall), selbst aber KEINE
|
||||||
|
; direkte ausgehende Internetverbindung haben.
|
||||||
|
; Format: http://host:port oder mit Auth http://user:pass@host:port
|
||||||
|
; Wird fuer http UND https genutzt (ipdeny liefert per https aus).
|
||||||
|
; Leer lassen (Standard) = direkte Verbindung, kein Proxy.
|
||||||
|
; Beispiel: proxy = http://10.0.0.5:3128
|
||||||
|
|
||||||
|
[geoblock]
|
||||||
|
countries = RU, CN, KP, IR
|
||||||
|
chain = INPUT
|
||||||
|
interface =
|
||||||
|
log = true
|
||||||
|
log_prefix = GEOBLOCK-DROP:
|
||||||
|
ipset_name = geoblock
|
||||||
|
log_file = /var/log/geoblock/geoblock.log
|
||||||
|
; Beispiel: leer = klassisches Geoblocking (alle Ports). Zum sicheren Testen
|
||||||
|
; z.B. "8899" setzen (nur der Testserver wird geblockt, SSH bleibt offen).
|
||||||
|
ports =
|
||||||
|
protocol = tcp
|
||||||
|
; Leer lassen, ausser der Host hat keine direkte Internetverbindung.
|
||||||
|
proxy =
|
||||||
|
|
||||||
|
; --- Test-Webserver (geoblock_testserver.py) --------------------------
|
||||||
|
; Kleiner HTTP-Server ohne Abhaengigkeiten, um Geoblocking-Regeln von aussen
|
||||||
|
; zu testen (z.B. vom Handy im Mobilfunknetz oder per VPN aus einem anderen
|
||||||
|
; Land). Siehe README.md Abschnitt "Verbindungstest".
|
||||||
|
;
|
||||||
|
; port: TCP-Port, auf dem der Testserver lauscht.
|
||||||
|
; bind: Bind-Adresse, 0.0.0.0 = alle IPv4-Interfaces (:: fuer IPv6).
|
||||||
|
; log_file: Pfad zur Request-Log-Datei (Zeit, Client-IP, Pfad, User-Agent
|
||||||
|
; pro Zeile). Leer lassen = keine Datei-Logs (nur stderr/Journal).
|
||||||
|
[testserver]
|
||||||
|
port = 8899
|
||||||
|
bind = 0.0.0.0
|
||||||
|
log_file = /var/log/geoblock/testserver.log
|
||||||
+5
-5
@@ -24,7 +24,7 @@
|
|||||||
#
|
#
|
||||||
# Benoetigt im selben Verzeichnis:
|
# Benoetigt im selben Verzeichnis:
|
||||||
# geoblock.py
|
# geoblock.py
|
||||||
# geoblock.ini
|
# geoblock.ini.example
|
||||||
# geoblock.service
|
# geoblock.service
|
||||||
# geoblock.timer
|
# geoblock.timer
|
||||||
# (nur bei --with-testserver:)
|
# (nur bei --with-testserver:)
|
||||||
@@ -61,7 +61,7 @@ done
|
|||||||
INSTALL_DIR="${INSTALL_DIR:-/opt/geoblock}"
|
INSTALL_DIR="${INSTALL_DIR:-/opt/geoblock}"
|
||||||
LOG_DIR="/var/log/geoblock"
|
LOG_DIR="/var/log/geoblock"
|
||||||
|
|
||||||
REQUIRED_FILES=(geoblock.py geoblock.ini geoblock.service geoblock.timer)
|
REQUIRED_FILES=(geoblock.py geoblock.ini.example geoblock.service geoblock.timer)
|
||||||
if [[ "$WITH_TESTSERVER" -eq 1 ]]; then
|
if [[ "$WITH_TESTSERVER" -eq 1 ]]; then
|
||||||
REQUIRED_FILES+=(geoblock_testserver.py geoblock-testserver.service)
|
REQUIRED_FILES+=(geoblock_testserver.py geoblock-testserver.service)
|
||||||
fi
|
fi
|
||||||
@@ -85,12 +85,12 @@ mkdir -p "$INSTALL_DIR"
|
|||||||
cp "$SRC_DIR/geoblock.py" "$INSTALL_DIR/geoblock.py"
|
cp "$SRC_DIR/geoblock.py" "$INSTALL_DIR/geoblock.py"
|
||||||
chmod 755 "$INSTALL_DIR/geoblock.py"
|
chmod 755 "$INSTALL_DIR/geoblock.py"
|
||||||
|
|
||||||
|
cp "$SRC_DIR/geoblock.ini.example" "$INSTALL_DIR/geoblock.ini.example"
|
||||||
if [[ -f "$INSTALL_DIR/geoblock.ini" ]]; then
|
if [[ -f "$INSTALL_DIR/geoblock.ini" ]]; then
|
||||||
echo "==> Bestehende $INSTALL_DIR/geoblock.ini gefunden - wird NICHT ueberschrieben."
|
echo "==> Bestehende $INSTALL_DIR/geoblock.ini gefunden - wird NICHT ueberschrieben."
|
||||||
cp "$SRC_DIR/geoblock.ini" "$INSTALL_DIR/geoblock.ini.example"
|
echo " Aktuelle Beispiel-Config liegt unter $INSTALL_DIR/geoblock.ini.example (zum Vergleich)."
|
||||||
echo " Neue Beispiel-Config liegt unter $INSTALL_DIR/geoblock.ini.example (zum Vergleich)."
|
|
||||||
else
|
else
|
||||||
cp "$SRC_DIR/geoblock.ini" "$INSTALL_DIR/geoblock.ini"
|
cp "$SRC_DIR/geoblock.ini.example" "$INSTALL_DIR/geoblock.ini"
|
||||||
echo " -> bitte $INSTALL_DIR/geoblock.ini pruefen/anpassen (Laenderliste!)."
|
echo " -> bitte $INSTALL_DIR/geoblock.ini pruefen/anpassen (Laenderliste!)."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user