Utwórz regułę iptables dla procesu/usługi

Czy jest możliwe użycie iptables w celu umożliwienia ruchu zainicjowanego przez "proces", czyli używając nazwy procesu? Chciałbym na przykład zezwolić na wszystko, co jest inicjowane komendą ping.

Author: cateof, 2010-11-30

5 answers

Wygląda na to, że właściciel Moduł iptables jest tym, czego chcesz. Najpierw sprawdź, czy jest dostępny w Twoim systemie:

iptables -m owner --help

Możesz przeczytać więcej tutaj: http://www.frozentux.net/iptables-tutorial/iptables-tutorial.html#OWNERMATCH

 25
Author: barti_ddu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-30 13:52:53
-m owner --pid-owner PID

Zobacz http://linuxpoison.blogspot.com/2010/11/how-to-limit-network-access-by-user.html i http://linux.die.net/man/8/iptables

Zauważ, że potrzebujesz modułu ipt_owner, ponieważ --pid-owner nie jest obsługiwany przez xt_owner.

Na przykład (jest to tylko przybliżenie)

#!/bin/bash
$@ &
iptables -m owner --pid-owner %1 -j REJECT
W rzeczywistości jednak lepiej używać --UID-owner i -- gid-owner. Po pierwsze, kryterium --PID-owner pasuje Tylko do dokładnego pid, co oznacza, że twój program może łatwo wywołaj proces potomny, który nie byłby zablokowany przez tę regułę. (Przynajmniej nie czytałem inaczej.) Po drugie, iptables (8) ostrzega, że --PID-owner jest uszkodzony na systemach SMP (co może lub nie może dotyczyć Ciebie, ale w obu przypadkach ogranicza przenośność). Po trzecie, w powyższym skrypcie znajduje się warunek wyścigu, ponieważ proces rozpoczyna się przed zablokowaniem. (Jeśli istnieje sposób, aby uzyskać pid procesu przed jego rozpoczęciem, To nigdy o tym nie słyszałem.)
 10
Author: Michael D.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-21 18:54:56
Jeśli istnieje sposób na uzyskanie pid procesu przed jego rozpoczęciem, To nigdy o nim nie słyszałem.

Możesz napisać wrapper, który najpierw rozwidla, a następnie dodaje regułę i wykonuje proces (zakładając, że program, który uruchamiasz, nie rozwidla ponownie), ponieważ PID nie jest zmieniany przez wywołanie exec(3).

/* 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);
}
 4
Author: dlundquist,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-26 04:59:49

Francuska Strona Wikipedii o iptables https://fr.wikipedia.org/wiki/Iptables stwierdza, że możliwość filtrowania za pomocą --pid-owner lub -- cmd-owner została usunięta począwszy od jądra 2.6.14... i linki do dziennika zmian jądra, gdzie nie mogłem sprawdzić tego twierdzenia, ponieważ nie jestem specjalistą od tego, do czego służą wewnętrzne struktury jądra!

Równoważna strona w języku angielskim nie wchodzi w taki poziom szczegółowości.

Filtrowanie z UID/GID nadal działa.

 0
Author: Zakhar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-08-15 06:48:47

Bazując na odpowiedzi @ Bgs, zrobiłbym to tak:

  1. Dodaj nową grupę systemową, np. snitch
sudo addgroup --system snitch
  1. Dodaj siebie do tej grupy, aby nie zostać poproszonym o hasło do uruchamiania procesów z ustawioną na nią podstawową grupą:
sudo adduser $USER snitch
  1. Dodaj reguły IPv4 i IPv6 do logowania i odrzucania pakietów generowanych przez procesy należące do tej grupy:
sudo iptables  -A OUTPUT -m owner --gid-owner snitch -j LOG --log-prefix 'Snitch: '
sudo ip6tables -A OUTPUT -m owner --gid-owner snitch -j LOG --log-prefix 'Snitch: '
sudo iptables  -A OUTPUT -m owner --gid-owner snitch -j REJECT
sudo ip6tables -A OUTPUT -m owner --gid-owner snitch -j REJECT
  1. Otwórz zegarek ogonowy na jądrze wiadomości:
dmesg -w
  1. Uruchom proces docelowy za pomocą sg lub innych podobnych środków:
sg snitch 'your target program'
 0
Author: Tobia,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-10-11 20:18:07