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.
| Pfad | Besitzer, Modus | Inhalt |
|---|---|---|
/etc/reportedip-agent/config.yaml | root:root, 0600 | Alle 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.conf | root:root, 0600 | Nie 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, 0700 | Zustand: 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.log | root:root, 0640 | Das eigene Log des Agenten. Er rotiert die Datei selbst, logrotate ist also weder nötig noch im Weg. |
/usr/local/bin/reportedip-agent | root:root, 0755 | Das Binary. Eine Datei, statisch gelinkt. |
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üssel | Standard | Erlaubt | Wirkung |
|---|---|---|---|
api_key | keiner | Ihr Key | Der einzige Schlüssel ohne Standard. REPLACE_ME gilt als fehlend. |
api_url | https://reportedip.com/wp-json/reportedip/v2 | absolutes https | Die REST-Basis. Einfaches http ist nur auf dem Loopback erlaubt, für einen lokalen Proxy. |
update_url | aus api_url, Pfad /agent | absolutes https | Woher die Agent-Builds kommen. Setzen Sie es für einen Spiegel. |
auto_update | true | true, false | Im 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_level | warn | debug, info, warn, error | Sonst 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.log | Pfad oder leer | Das eigene Log des Agenten, zusätzlich zu stderr, damit journald alles behält, was es heute hat. Leer schaltet die Datei ab. |
log_max_mb | 10 | 1 bis 1024 | Größe, bei der der Agent seine eigene Datei rotiert. |
log_keep | 3 | 0 bis 20 | Behaltene rotierte Generationen. Mit den Standardwerten sind das im schlimmsten Fall 40 MB. |
backend | auto | auto, ipset, nftables | Welcher Paketfilter geschrieben wird. Eine spätere Änderung braucht sync --migrate-backend. |
mode | drop | log, drop, off | Was die Regeln tun. Gilt für die Feed-Listen und für die lokalen Sperren. |
confidence | 90 | 1 bis 100 | Der 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. |
limit | 50000 | 1 bis 50000 | Höchstzahl Adressen pro Listenabruf. |
lists | ssh, edge | ssh, mail, web, ftp, edge, group | Welche 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.ports | aus dem echten Listener | je 1 bis 65535 | Die 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 1000 | 1 oder mehr | Die 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.conf | Pfad | Ihre Nie-blocken-nie-melden-Liste. |
sources | ein sshd-Eintrag | Liste von Einträgen | Die 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[].type | keiner | einer der vierzehn | Ein unbekannter Typ ist ein Fehler, der die gültigen aufzählt. web-app ist keiner davon. |
sources[].path | keiner | eine Datei | Setzen 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[].glob | keiner | höchstens 5 Wildcard-Segmente | Ein Muster über viele Dateien, alle zehn Minuten neu aufgelöst. |
sources[].exclude | keiner | Shell-Muster | Entfernt 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_minutes | 5 | 1 bis 60 | Nur für imunify360, das ein Kommando abfragt statt eine Datei zu lesen. Bei jedem anderen Typ ist es ein Fehler. |
min_hits, window_minutes | 5, 10 | 1 oder mehr | Das globale Paar für jede Ereignisquelle ohne eigenen Eintrag in der eingebauten Tabelle. |
web_min_hits, web_window_minutes | 50, 120 | 1 oder mehr | Dasselbe Paar allein für die Quelle web, die Menge braucht statt eines Statuscodes. |
thresholds.<event source>.hits, .window_minutes | die eingebaute Tabelle | 1 oder mehr | Überschreibt die eingebaute Tabelle für eine Ereignisquelle. Ein unbekannter Name ist ein Fehler statt einer Einstellung, die nie greift. |
dedup_hours | 6 | 1 oder mehr | Dieselbe Adresse wird höchstens einmal pro diesem Fenster gemeldet. |
queue_max | 5000 | 1 oder mehr | Wartende Report-Dateien. Darüber werden die ältesten verworfen. |
disk_min_mb | 200 | 0 bis 1000000 | Freie 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 Tabelle | positive IDs | Zusä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.enabled | true | true, false | Ob lokale Funde überhaupt geblockt werden. Ein manuelles ban add funktioniert in beiden Fällen. |
ban.time_minutes | 30 | 1 oder mehr | Die erste Sperre einer Adresse. |
ban.max_time_minutes | 10080 (7 Tage) | mindestens ban.time_minutes | Die 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.escalate | 4 | 1 oder mehr | Der Multiplikator pro Wiederholung innerhalb des Gedächtnisfensters. 1 heißt gar keine Eskalation. |
ban.memory_hours | 24 | 1 oder mehr | Wie lange eine Sperre für die nächste Eskalation zählt. |
notify.email | leer | eine Adresse | Leer heißt, dieser Host verschickt keine Mail. Er merkt sich seine Zustände trotzdem und zeigt sie in status. |
notify.cooldown_hours | 24 | 1 oder mehr | Hö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.relay | true | true, false | Über reportedip.com senden statt über den lokalen MTA. Wird zuerst versucht, verfügbar ab Professional. |
notify.smtp.host, .from, .user, .password | leer | Zeichenketten | Nur 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.port | 587 | 1 bis 65535 | Submission-Port Ihres eigenen SMTP-Servers. |
notify.smtp.starttls | true | true, false | Mit 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:
# /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.
| Reihenfolge | Woher das Paar kommt | Geltungsbereich |
|---|---|---|
| 1 | Ein Eintrag unter thresholds | Genau die eine Ereignisquelle, die Sie nennen. |
| 2 | Die eingebaute Tabelle, neun Einträge | Die neun Ereignisquellen, die in der Tabelle unten mit „eingebaut“ markiert sind. |
| 3 | web_min_hits / web_window_minutes | Nur die Quelle web. |
| 3 | min_hits / window_minutes | Alles andere, web-error eingeschlossen. |
| Ereignisquelle | Schwellwert | Herkunft |
|---|---|---|
sshd | 5 in 10 Min. | min_hits / window_minutes |
web-error | 5 in 10 Min. | min_hits / window_minutes |
modsec | 5 in 10 Min. | min_hits / window_minutes |
exim | 5 in 10 Min. | min_hits / window_minutes |
web | 50 in 120 Min. | web_min_hits / web_window_minutes |
web-app | 20 in 60 Min. | eingebaut |
postfix-sasl | 3 in 60 Min. | eingebaut, gemessen |
postfix-reject | 5 in 60 Min. | eingebaut, nur 5xx-Rejects |
postfix-amavis | 3 in 60 Min. | eingebaut |
dovecot | 10 in 60 Min. | eingebaut, gemessen |
ftp | 20 in 60 Min. | eingebaut |
named | 20 in 30 Min. | eingebaut |
panel | 5 in 60 Min. | eingebaut |
scan | 10 in 10 Min. | eingebaut |
fail2ban, csf, imunify360 | kein Schwellwert | Diese 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:
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üssel | Standard | Was an den Extremen passiert |
|---|---|---|
enabled | true | false ist ein Host, der meldet und nicht blockt. |
time_minutes | 30 | Sehr kurze Werte machen die Eskalation zum einzig Relevanten, sehr lange heißen, dass ein Fehlalarm lange im Set sitzt. |
max_time_minutes | 10080 | Unter 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. |
escalate | 4 | 1 heißt, jede Sperre dauert time_minutes. |
memory_hours | 24 | Ein 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. |
# 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üssel | Standard | Einheit | Zu niedrig | Zu hoch |
|---|---|---|---|---|
queue_max | 5000 | wartende Report-Dateien | Reports 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_hours | 6 | Stunden | Derselbe Angreifer wird immer wieder gemeldet und frisst Ihr Tageskontingent. | Eine Adresse, die nächste Woche wieder angreift, wird spät gemeldet. |
disk_min_mb | 200 | MB frei | Der 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_mb | 10 | MB | Rotation 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_keep | 3 | Generationen | 0 behält gar keine rotierte Datei. | Maximal 20, und der Plattenbedarf ist das Produkt der beiden Werte. |
notify.cooldown_hours | 24 | Stunden | Mindestens 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_minutes | 5 | Minuten | Ein Kommando, das auf einem belasteten Host zu oft startet. | Maximal 60, und Funde kommen entsprechend später an. |
limit | 50000 | Adressen pro Liste | Eine abgeschnittene Liste: die schlimmsten Adressen sind da, der Rest nicht. | 50000 ist das Maximum, das die API ausliefert. |
min_entries | 1000 / 500 | Adressen | Eine 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.
| Grenze | Wert | Wo Sie sie sehen |
|---|---|---|
| Reports pro Tag, pro Konto | Free 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 Server | Automatisch: 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-Confidence | Alle 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.com | 500 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 |
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.
| Zustand | Bedeutung |
|---|---|
feed | Eine Liste ist dreimal in Folge gescheitert, weil sie nicht geholt werden konnte oder kleiner zurückkam als min_entries. |
api_key | Der Key wurde abgelehnt. |
chain | Die Kette oder ein Set ist nicht, was die Config sagt. |
disk | Weniger freier Platz als disk_min_mb. |
source | Eine konfigurierte Quelle löst auf nichts auf oder ist unlesbar. |
update | Das Selbst-Update kann ein Release nicht erreichen oder nicht prüfen. |
queue | Die Queue hat queue_max erreicht, und die ältesten Reports werden verworfen. |
license | Die Serverlizenz dieses Hosts fehlt oder läuft aus. |
rules | Ihre Regeldateien unter rules.d konnten nicht verwendet werden, die gelieferten Regeln laufen allein. |
rule | Ein Schutzgitter hat eine Ihrer Dateiregeln abgeschaltet; rules status nennt sie. |
reputation | Die 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.
# 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.
| Weg | Wann er benutzt wird | Was er braucht |
|---|---|---|
| Das Relay von reportedip.com | notify.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 MTA | Mit 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-Server | Mit 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. |
# 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 haben | Was es greifen lässt |
|---|---|
mode, lists, min_entries, confidence, limit, backend | reportedip-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 sources | systemctl restart reportedip-agent.service. |
Die Quelle scan hinzugefügt | Beides: 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 sources | Ein 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_file | Nichts, 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_url | Nichts 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. |
# 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