Ist es möglich, iptables zu verwenden, um den von einem "Prozess" initiierten Verkehr zuzulassen, dh den Prozessnamen zu verwenden? Ich möchte zum Beispiel alles erlauben, was durch den Ping-Befehl initiiert wird.iptables-Regel pro Prozess/Dienst erstellen
Antwort
Es sieht aus wie die Besitzer iptables-Modul ist das, was Sie wollen. Prüfen Sie zunächst, ob es in Ihrem System verfügbar ist:
iptables -m owner --help
Mehr erfahren Sie hier lesen: http://www.frozentux.net/iptables-tutorial/iptables-tutorial.html#OWNERMATCH
-m owner --pid-owner PID
Siehe http://linuxpoison.blogspot.com/2010/11/how-to-limit-network-access-by-user.html und http://linux.die.net/man/8/iptables
Beachten Sie, dass das ipt_owner Modul benötigen, as - pid-owner wird von xt_owner nicht unterstützt.
Zum Beispiel (dies ist nur eine Näherung)
#!/bin/bash
[email protected] &
iptables -m owner --pid-owner %1 -j REJECT
In Wirklichkeit aber sind Sie besser dran --uid-Besitzer und --gid-Eigentümer in Gebrauch. Erstens entspricht das Kriterium --pid-owner nur der exakten PID, was bedeutet, dass Ihr Programm leicht einen Child-Prozess erzeugen könnte, der durch diese Regel nicht blockiert würde. (Zumindest habe ich nichts anderes gelesen.) Zweitens warnt iptables (8), dass --pid-owner auf SMP-Systemen kaputt ist (was für Sie gelten kann oder auch nicht, aber in beiden Fällen die Portabilität einschränkt). Drittens gibt es im obigen Skript eine Racebedingung, weil der Prozess gestartet wird, bevor er blockiert wird. (Wenn es einen Weg gibt, die PID eines Prozesses zu bekommen, bevor es beginnt, dann habe ich noch nie davon gehört.)
Wenn es eine Möglichkeit gibt, die PID eines Prozesses zu bekommen, bevor es beginnt, dann habe ich noch nie habe davon gehört.
Sie einen Wrapper schreiben könnte, die Gabeln zuerst, dann fügt die Regel und execs den Prozess (vorausgesetzt, das Programm Sie laufen nicht wieder Gabel), da die PID nicht durch die exec geändert (3) Anruf.
/* NOTE this contains zero error checking */
int main(int argc, char **argv) {
/* Eat argv[0] the name of the wrapper script */
argv++;
argc--;
pid_t my_pid = getpid();
char *iptables_cmd = NULL;
asprintf(&iptables_cmd, "/sbin/iptables -A INPUT -m owner --pid_owner %d -j ACCEPT", my_pid);
system(iptables_cmd);
execv(argv[0], argv);
}
- 1. Erstellen Tabelle mit Zwischensumme pro Zeile und pro Spalte
- 2. Komplette Webanwendung nicht pro Seite erstellen
- 3. Benutzerdefiniertes "Formular erstellen" -Formular pro Rolle
- 4. Kann ich mehrere Sammlungen pro Datenbank erstellen?
- 5. Erstellen Sie eine Plist-Datei pro Artikel
- 6. Erstellen von Akteur pro Domain-Objekt
- 7. Elasticsearch: Pro Shard pro Knoten VS Mehrere Shards pro Knoten?
- 8. Quellcode-Repository - pro Client oder pro Anwendung?
- 9. Zeitquantum pro Prozess pro Thread
- 10. Eine NSOperationQueue pro Zelle oder pro UIViewController?
- 11. Wie erstellen Sie Log-Dateien in log4j pro Programmausführung?
- 12. Erstellen Sie mehrere visuelle Elemente pro generierten Artikel
- 13. eine Python-Liste erstellen mit mehreren Elementen pro Iteration
- 14. So erstellen Sie eine Warnung pro Fehler im Stackdriver
- 15. Können Sie pro Benutzer Projekteinstellungen in Xcode erstellen?
- 16. Wie kann ich Patches zwischen Revisionen pro Datei erstellen?
- 17. Wpull erstellen mehrere eindeutige Captures pro Warc-Datei
- 18. Zählung Etiketten pro Seite und Übersichtstabelle in R erstellen
- 19. Git Zweig Namen Strategie - pro Modul oder pro Entwickler?
- 20. IText Zeilen pro Seite?
- 21. laufene Gesamt pro Konto pro Monat
- 22. Microservices: Datenquelle pro Instanz oder pro Microservice?
- 23. lesen Dokumente pro Benutzer pro Tag
- 24. Ein DAO pro "Container" -Klasse oder ein DAO pro Tabelle?
- 25. Mehrere Zertifikate pro Bereitstellungsverteilungsprofil
- 26. pro Monat
- 27. Schienenlayout pro Controller
- 28. Header pro Quelldatei
- 29. Sellerie PeriodicTask pro Benutzer
- 30. Tags pro Beitrag pro Benutzer, der Benutzer ist nicht aufgeführt.
Nur Besitzer erlaubt Ihnen die Übereinstimmung mit dem Benutzer oder der Gruppe, die den Prozess besitzt, nicht den Prozessnamen selbst. (Das Cmd-Besitzer-Flag scheint entfernt worden zu sein). –
@MikeLundy: Fügen Sie Ihrem System eine Gruppe hinzu (ich benutze 'nonet' selbst), dann fügen Sie Ihrer Ausgabekette eine Regel wie folgt hinzu:' -A OUTPUT -m Besitzer --gid-Besitzer nonet -j REJECT --reject- with icmp-net-unreachable Führen Sie das Programm, für das Sie im Voraus wissen, dass Sie blockieren möchten, mit sg ('sg nonet" your_prog your_args "'). – Bgs
Wenn es nicht unterstützt wird, dann sind ['Kontrollgruppen'] (https://www.kernel.org/doc/Documentation/cgroup-v1/net_cls.txt) die Lösung. Es ist ziemlich schwer zu installieren, aber es gibt Standard-Kernel-Unterstützung. Es erfordert iptables 1.6, die manuell erstellt werden können. Ich werde eine Antwort mit dem Einrichten und Kennzeichnen einer Anwendung in einer Kontrollgruppe veröffentlichen und iptables identifizieren lassen. – KrisWebDev