Skip to main contentSkip to footer

Den Linux-Agenten konfigurieren

Jeder Schlüssel von /etc/reportedip-agent/config.yaml mit Standardwert und Wertebereich, die Erkennungsgrenzen pro Quelle, die Eskalationsleiter, die Betriebsgrenzen, die Mail, die ankommt, wenn etwas nicht stimmt, und welche Änderung beim nächsten Sync, bei einem Neustart oder innerhalb einer Minute greift.

Konfiguration

Eine Datei, eine Whitelist, ein State-Verzeichnis. Was der Installer schreibt, passt schon zum Host; die meisten Installationen ändern überhaupt nur zwei Dinge, den Wert von mode und ob lokales Blocken an ist.

PfadBesitzer, ModusInhalt
/etc/reportedip-agent/config.yamlroot:root, 0600Alle Einstellungen. Der Agent startet nicht, wenn Gruppe oder andere sie lesen können, denn in der Datei steht Ihr API-Key, und er nennt den chmod-Befehl, der das behebt.
/etc/reportedip-agent/whitelist.confroot:root, 0600Nie blocken, nie melden. Eine Adresse oder ein CIDR pro Zeile, # beginnt einen Kommentar. Eine kaputte Zeile wird mit einer Warnung übersprungen. Legt install mit einem erklärenden Kommentar am Anfang an.
/var/lib/reportedip-agent/root:root, 0700Zustand: offsets.json (Lesepositionen), queue/, dedup.json, bans.json, health.json (Gesundheit), install-id, auto-whitelist, group-whitelist (vom Sync aus Ihrer Gruppe geschrieben, nicht von Hand), feed-token, die Lock-Dateien.
/var/log/reportedip-agent.logroot:root, 0640Das eigene Log des Agenten. Er rotiert die Datei selbst, logrotate ist also weder nötig noch im Weg.
/usr/local/bin/reportedip-agentroot:root, 0755Das Binary. Eine Datei, statisch gelinkt.
Ein unbekannter Schlüssel beendet den Agenten mit Exit 2. Der Parser prüft Feldnamen, ein Schreibfehler ist also ein Fehler mit Zeilennummer und kein Wert, der stillschweigend nie greift. Die Tabelle unten ist die vollständige Liste, und ein Schlüssel, der nicht darin steht, existiert nicht. Zwei werden gern erfunden: es gibt kein sync_interval, das Intervall kommt aus Ihrer Lizenz, und es gibt kein whitelist, der Schlüssel heißt whitelist_file. Nach einer Änderung endet reportedip-agent status mit Exit 2 und nennt den Schlüssel, wenn die Datei nicht lesbar ist.

Jeder Schlüssel von config.yaml

Pflicht ist nur api_key. Jeder andere Schlüssel hat den Standard aus der Tabelle, und ein Schlüssel, den Sie weglassen, behält diesen Standard. Ein Wert außerhalb seines Bereichs ist ein Fehler, der den Schlüssel nennt, und wird nie stillschweigend gekappt. Punkte in den Namen unten sind Verschachtelung: ban.enabled ist ein enabled:, eingerückt unter ban:.

SchlüsselStandardErlaubtWirkung
api_keykeinerIhr KeyDer einzige Schlüssel ohne Standard. REPLACE_ME gilt als fehlend.
api_urlhttps://reportedip.com/wp-json/reportedip/v2absolutes httpsDie REST-Basis. Einfaches http ist nur auf dem Loopback erlaubt, für einen lokalen Proxy.
update_urlaus api_url, Pfad /agentabsolutes httpsWoher die Agent-Builds kommen. Setzen Sie es für einen Spiegel.
auto_updatetruetrue, falseIm Sync-Lauf ein neueres Release installieren. false für einen Host, dessen Version anderswo entschieden wird; update von Hand geht weiter, und status berichtet weiter, wie weit der Host zurück ist.
log_levelwarndebug, info, warn, errorSonst nichts. Eine frische Installation schreibt warn, ein neuer Host bleibt im Journal also still, bis etwas Aufmerksamkeit braucht; die Routinezeilen (eine Liste aktualisiert, ein Report in der Queue, eine lokale Sperre gesetzt) liegen auf info. Ein Host, der schon installiert ist, behält, was in seiner Config steht, und --log-level oder REPORTEDIP_LOG_LEVEL setzt den Wert, den eine frische Installation schreibt, damit eine Flotte, die info will, nicht Host für Host nachbearbeitet werden muss. Die wenigen Fehler, die den Host stoppen, bevor der Logger existiert, liegen über error und erscheinen immer, unabhängig von diesem Schlüssel: dieses Level ist keine Ausführlichkeit, die ein Host herunterdrehen kann, es ist die eine Zeile, die ein Host, der gerade stehen geblieben ist, immer hinterlässt.
log_file/var/log/reportedip-agent.logPfad oder leerDas eigene Log des Agenten, zusätzlich zu stderr, damit journald alles behält, was es heute hat. Leer schaltet die Datei ab.
log_max_mb101 bis 1024Größe, bei der der Agent seine eigene Datei rotiert.
log_keep30 bis 20Behaltene rotierte Generationen. Mit den Standardwerten sind das im schlimmsten Fall 40 MB.
backendautoauto, ipset, nftablesWelcher Paketfilter geschrieben wird. Eine spätere Änderung braucht sync --migrate-backend.
modedroplog, drop, offWas die Regeln tun. Gilt für die Feed-Listen und für die lokalen Sperren.
confidence901 bis 100Der Feed-Schwellwert. Niedriger heißt längere Liste und mehr Grenzfälle. Der Server nennt eine Untergrenze für Ihren Tarif, und von beiden Werten gilt der höhere.
limit500001 bis 50000Höchstzahl Adressen pro Listenabruf.
listsssh, edgessh, mail, web, ftp, edge, groupWelche Feed-Listen aktiv sind. ssh und edge sind immer an und lassen sich nicht abschalten. group, die Liste Ihrer Kontogruppe, ist ebenfalls immer an und braucht keinen Eintrag: bei einem Key ohne Gruppe ist sie schlicht leer.
lists.ssh.portsaus dem echten Listenerje 1 bis 65535Die Ports, auf die die ssh-Regel greift. Die einzige Option pro Liste; die anderen Listen haben feste Port-Sets. Eine leere Liste lässt die Regel auf jeden Port greifen.
min_entries.<list>ssh 1000, mail 500, web 500, ftp 500, edge 10001 oder mehrDie Plausibilitätsgrenze: unter dieser Anzahl Adressen wird eine Liste nicht getauscht. Ein Minimum von null ließe eine leere Liste live gehen und wird abgelehnt. Die Liste group hat kein Minimum und lehnt den Schlüssel ab: eine leere Gruppe ist eine gültige.
whitelist_file/etc/reportedip-agent/whitelist.confPfadIhre Nie-blocken-nie-melden-Liste.
sourcesein sshd-EintragListe von EinträgenDie Log-Quellen. Eine Datei mit einem sources-Schlüssel entscheidet allein, ein Eintrag von Ihnen gehört also neben die des Installers und nicht in einen zweiten Block.
sources[].typekeinereiner der vierzehnEin unbekannter Typ ist ein Fehler, der die gültigen aufzählt. web-app ist keiner davon.
sources[].pathkeinereine DateiSetzen Sie path oder glob, nie beides. Ohne beides wählt der Agent den Kanal selbst, journald oder die Standarddatei der Distribution. Die Quelle web hat keinen Standard und löst ohne eines von beiden auf nichts auf. Bei scan ist das das Kernel-Journal, sonst /var/log/kern.log oder /var/log/messages.
sources[].globkeinerhöchstens 5 Wildcard-SegmenteEin Muster über viele Dateien, alle zehn Minuten neu aufgelöst.
sources[].excludekeinerShell-MusterEntfernt Dateien wieder, die ein Glob erfasst hat. Keine regulären Ausdrücke. Ein Muster ohne Schrägstrich passt auf den Dateinamen allein, eines mit Schrägstrich muss den vollen Pfad abdecken. Zu einem Muster, das auf nichts passt, gibt es beim Start eine Warnung.
sources[].poll_minutes51 bis 60Nur für imunify360, das ein Kommando abfragt statt eine Datei zu lesen. Bei jedem anderen Typ ist es ein Fehler.
min_hits, window_minutes5, 101 oder mehrDas globale Paar für jede Ereignisquelle ohne eigenen Eintrag in der eingebauten Tabelle.
web_min_hits, web_window_minutes50, 1201 oder mehrDasselbe Paar allein für die Quelle web, die Menge braucht statt eines Statuscodes.
thresholds.<event source>.hits, .window_minutesdie eingebaute Tabelle1 oder mehrÜberschreibt die eingebaute Tabelle für eine Ereignisquelle. Ein unbekannter Name ist ein Fehler statt einer Einstellung, die nie greift.
dedup_hours61 oder mehrDieselbe Adresse wird höchstens einmal pro diesem Fenster gemeldet.
queue_max50001 oder mehrWartende Report-Dateien. Darüber werden die ältesten verworfen.
disk_min_mb2000 bis 1000000Freie Mebibyte, die dort vorhanden sein müssen, wo das State-Verzeichnis liegt. Darunter wird kein neuer Report eingereiht, während Erkennung und Blocken weiterlaufen. 0 schaltet die Grenze ab.
jail_categories.<jail>eingebaute Tabellepositive IDsZusätzliche Zuordnung von einem fail2ban-Jail-Namen zu Threat-Category-IDs. Es gibt 63 Kategorien, lückenlos von 1 bis 63 nummeriert. Eine Obergrenze wird bewusst nicht geprüft: der Server besitzt die Liste und bekommt neue Einträge, ohne dass der Agent aktualisiert wird, und eine ID, die er nicht kennt, kostet einen abgelehnten Report, während ein Abbruch beim Start den ganzen Host kosten würde. Nur relevant, solange fail2ban noch eine Quelle ist.
ban.enabledtruetrue, falseOb lokale Funde überhaupt geblockt werden. Ein manuelles ban add funktioniert in beiden Fällen.
ban.time_minutes301 oder mehrDie erste Sperre einer Adresse.
ban.max_time_minutes10080 (7 Tage)mindestens ban.time_minutesDie Obergrenze der Eskalation. Ein späteres Senken lässt Sperren, die schon im Kernel stehen, wie sie sind; die neue Grenze gilt für neue Sperren und für Sperren, die nach einem Neustart oder Flush wiederhergestellt werden.
ban.escalate41 oder mehrDer Multiplikator pro Wiederholung innerhalb des Gedächtnisfensters. 1 heißt gar keine Eskalation.
ban.memory_hours241 oder mehrWie lange eine Sperre für die nächste Eskalation zählt.
notify.emailleereine AdresseLeer heißt, dieser Host verschickt keine Mail. Er merkt sich seine Zustände trotzdem und zeigt sie in status.
notify.cooldown_hours241 oder mehrHöchstens eine Mail pro Zustand in diesem Fenster. 1 heißt höchstens eine Mail pro Stunde für einen Zustand, der offen bleibt; 0, eine Mail pro Sync-Lauf, wird abgelehnt.
notify.relaytruetrue, falseÜber reportedip.com senden statt über den lokalen MTA. Wird zuerst versucht, verfügbar ab Professional.
notify.smtp.host, .from, .user, .passwordleerZeichenkettenNur nötig auf einem Host ohne lokalen MTA und ohne Relay. Mit Postfix, Exim oder msmtp nutzt der Agent sendmail, und kein Passwort muss in einer Datei stehen.
notify.smtp.port5871 bis 65535Submission-Port Ihres eigenen SMTP-Servers.
notify.smtp.starttlstruetrue, falseMit true wird die Mail abgelehnt statt unverschlüsselt gesendet, wenn der Server STARTTLS nicht anbietet.

Eine vollständige Datei, die der Parser annimmt, mit jedem Block, den ein normaler Host benutzt:

yaml
# /etc/reportedip-agent/config.yaml   root:root 0600
api_key: "YOUR_API_KEY"
api_url: https://reportedip.com/wp-json/reportedip/v2

log_level: warn              # debug | info | warn | error
log_file: /var/log/reportedip-agent.log
log_max_mb: 10
log_keep: 3
auto_update: true

backend: auto                # auto | ipset | nftables
mode: drop                   # log | drop | off
confidence: 90               # the feed threshold
limit: 50000

lists:                       # ssh, edge and group are always on
  ssh:
    ports: [22]              # written by install from the real listener
  edge: {}
  mail: {}
  web: {}

min_entries:                 # below this many addresses a list is not applied
  ssh: 1000
  mail: 500
  web: 500
  ftp: 500
  edge: 1000

whitelist_file: /etc/reportedip-agent/whitelist.conf

min_hits: 5                  # the global detection pair
window_minutes: 10
web_min_hits: 50             # the web source uses its own
web_window_minutes: 120
dedup_hours: 6
queue_max: 5000
disk_min_mb: 200

sources:                     # detected at install time
  - type: sshd
  - type: web
    glob: /var/www/*/log/access.log
  - type: web-error
    path: /var/log/nginx/error.log
  - type: postfix
    path: /var/log/mail.log
  - type: dovecot
    path: /var/log/mail.log
  - type: scan               # the kernel log; adds the port scan rule

thresholds: {}               # per event source overrides, see below

ban:                         # block local finds, not only the feed
  enabled: true
  time_minutes: 30
  max_time_minutes: 10080
  escalate: 4
  memory_hours: 24

notify:
  email: ""                  # empty means no mail
  cooldown_hours: 24
  relay: true                # through reportedip.com, from Professional

Erkennungsgrenzen, pro Quelle

Ein Schwellwert ist ein Paar: wie viele Treffer, innerhalb wie vieler Minuten. Das ist dieselbe Idee wie maxretry und findtime eines fail2ban-Jails. Drei Ebenen entscheiden, welches Paar für eine Ereignisquelle gilt, und die erste mit einer Antwort gewinnt.

ReihenfolgeWoher das Paar kommtGeltungsbereich
1Ein Eintrag unter thresholdsGenau die eine Ereignisquelle, die Sie nennen.
2Die eingebaute Tabelle, neun EinträgeDie neun Ereignisquellen, die in der Tabelle unten mit „eingebaut“ markiert sind.
3web_min_hits / web_window_minutesNur die Quelle web.
3min_hits / window_minutesAlles andere, web-error eingeschlossen.
EreignisquelleSchwellwertHerkunft
sshd5 in 10 Min.min_hits / window_minutes
web-error5 in 10 Min.min_hits / window_minutes
modsec5 in 10 Min.min_hits / window_minutes
exim5 in 10 Min.min_hits / window_minutes
web50 in 120 Min.web_min_hits / web_window_minutes
web-app20 in 60 Min.eingebaut
postfix-sasl3 in 60 Min.eingebaut, gemessen
postfix-reject5 in 60 Min.eingebaut, nur 5xx-Rejects
postfix-amavis3 in 60 Min.eingebaut
dovecot10 in 60 Min.eingebaut, gemessen
ftp20 in 60 Min.eingebaut
named20 in 30 Min.eingebaut
panel5 in 60 Min.eingebaut
scan10 in 10 Min.eingebaut
fail2ban, csf, imunify360kein SchwellwertDiese Quelle hat schon gezählt, eine Zeile ist also ein Report.

Der Schlüssel unter thresholds ist die Ereignisquelle aus dieser Tabelle, nicht der Quelltyp aus sources. Beide Zahlen müssen mindestens 1 sein. Ein thresholds-Block, ein Eintrag pro Quelle, die Sie ändern wollen:

yaml
thresholds:
  # A resolver that sees a lot of refused queries: fewer minutes,
  # more hits.
  named:
    hits: 40
    window_minutes: 5
  # A mail server whose customers keep mistyping passwords: SASL a
  # little more forgiving, Dovecot untouched.
  postfix-sasl:
    hits: 6
    window_minutes: 60
  # An exposed SSH port, stricter than the global pair.
  sshd:
    hits: 3
    window_minutes: 10

Ein höherer Schwellwert macht den Agenten stiller und lässt langsame Angreifer durch. Ein niedrigerer ist die Richtung, die etwas kostet: unterhalb von etwa drei Treffern pro Stunde auf einer Mail- oder Web-Quelle melden Sie irgendwann einen Kunden mit einem falschen Passwort im Mailprogramm, und ein Report ist innerhalb der Community öffentlich.

Eine Größe ist nicht konfigurierbar. Eine Adresse mit Bann-Historie braucht weniger Treffer als eine unbekannte: eine frühere Sperre zählt eine Zeile doppelt, zwei dreifach, dann fünffach und neunfach. Das Gewicht wird auf den Schwellwert der jeweiligen Ereignisquelle gekappt, eine zehnte Sperre macht also aus einer einzelnen Zeile keinen Report.

Bann-Grenzen

Fünf Werte im ban-Block, jeder in der im Schlüssel genannten Einheit. Sie gelten nur für Adressen, die der Agent in Ihren eigenen Logs gefunden hat. Die Community-Liste hat überhaupt keine Sperrzeit, sie wird bei jedem Feed-Durchlauf komplett ersetzt. Mit den Standardwerten wird eine Adresse, die wiederkommt, erst 30 Minuten gesperrt, dann 2 Stunden, 8 Stunden, 32 Stunden und 128 Stunden, danach für die Obergrenze von 7 Tagen.

SchlüsselStandardWas an den Extremen passiert
enabledtruefalse ist ein Host, der meldet und nicht blockt.
time_minutes30Sehr kurze Werte machen die Eskalation zum einzig Relevanten, sehr lange heißen, dass ein Fehlalarm lange im Set sitzt.
max_time_minutes10080Unter time_minutes würde die Grenze die erste Sperre verkürzen, und der Agent lehnt so eine Datei ab. Ein späteres Senken lässt Sperren, die noch im Kernel stehen, unverändert: die heutige Obergrenze gilt für neue Sperren und für die, die der Sync nach einem Neustart oder Flush wiederherstellt.
escalate41 heißt, jede Sperre dauert time_minutes.
memory_hours24Ein Datensatz bleibt zusätzlich für die dreifache Länge seiner letzten Sperre erhalten, wenn das länger ist, und genau das macht die Obergrenze erreichbar, ohne dass kurze Sperren die Bann-Datei wachsen lassen.
yaml
# Careful: a short first ban, a low cap, a long memory.
ban:
  enabled: true
  time_minutes: 10
  max_time_minutes: 1440     # one day
  escalate: 3
  memory_hours: 72

# Strict: a long first ban and a hard escalation.
ban:
  enabled: true
  time_minutes: 60
  max_time_minutes: 43200    # thirty days
  escalate: 6
  memory_hours: 168          # a week

Betriebsgrenzen

Diese Werte begrenzen, was der Agent selbst verbraucht. Sie sind keine Stellschrauben für die Erkennung, und die zwei, die sich zu ändern lohnen, sind die Queue-Größe und die Plattengrenze.

SchlüsselStandardEinheitZu niedrigZu hoch
queue_max5000wartende Report-DateienReports gehen während eines API-Ausfalls verloren, die ältesten zuerst.Ein langer Ausfall lässt Tausende kleiner Dateien übrig, die danach zu senden sind.
dedup_hours6StundenDerselbe Angreifer wird immer wieder gemeldet und frisst Ihr Tageskontingent.Eine Adresse, die nächste Woche wieder angreift, wird spät gemeldet.
disk_min_mb200MB freiDer Agent kann mithelfen, /var zu füllen, und das nimmt den ganzen Host mit.Reports hören auf einem völlig gesunden Host auf. 0 entfernt die Grenze.
log_max_mb10MBRotation bei jedem zweiten Schreiben und eine Historie, die für keine Untersuchung reicht.Maximal 1024, und zusammen mit log_keep ist das der schlimmste Fall auf der Platte.
log_keep3Generationen0 behält gar keine rotierte Datei.Maximal 20, und der Plattenbedarf ist das Produkt der beiden Werte.
notify.cooldown_hours24StundenMindestens 1, und 1 heißt höchstens eine Mail pro Stunde für einen Zustand, der offen bleibt. 0 wäre eine Mail pro Sync-Lauf und wird abgelehnt.Ein Problem von heute Morgen wird erst morgen gemailt.
poll_minutes5MinutenEin Kommando, das auf einem belasteten Host zu oft startet.Maximal 60, und Funde kommen entsprechend später an.
limit50000Adressen pro ListeEine abgeschnittene Liste: die schlimmsten Adressen sind da, der Rest nicht.50000 ist das Maximum, das die API ausliefert.
min_entries1000 / 500AdressenEine unplausibel kurze Liste geht live, und der Host ist schlechter geschützt, als er denkt.Eine wirklich kleine Liste wird dauerhaft abgelehnt, und das Set bleibt auf seinem vorherigen Stand.

Unterhalb der Plattengrenze reiht der Agent keine neuen Reports ein, notiert den Zustand und mailt ihn, und erkennt und blockt weiter. Ein voll gelaufenes /var ist schlimmer als ein verlorener Report.

Grenzen, die nicht aus der Datei kommen

Vier Zahlen sind keine Einstellung auf dem Host. Sie kommen aus Ihrem Konto, und der Agent fragt sie ab. Deshalb greift ein Upgrade, ohne dass jemand eine Datei bearbeitet.

GrenzeWertWo Sie sie sehen
Reports pro Tag, pro KontoFree 50, Contributor 200, Professional 1.000, Business 5.000 mal Ihr Mengenmultiplikator, Enterprise unbegrenzt. Wer die Grenze erreicht, bekommt HTTP 429, und der Agent behält den Report in seiner Queue.status, Abschnitt account
Reports pro Tag, pro ServerAutomatisch: 150 Prozent des fairen Anteils, nie unter 50 und nie über der Kontogrenze. Bei einem Server ist das die ganze Kontogrenze, bei zwei je 75 Prozent, bei sechs je ein Viertel. Sie können stattdessen eine feste Zahl setzen oder für eine Maschine das Melden ganz abschalten.status, und Agent Servers in Ihrem Konto
Feed-Intervall und Mindest-ConfidenceAlle 15 Minuten mit Confidence ab 75 auf Professional, Business und Enterprise; stündlich mit Confidence ab 90 auf Contributor; ohne Serverlizenz kein Feed. Ihr confidence greift nur dort, wo es strenger ist als diese Untergrenze.status, pro Liste
Mails über das Relay von reportedip.com500 im Monat auf Professional, 2.500 auf Business. Geteilt mit dem Hive-Plugin. Nicht verfügbar auf Free und Contributor, dort nutzt der Agent den lokalen MTA.Ihr Konto
Das Budget pro Server wird gezählt und nicht erzwungen. Heute wird deswegen kein Report abgelehnt. Es wird gemessen, im Portal und in status angezeigt, und mehr tut es vorläufig nicht. Ein Scharfschalten wird vorher angekündigt, und der Wortlaut dieser Zeile ändert sich damit, sie sagt also immer, welcher der beiden Fälle gilt.

Mail, wenn etwas nicht stimmt

Gemailt wird ein Zustand und kein Ereignis, ein Feed, der jede Stunde scheitert, ist also eine Nachricht und nicht vierundzwanzig. Der Agent führt elf Zustände, merkt sich, wann jeder zuletzt gemailt wurde, damit ein Neustart nicht von vorn anfängt, und schickt eine Entwarnung, wenn einer vorbei ist.

ZustandBedeutung
feedEine Liste ist dreimal in Folge gescheitert, weil sie nicht geholt werden konnte oder kleiner zurückkam als min_entries.
api_keyDer Key wurde abgelehnt.
chainDie Kette oder ein Set ist nicht, was die Config sagt.
diskWeniger freier Platz als disk_min_mb.
sourceEine konfigurierte Quelle löst auf nichts auf oder ist unlesbar.
updateDas Selbst-Update kann ein Release nicht erreichen oder nicht prüfen.
queueDie Queue hat queue_max erreicht, und die ältesten Reports werden verworfen.
licenseDie Serverlizenz dieses Hosts fehlt oder läuft aus.
rulesIhre Regeldateien unter rules.d konnten nicht verwendet werden, die gelieferten Regeln laufen allein.
ruleEin Schutzgitter hat eine Ihrer Dateiregeln abgeschaltet; rules status nennt sie.
reputationDie Adresse, von der dieser Host meldet, steht selbst in der Community-Datenbank. Eine Warnung, kein Fehler: sie braucht Confidence 75, den niedrigsten Wert, den ein Feed ausliefert, greift also erst, wenn andere Hosts diese Adresse wirklich sperren würden; darunter erscheint die Zahl nur in status und in der State-Datei. In status nennt sie die Confidence, die Anzahl der Reports und die Delisting-Seite; die Mail nennt nur den Zustand, weil dieser Text eine Adresse enthält und nie in eine Mail geht. Sie verschwindet mit dem nächsten Sync nach dem Delisting.

In der Mail stehen der Hostname, die Version, der Name des Zustands, ein kurzer Satz mit Zahlen und der Befehl zum Nachsehen. Nie eine Logzeile, nie eine IP-Adresse, nie ein Pfad. Höchstens eine Mail pro Zustand innerhalb von notify.cooldown_hours. Ein Anhalten des Agenten schickt genau eine Mail, die nennt, was dieser Host ab dann nicht mehr tut; ein Reboot und ein Neustart schicken keine, und genau das hält das Selbst-Update still.

install legt den notify-Block an, die Adresse ist also ein Flag beim Einrichten und keine Nachbearbeitung. Eine bestehende Konfiguration wird nie geändert, auch nicht von einem Update.

bash
# Arm the mail while the host is being set up
sudo REPORTEDIP_KEY=<YOUR-KEY> reportedip-agent install --notify-email ops@example.org

# The same through the install script, so one line arms a whole
# rollout
curl -fsSL https://reportedip.com/agent/install.sh \
  | REPORTEDIP_ACCEPT_TERMS=1 REPORTEDIP_KEY=<YOUR-KEY> REPORTEDIP_NOTIFY_EMAIL=ops@example.org sh

Drei Zustellwege, in der Reihenfolge, in der der Agent sie versucht. Ohne notify.email läuft keiner davon.

WegWann er benutzt wirdWas er braucht
Das Relay von reportedip.comnotify.relay: true, der Standard. Wird zuerst versucht, denn ein lokaler MTA, der eine Mail annimmt und nie zustellt, ist der eine Fehler, den der Agent nicht sehen kann.Professional oder höher, und ein echtes erreichbares Postfach als Empfänger. Ein Tarif ohne das Relay antwortet einmal mit 403, was einen Tag lang gemerkt wird.
Der lokale MTAMit relay: false, oder nachdem das Relay abgelehnt hat.Postfix, Exim oder msmtp. Der Agent ruft sendmail -t -i auf, und kein Passwort steht in einer Datei. Ein lokales Postfach wie root@localhost funktioniert hier und nur hier.
Ihr eigener SMTP-ServerMit relay: false und ohne lokalen MTA.Den Block notify.smtp. STARTTLS bleibt an, die Mail wird also abgelehnt statt unverschlüsselt gesendet, wenn der Server es nicht anbietet.
yaml
# The default: out through the relay of reportedip.com, so this
# host needs no mail server of its own.
notify:
  email: "ops@example.org"
  cooldown_hours: 24
  relay: true

# Local delivery only, through postfix, exim or msmtp.
notify:
  email: "ops@example.org"
  cooldown_hours: 24
  relay: false

# No local MTA and no relay: your own SMTP.
notify:
  email: "ops@example.org"
  cooldown_hours: 12
  relay: false
  smtp:
    host: mail.example.org
    port: 587
    from: agent@example.org
    user: agent@example.org
    password: "..."
    starttls: true

Führen Sie danach reportedip-agent doctor aus. Der Abschnitt mail sagt, ob eine Mail diesen Host wirklich verlassen kann, und das ist eine andere Frage als die, ob der Parser die Konfiguration annimmt. Ein fehlender Empfänger wird bei jedem Lauf genannt und zählt nicht als Fehler.

Wann eine Änderung greift

Der Agent liest seine Konfiguration beim Start, beobachtet die Datei nicht und hat kein Reload-Signal. Welchen Befehl Sie brauchen, hängt davon ab, welchen Teil Sie angefasst haben.

Was Sie geändert habenWas es greifen lässt
mode, lists, min_entries, confidence, limit, backendreportedip-agent sync. Der Sync-Lauf baut die Kette und die Regeln, ein neuer Modus ist an seinem Ende also live.
thresholds, min_hits, window_minutes, web_min_hits, web_window_minutes, dedup_hours, ban, notify, log_*systemctl restart reportedip-agent.service. Das liest der Watch-Daemon.
Eine Quelle hinzugefügt zu sourcessystemctl restart reportedip-agent.service.
Die Quelle scan hinzugefügtBeides: der Neustart für die Quelle, und reportedip-agent sync für die Firewall-Regel, die sie liest, denn die baut allein der Sync-Lauf.
Eine Quelle entfernt aus sourcesEin Stopp und ein Start, kein Restart. Auf einem Live-Host hat ein systemctl restart nicht gereicht und der Daemon las die entfernte Datei weiter: systemctl stop reportedip-agent.service && systemctl start reportedip-agent.service.
Inhalt von whitelist_fileNichts, wenn Sie reportedip-agent whitelist add benutzen: das schreibt die Datei und das Kernel-Set in einem Schritt und greift sofort. Die Datei von Hand zu bearbeiten braucht einen sync.
api_key, api_url, auto_update, update_urlNichts für den nächsten sync, der ein Oneshot ist und die Datei frisch liest. Starten Sie den Watch-Dienst neu, damit auch der Meldeweg den Key übernimmt.
bash
# The safe sequence after any edit
reportedip-agent status >/dev/null; [ $? -ne 2 ] && echo "config parses"
reportedip-agent sync
systemctl restart reportedip-agent.service
systemctl status reportedip-agent.service --no-pager

Zuletzt aktualisiert: · Betreut vom ReportedIP-Team

Security Focused
DSGVO-konform
Made in Germany
Zurück zur Doku