Den Linux-Agenten installieren
Ein Befehl installiert den Agenten, und diese Seite ist das, was darin passiert: zuerst die Nutzungsbedingungen, dann was geprüft wird, bevor etwas geschrieben wird, jede Frage und was ein Enter beantwortet, die Umgebungsvariablen und Flags eines unbeaufsichtigten Rollouts, eine Installation von Hand, und ein Host ohne systemd.
Installation
Ein Befehl, als root. Er liest die aktuelle Version aus den öffentlichen Metadaten, lädt mit Ihrem
Key den Build für Ihre Architektur, prüft ihn gegen SHA256SUMS, installiert ihn nach
/usr/local/bin/reportedip-agent und richtet danach den Host ein.
curl -fsSL https://reportedip.com/agent/install.sh | REPORTEDIP_KEY=<YOUR-KEY> sh
Der Key steht in der Umgebung, weil er zweimal gebraucht wird, einmal für den lizenzierten Download
und einmal für die Registrierung des Hosts, und zweimal einfügen ist die Art, wie ein Key in falscher
Form in einer Shell-History landet. Lassen Sie die Variable weg, dann fragt das Skript nach dem Key,
mit abgeschaltetem Echo des Terminals, damit er nicht im Scrollback stehen bleibt. Die Abfrage liest
das Terminal und nicht die Standardeingabe, denn in der Form oben ist die Standardeingabe das Skript
selbst, und ob sich dieses Terminal überhaupt öffnen lässt, ist gleichzeitig die Prüfung, ob jemand
da ist, den man fragen kann: ein Lauf aus cron, aus einer systemd-Unit oder aus einem
Automatisierungswerkzeug hat kein Terminal, wird nicht gefragt und bricht mit der Zeile ab, die die
Variable nennt. Das Skript ist bewusst POSIX-sh: es muss auf Hosts laufen, auf denen bash
nicht die Standard-Shell ist. Es bricht mit genanntem Grund und ohne Installation ab, wenn es nicht
als root läuft, wenn die Plattform nicht Linux ist, wenn die Architektur weder amd64 noch arm64 ist,
wenn weder curl noch wget existiert und wenn sha256sum fehlt.
Die beiden Abrufwege sind absichtlich getrennt. Die Versions-Metadaten werden ohne Key geholt, die lizenzierten Dateien mit Key, damit der Key nie an ein Umleitungsziel geht, das nur öffentliche Metadaten ausliefert. Aus der Prüfsummendatei wird nur die Zeile Ihrer eigenen Architektur geprüft, denn die Datei listet auch die andere.
Was install prüft, bevor es schreibt
Drei Dinge werden geprüft, bevor das erste Byte auf der Platte landet, in der Reihenfolge, in der ein
Fehler am günstigsten zu finden ist. Zuerst die Argumente, denn ein Tippfehler in einem Flag ist auf
jedem Host derselbe Fehler und hat nichts damit zu tun, was diese Maschine kann: ein kaputtes
--notify-email legte früher erst die Verzeichnisse an und wurde danach abgelehnt. Dann
der Host, ausgegeben als benannter Block, denn wer das hier startet, soll erfahren, dass der Agent
auf diesem Host nicht laufen kann, bevor er losgeschickt wird, einen Key zu suchen. Dann die Fragen
des nächsten Abschnitts. Zuletzt der Key, weil das der einzige Schritt ist, der einen
Netzzugriff kostet, und weil ein gerade eingegebener Key sofort gegen den Server gehalten werden
soll.
requirements:
ok systemd running as pid 1
ok firewall ipset and iptables found, nft as well; auto takes ipset, set backend: nftables in the config if this host's rules live in nftables
Jede Zeile trägt eine von drei Marken. ok ist erfüllt, warn fehlt und
hält den Lauf nicht auf, und STOP ist die einzige Marke, die je bedeutet, dass die
Installation hier geendet hat. Hart ist nur systemd, und es wird an
/run/systemd/system abgelesen, dem Verzeichnis, das systemd als pid 1 anlegt, und nicht
am Vorhandensein von systemctl: ein Container-Image kann das Binary tragen, ohne den
Manager je zu starten, und genau dieser Host bekam früher eine vollständige Installation, die nie
starten konnte. Ein fehlendes Firewall-Backend wird als warn gemeldet und hält nichts
auf, denn
Report-only ist eine unterstützte Betriebsart des Agenten, und die Zeile nennt das Paket, das zu
installieren ist, apt install ipset iptables oder apt install nftables. Der
Key geht an verify-key, bevor die Config geschrieben wird, und bewusst ohne
Install-ID: eine Probe darf keine Registry-Zeile für einen Host zurücklassen, der vielleicht nie
installiert wird. Nur ein 401 oder ein 403 hält den Lauf auf, und dann liegt nichts auf der Platte.
Alles andere, ein DNS-Fehler, ein Proxy, eine noch nicht geöffnete Firewall, druckt eine Zeile und
die Installation läuft weiter, denn eine Installation ohne Netz ist legitim und der Sync-Lauf
versucht es von selbst erneut. Was install.sh selbst schon vorher ablehnt, steht weiter
oben.
Was er fragt, und was ein Enter beantwortet
Vier Fragen, und nur nach dem, was er nicht bekommen hat: der Key, die Adresse, an die ein kaputter Zustand gemailt wird, ob ein Treffer der Community-Liste verworfen oder nur protokolliert wird, und ob dieser Host auch das sperrt, was er in seinen eigenen Logs findet. Ein Lauf, der alle vier Werte als Flags oder als Umgebungsvariablen mitbekommen hat, wird nichts gefragt, und genau so läuft ein unbeaufsichtigter Rollout, weder langsamer noch gesprächiger als vorher. Alles, was der Installer selbst herausfinden kann, die SSH-Ports, die Log-Quellen, das Firewall-Backend, findet er heraus, statt zu fragen.
api key (from your account on https://reportedip.com):
email for the state mails of this host, Enter for none: ops@example.org
blocking: the community list is loaded into the kernel either way. What the rules do
with a match is the question, and this host is set up to deny it: drop is what
an Enter here writes, so the first sync already stops what the list names.
log is the other answer, and the one to give for a host you want to watch
before it denies anything: it counts every match and lets the packet through.
Neither answer is final. mode: log or mode: drop in the config is one word, and
the next sync run rebuilds the rules. Your own addresses, the session you are
sitting in and everything in the whitelist are never blocked in either mode.
drop or log, Enter for drop:
local bans: the second switch, and the half that replaces fail2ban. The list above comes
from the community; this is about the addresses this host catches in its own
logs, and it is on unless you say otherwise. Every entry has a timeout the
kernel enforces, so a stopped agent leaves no permanent ban, whitelist add is
the way out of one, and in mode: log they are recorded and only logged.
ban what this host finds itself [Y/n]:
ok key accepted, role <your role>, reports today <used>/<limit> (account-wide)
wrote /etc/reportedip-agent/config.yaml (lists [ssh mail web ftp edge], ssh ports [22022], 10 log sources, mode drop)
this host denies every match of the community list and bans what it finds in its own logs
state mails go to ops@example.org; change notify.email in the config to stop or redirect them
units installed; sync timer and log watcher enabled; run: reportedip-agent sync && reportedip-agent status
Der Key wird mit abgeschaltetem Echo des Terminals gelesen, bleibt also aus dem Scrollback heraus und
steht in keiner Zeile der Ausgabe. Bei den anderen drei Fragen ist ein Enter eine gültige Antwort
und nimmt jedes Mal den Default: keine Mailadresse, mode: drop, lokale Sperren an. Ein
Host, der mit drei Enter eingerichtet wurde, verwirft also, was die Community-Liste nennt, und sperrt,
was er in seinen eigenen Logs findet, und dafür ist der Agent da. Sicher macht das nicht die Antwort,
sondern die Whitelist: die Adressen dieses Hosts, die Sitzung, in der die Installation läuft, RFC1918
und alles in whitelist.conf werden in keinem Modus geblockt und in keinem Modus gemeldet,
und reportedip-agent whitelist add wirkt ohne Sync. Die letzten zwei Fragen stehen im
einfachen Installationsweg und nicht hinter einem Flag, weil es die zwei Werte sind, die entscheiden,
ob der Host überhaupt etwas tut, und weil der Unterschied in systemctl status nicht zu
sehen ist.
reportedip-agent install --expert, oder REPORTEDIP_EXPERT=1, fragt den Rest.
Acht Gruppen, jede hinter einem [y/N]-Tor, das ein Enter überspringt, und innerhalb
einer Gruppe zeigt jeder Wert seinen Default in Klammern: der Feed samt Firewall-Backend, die
Eskalationsleiter, die Erkennungsschwellen, die Schwelle einer einzelnen Event-Quelle, die Betriebsgrenzen
samt Logging, die Mail-Zustellung einschließlich eines SMTP-Servers für einen Host ohne lokalen MTA,
die Ports der ssh-Liste und die erkannten Log-Quellen, wo eine herausgenommen und eine von der
Erkennung verpasste hinzugefügt werden kann. Jede Antwort wird gegen den Bereich geprüft, den der
Konfigurationsparser akzeptiert, bevor sie geschrieben werden kann, eine 0 bei
min_hits kommt also als 0 is outside 1 to 10000 zurück und wird erneut
gefragt, und die fertige Konfiguration läuft danach durch dieselbe Prüfung, die der Agent beim Lesen
der Datei macht. Damit ist eine Fehlerklasse unmöglich: eine Antwort, die einen registrierten Host
mit einem Agenten hinterlässt, der nicht startet. Die Ban-Gruppe gibt die Leiter aus, die sie gerade
gebaut hat, time_minutes 45 mit escalate 3 und
max_time_minutes 20160 antwortet also mit
45 min, 135 min, 405 min, 1215 min, 3645 min, 10935 min, 14 d (ceiling).
mode und ban.enabled werden nicht ein zweites Mal gefragt, die sind oben
beantwortet. Ein Expertenlauf, der jede Gruppe überspringt, schreibt byteweise dieselbe Datei wie
ein einfacher. Keine Frage bietet den Expertenmodus an, er ist über das Flag und die Variable
erreichbar und sonst nicht, und ohne Terminal ist er ein Fehler und kein stiller Rückfall auf den
einfachen Weg.
Ohne Terminal wird nichts gefragt, und das ist die Lage von cron, einer systemd-Unit, eines
Automatisierungswerkzeugs und von CI. Ein Detail sollten Sie dort kennen: < /dev/null allein
macht einen Lauf nicht nicht-interaktiv, denn das Controlling-Terminal überlebt eine umgeleitete
Standardeingabe. setsid entfernt es, und genau das tun diese Aufrufer.
| Ohne Terminal | Was passiert |
|---|---|
| Nutzungsbedingungen nicht angenommen | install: the terms of use were not accepted, nothing was written; read https://reportedip.com/terms/ and pass --accept-terms or set REPORTEDIP_ACCEPT_TERMS=1, Exit 2, nichts geschrieben. Das kommt vor dem Key und vor den Anforderungen. install.sh bricht genauso ab, vor dem Download. |
| nirgends ein Key | install: no config yet; pass --key <api_key>, or set REPORTEDIP_KEY, or run this from a terminal and it asks, Exit 2, nichts geschrieben. |
| jeder Wert als Flag oder als Variable | Keine einzige Frage. Der reguläre Verlauf, und die Konfiguration wird geschrieben. |
--expert | install: --expert needs a terminal to ask on; without one, pass the values as flags or edit the config afterwards, Exit 2, nichts geschrieben. |
REPORTEDIP_BAN ist weder true noch false | --ban: REPORTEDIP_BAN="maybe": want true or false, Exit 2, nichts geschrieben. Ein Tippfehler in einer Automatisierungsvariable ist ein Fehler und kein stilles Aus. |
install.sh ohne Key | Es nennt die Variable, sagt, dass kein Terminal zum Fragen da ist, und lädt nichts herunter. |
Was der Installer wirklich tut
Alles hier ist idempotent. Derselbe Befehl auf einem Host, der den Agenten schon hat, aktualisiert die Binärdatei und lässt die Konfiguration genau so, wie sie war.
- Zeigt die Nutzungsbedingungen und nimmt ein
yesentgegen, außerREPORTEDIP_ACCEPT_TERMS=1ist gesetzt. Ohne Terminal und ohne die Variable endet das Skript hier, vor der Frage nach dem Key und vor jedem Download. - Liest
https://reportedip.com/agent/latestohne Key und holt die Version daraus. Diese Datei ist dasselbe JSON, das der Agent selbst für Updates abfragt. - Lädt
reportedip-agent_linux_<arch>undSHA256SUMSmit dem HeaderX-Keyin ein temporäres Verzeichnis, das bei jedem Beenden gelöscht wird. - Prüft die Prüfsumme und installiert bei einer Abweichung nichts.
- Installiert die Binärdatei mit Modus 0755 nach
/usr/local/bin/reportedip-agentund gibt die gerade abgelegte Version aus. - Startet
reportedip-agent.serviceneu, wenn diese Unit gerade aktiv ist. Das ist bei einem Upgrade wichtig: der Watch-Daemon würde sonst bis zum nächsten Reboot den alten Code weiterlaufen lassen. Die Sync-Unit ist ein Oneshot und nimmt die neue Binärdatei beim nächsten Start von allein. - Führt die Host-Einrichtung aus, es sei denn,
REPORTEDIP_NO_SETUP=1ist gesetzt oder/etc/reportedip-agent/config.yamlexistiert schon. Im zweiten Fall sagt er das und lässt die Konfiguration in Ruhe.
Die Host-Einrichtung ist der Schritt, der Dateien schreibt, und sie ist dasselbe wie
sudo REPORTEDIP_KEY=<YOUR-KEY> reportedip-agent install. Der Reihe nach, sobald Nutzungsbedingungen, Flags, Anforderungen und Fragen erledigt sind:
- Erkennt den SSH-Port aus
sshd -T, ausSSH_CONNECTIONund aus den lauschenden sshd-Prozessen und nimmt die Vereinigung der drei. Findet er nichts, bricht er ab und fragt nach--ssh-port, statt 22 anzunehmen. - Entscheidet, welche der fünf Feed-Listen konfiguriert werden.
sshundedgesind immer an.mail,webundftpkommen dazu, wenn eine passende Unit aktiv ist oder ein passender Port lauscht. Ein Host ohne Webserver bekommt also keine Web-Liste. Ein Port zählt nur, wenn ihn von außen etwas erreichen könnte: ein Socket, der allein auf127.0.0.1oder::1gebunden ist, ist keine Angriffsfläche und wird auch nicht als eine behandelt. Das ist der Unterschied zwischen einem Mailserver und einem lokalen Zusteller, der nur Mail von der eigenen Maschine annimmt, und der Unterschied zwischen einem Nameserver und dem Stub-Resolver, der auf einem normalen Debian-Host127.0.0.53:53hält. - Erkennt die Log-Quellen und schreibt sie ausdrücklich in die Config. Erkannt wird einmal, zur
Installationszeit, und das Ergebnis bleibt in der Datei: ein Dienst, der für eine Wartung
gestoppt ist, darf eine Quelle nie stillschweigend abschalten. Auf einem Host mit Control Panel
werden die Pro-Site-Globs des Panels und die Standardlogs des Webservers beide konfiguriert und
nicht nur das erste der beiden. Das sind nicht zwei Blicke auf denselben Verkehr: eine Anfrage,
die keinen virtuellen Host mit eigenem
access_logerreicht, landet im Standardlog, und genau das produziert ein Scanner, der Adressen statt Hostnamen abklappert. Auf einem gemessenen Produktionshost waren das 20.453 Zeilen von 466 verschiedenen Adressen an einem einzigen Tag. Jedes vorhandene Standardlog wird genommen, denn nginx vor Apache ist das gewöhnliche Panel-Layout und beide schreiben ihr eigenes, und ein leeres zählt auch, denn ein Log ist leer, bis jemand klopft./var/log/apache2/other_vhosts_access.logbleibt bewusst draußen: seine Zeilen beginnen mit dem virtuellen Host, die Adresse steht also im zweiten Feld, während der Detektor das erste liest, und eine Quelle, die nichts melden kann, währenddoctorden Host gesund nennt, ist schlimmer als keine Quelle. - Ruft
verify-keyauf und gibt Ihre Rolle und die heute verbrauchten Reports gegen das Tageslimit aus. Das ist die letzte der drei Prüfungen und sie läuft, bevor das erste Verzeichnis angelegt wird, ein falscher Key kostet also nichts auf der Platte. Ein 401 oder 403 hier heißt, der Key ist falsch, und das ist der eine Fehler, der sofort behoben werden sollte. - Legt
/etc/reportedip-agentund/var/lib/reportedip-agentan, das zweite mit Modus 0700, und korrigiert den Modus eines Verzeichnisses, das schon da war. - Schreibt
/etc/reportedip-agent/config.yamlmit Modus 0600.modeundban.enabledtragen die Antworten aus den Fragen oben, und wenn nichts mitgegeben und nichts getippt wurde, ist dasmode: dropundban.enabled: true, also die zwei Werte, die die Frage oben als ihren Default gedruckt hat. Die zwei Zeilen nach der Datei sagen in Worten, was der Host jetzt tut, denn der Unterschied ist insystemctl statusnicht zu sehen. Eine bestehende Config wird nie überschrieben: ein zweiter Lauf fragt nichts und sagtthe key was ignored because the config already exists; edit api_key in /etc/reportedip-agent/config.yaml to change it, und liest beide Schalter aus der Datei zurück, die er behalten hat, kann alsoit says mode: drop and ban.enabled: true, so that is what this host does; nothing here changed either valuesagen. Löschen Sie die Datei nicht, um eine frische Installation zu bekommen, es sei denn, Sie wollen diese zwei Entscheidungen verlieren; schieben Sie sie stattdessen beiseite. - Schreibt die Auto-Whitelist ins State-Verzeichnis: die Adresse, von der Ihre SSH-Sitzung kam, plus jede Interface-Adresse des Hosts. Die Sitzungsadresse eines früheren Laufs bleibt erhalten, damit ein zweiter Lauf aus einer anderen Sitzung nicht die Adresse entfernt, auf die der erste sich verlassen hat. Interface-Adressen werden bei jedem Lauf neu ermittelt, damit eine entfernte Adresse nicht hängen bleibt.
- Erzeugt die Install-ID, eine zufällige UUID v4 in
/var/lib/reportedip-agent/install-id. Das ist ab dann die Identität dieses Servers gegenüber der API, und sie bleibt diese Identität, auch wenn der Hostname daneben mitgeht. - Warnt vor drei Dingen, die er nicht für Sie beheben kann: einer nftables-Tabelle
inet reportedip, die das dokumentierte Shell-Skript hinterlassen hat, gleich welches Backend gilt; auf einem frischen Host vor ipset-Sets namensrip-*, die nicht der Agent angelegt hat, meist dasselbe Skript aus einem Cron-Job, dessen Whitelist vor dem ersten Sync übernommen und dessen Job abgeschaltet sein muss; und einem nginx, der Cloudflare-Header liest, ohneset_real_ip_fromzu setzen. Die Web-Quelle würde dann Cloudflare-Adressen zählen statt der des Besuchers. - Schreibt die drei systemd-Units nach
/etc/systemd/system, führtdaemon-reloadaus, aktiviertreportedip-agent-sync.serviceund aktiviert und startetreportedip-agent-sync.timersowiereportedip-agent.service. - Wenn die Units stehen, ruft er
verify-keyein zweites Mal auf, jetzt mit der Install-ID, was den Host registriert, und gibt Rolle und die heutigen Reports noch einmal aus. Ein 401 oder 403 an dieser Stelle beendet den Lauf mit Exit 1: der Host ist installiert, zu korrigieren istapi_keyin der Config.
INPUT. Das alles legt der erste reportedip-agent sync an,
und deshalb endet der Installer mit dem Hinweis, ihn auszuführen. Bis dahin ist der Host genau
so, wie er war, und eine Installation, gegen die Sie sich entscheiden, kostet ein
rm von zwei Verzeichnissen.
Die Umgebungsvariablen von install.sh
| Variable | Standard | Wofür |
|---|---|---|
REPORTEDIP_KEY | keiner | Ihr API-Key. Ohne ihn fragt das Skript an einem Terminal nach, und wo kein Terminal zum Fragen da ist, bricht es ab, bevor es irgendetwas lädt. In einem unbeaufsichtigten Lauf erforderlich. |
REPORTEDIP_ACCEPT_TERMS | nicht gesetzt | 1 nimmt die Nutzungsbedingungen ohne die Frage an. Das Skript zeigt sie vor dem Key und vor dem Download, und ein yes dort wird an den Einrichtungsschritt weitergereicht, niemand wird zweimal gefragt. In einem unbeaufsichtigten Lauf erforderlich: ohne Terminal und ohne die Variable bricht das Skript ab, bevor es irgendetwas lädt. Wie --accept-terms. |
REPORTEDIP_VERSION | das aktuelle Release | Legt eine Version fest, für einen gestaffelten Rollout oder um einen bestimmten Build neu zu installieren. Alte Versionsverzeichnisse bleiben auf dem Verteilpunkt genau dafür liegen. |
REPORTEDIP_PREFIX | /usr/local/bin | Wohin die Binärdatei geht. Wenn Sie das ändern, müssen die systemd-Units folgen, denn sie nennen den absoluten Pfad. |
REPORTEDIP_BASE | https://reportedip.com/agent | Die Download-Basis. Für einen internen Spiegel, der latest, SHA256SUMS, SHA256SUMS.sig und die zwei Binärdateien ausliefert. Das Skript selbst prüft nur SHA256SUMS, die Signatur in SHA256SUMS.sig prüft das Selbst-Update. |
REPORTEDIP_NO_SETUP | nicht gesetzt | 1 legt die Binärdatei ab und hört auf. Es wird nichts erkannt, keine Config geschrieben und keine Unit installiert. Das ist die Variable für ein Golden Image, eine Container-Schicht oder einen Konfigurationsmanagement-Lauf, der die Config-Datei selbst besitzt. |
REPORTEDIP_NOTIFY_EMAIL | nicht gesetzt | Wohin dieser Host einen kaputten Zustand mailt. Die Einrichtung liest die Variable aus der Umgebung, eine Zeile schaltet die Mail also auf einem ganzen Rollout scharf. Ohne sie trägt die Config ein leeres notify.email und der Host verschickt nichts. |
REPORTEDIP_MODE | nicht gesetzt, das heißt drop | log oder drop. Die Einrichtung liest die Variable, sie beantwortet also die Blocking-Frage auf einem Rollout, statt sie beim Default zu lassen. Wie --mode. |
REPORTEDIP_LOG_LEVEL | nicht gesetzt, das heißt warn | debug, info, warn oder error, das log_level der frischen Config. Ein Rollout, der auf jedem Host mitlesen will, sagt hier info, statt hinterher die Config jedes Hosts zu bearbeiten. Alles andere ist ein Fehler, bevor irgendetwas geschrieben wird, denn eine Config, die der Parser ablehnt, lässt den Host mit Units zurück, die starten, und einer Binärdatei, die bei jedem Befehl mit 2 aussteigt. Wie --log-level. |
REPORTEDIP_BAN | nicht gesetzt, das heißt an | true oder false, ob dieser Host sperrt, was er in seinen eigenen Logs findet. Nicht gesetzt ist ein dritter Zustand und kein false: nur nicht gesetzt lässt die Frage zu. Alles andere ist ein Fehler, denn ein Tippfehler in einer Automatisierungsvariable würde sonst eine ganze Flotte nichts blocken lassen, ohne dass jemand es erfährt. Wie --ban und --no-ban. |
REPORTEDIP_EXPERT | nicht gesetzt | 1 fragt die acht feineren Gruppen. Es braucht ein Terminal; ohne eines ist es ein Fehler und keine stille einfache Installation. Wie --expert. |
REPORTEDIP_FAIL2BAN_SOURCE | nicht gesetzt | 0 lässt fail2ban als Quelle weg, auch wenn der Host es noch betreibt. Für die Migration, die diese Seite beschreibt, bei der der Agent installiert wird, während fail2ban noch läuft, und fail2ban danach entfernt wird: ohne die Variable schreibt das Setup eine Quelle, die auf ein Log zeigt, das niemand mehr schreibt. Harmlos, die Quelle hat keinen Kanal und wird übersprungen, taucht aber in einem Flotten-Check als Lücke auf. |
# Binary only, no host setup: for an image or for Ansible. The
# terms of use are asked before the download, so the variable goes
# here as well.
curl -fsSL https://reportedip.com/agent/install.sh \
| REPORTEDIP_ACCEPT_TERMS=1 REPORTEDIP_KEY=<YOUR-KEY> REPORTEDIP_NO_SETUP=1 sh
# Later, on the running host, or from your playbook. The key goes
# in the environment and not in an argument, because
# /proc/<pid>/cmdline can be read by every local user of the host.
# sudo clears the environment, so the variable goes in front of it.
sudo REPORTEDIP_KEY=<YOUR-KEY> reportedip-agent install --accept-terms
Installation von Hand
Der Einrichtungsschritt ist ein eigener Befehl. Führen Sie ihn aus, wenn
REPORTEDIP_NO_SETUP=1 nur die Binärdatei abgelegt hat, wenn die Erkennung etwas geraten
hat, das Sie korrigieren wollen, oder wenn ein Rollout jede Frage vorab beantworten muss. Was als
Flag mitkommt, wird nicht gefragt: --key, --notify-email,
--mode log|drop, --ban und --no-ban,
--log-level debug|info|warn|error, --admin-ip,
--ssh-port, --accept-terms und --expert für die feineren Fragen. --key
funktioniert weiter und druckt eine Zeile, die sagt, dass sein Wert in der Prozessliste steht, wo ihn
jeder lokale Benutzer dieses Hosts so lange lesen kann, wie der Lauf dauert; geben Sie den Key
stattdessen als REPORTEDIP_KEY mit. sudo löscht die Umgebung per Default,
die Variable gehört also vor sudo und nicht dahinter. Auf einem Host, der noch keine Konfiguration
hat, beginnt der Lauf mit den Nutzungsbedingungen und geht nur nach einem yes weiter; die
Annahme wird mit der Version des Textes und dem Zeitpunkt unter
/var/lib/reportedip-agent/terms-accepted festgehalten, und doctor zeigt diese
Zeile. Ein Host, der schon eingerichtet ist, wird nicht noch einmal gefragt und bekommt nur die Adresse
der Bedingungen genannt.
# The key goes in the environment. sudo clears the environment by
# default, so the variable belongs in front of sudo; behind it the
# install finds no key and exits 2.
sudo REPORTEDIP_KEY=<YOUR-KEY> reportedip-agent install
# The detection could not find the SSH port (socket activation,
# a non-standard unit, a port from an include file):
sudo REPORTEDIP_KEY=<YOUR-KEY> reportedip-agent install --ssh-port 2222
# The session address is not where you administer this host from
# (a jump host, a console, a serial connection):
sudo REPORTEDIP_KEY=<YOUR-KEY> reportedip-agent install --admin-ip 203.0.113.0/24
# Arm the state mails at the same time:
sudo REPORTEDIP_KEY=<YOUR-KEY> reportedip-agent install --notify-email ops@example.org
# A rollout that answers everything, so nothing is asked and no
# terminal is needed. Works the same as five environment variables:
# REPORTEDIP_ACCEPT_TERMS, REPORTEDIP_KEY, REPORTEDIP_NOTIFY_EMAIL,
# REPORTEDIP_MODE, REPORTEDIP_BAN
sudo REPORTEDIP_KEY=<YOUR-KEY> reportedip-agent install --accept-terms \
--notify-email ops@example.org --mode drop --ban
# Everything the four questions do not cover, asked one group at a time:
sudo REPORTEDIP_KEY=<YOUR-KEY> reportedip-agent install --expert
--admin-ip nimmt eine einzelne Adresse oder einen CIDR-Bereich und tritt an die Stelle der
geratenen Sitzungsadresse. Adressen, die frühere Install-Läufe in die Auto-Whitelist geschrieben
haben, bleiben dort stehen. Das lohnt sich immer dann, wenn die SSH-Sitzung nicht repräsentativ ist, denn die
geratene Adresse ist das, was am ersten Tag zwischen Ihnen und Ihrer eigenen Blockregel steht. Der
ganze Install-Lauf hat eine Frist von fünf Minuten, ein hängendes nft oder
systemctl endet also mit einem Fehler und nicht mit einem Prozess, den Sie abbrechen
müssen.
Ein Host ohne systemd
install läuft hier nicht. Der Befehl schreibt die systemd-Units und aktiviert sie, also
weist er einen Host ab, auf dem systemd nicht PID 1 ist, und schreibt nichts, statt eine
Konfiguration zurückzulassen, die nie etwas startet. Beim Binary ist es anders: nichts darin hängt an
systemd, und doctor meldet den fehlenden Manager, statt abzubrechen. Was bleibt, ist eine
Einrichtung von Hand, und zwei Dinge müssen auf so einem Host eingerichtet werden.
# 1. The feed sync, from cron. Every 15 minutes is safe on any
# plan: the agent skips a fetch its own plan interval does
# not allow yet, so nothing is requested too often.
*/15 * * * * root /usr/local/bin/reportedip-agent sync >/dev/null 2>&1
@reboot root sleep 120 && /usr/local/bin/reportedip-agent sync
# 2. The watch daemon, from your init system. It runs in the
# foreground, logs to stderr and stops on SIGTERM.
/usr/local/bin/reportedip-agent watch
Der Eintrag für den Reboot ist nicht optional. ipset-Timeouts überleben keinen Reboot, und die Sets
selbst auch nicht, ohne einen Sync nach dem Boot kommt der Host also ohne Regeln und ohne
wiederhergestellte Sperren hoch. Auf einem systemd-Host deckt das
reportedip-agent-sync.service ab, das für multi-user.target aktiviert ist,
nach jedem Firewall-Dienst läuft und keinen Zufallsversatz hat. Lassen Sie auf einem Host ohne
journald log_file gesetzt, denn stderr führt dort möglicherweise ins Nichts.
Zwei Folgen davon werden leicht übersehen. sync braucht eine
/etc/reportedip-agent/config.yaml, die Ihnen niemand geschrieben hat, denn der Befehl,
der eine schreibt, ist der Befehl, der hier nicht läuft. Und ohne die Install-ID, die derselbe
Befehl erzeugt, hat dieser Host gegenüber der API keine Identität, erscheint also nie unter
Agent Servers und hält keine Serverlizenz.
Zuletzt aktualisiert: · Betreut vom ReportedIP-Team