Jak mogę ograniczyć przekierowanie portów ssh * remote *?


22

Muszę ograniczyć, które porty mogą być ssh -Rprzekazywane dalej przez użytkownika.

Wiem o permitopenopcji na uprawnionych kluczach, ale jak napisano na stronie podręcznika, ogranicza ona tylko ssh -Lprzekierowanie portów lokalnych

Jak omówiono tutaj, użytkownik uzyskałby to samo netcatlub podobne, ale w tym przypadku użytkownik nie ma dostępu do powłoki

Znalazłem też ten wątek, który mówi o używaniu selinux lub LD_PRELOAD, ale nigdy wcześniej nie konfigurowałem selinux i nie mogę znaleźć informacji, jak to zrobić LD_PRELOAD.

może ktoś zrobił łatkę dla openssh, żeby to zaimplementować?

EDYCJA: Znalazłem ten raport o błędach, więc chyba nie został jeszcze zaimplementowany


Czy znalazłeś rozwiązanie tego problemu?
alex88,

Nie zrobiłem tego, chyba że nie da się tego zrobić, dopóki powyższy błąd nie zostanie zamknięty lub ktoś nie napisze łaty, aby to zaimplementować
Lluís

Odpowiedzi:


3

Zostało to zaimplementowane w OpenSSH 7.8p1, który został wydany 24.08.2018. Cytat z informacji o wersji:

dodaj dyrektywę PermitListen do sshd_config (5) i odpowiednią opcję permlisten = uprawnione klucze, które kontrolują, które adresy nasłuchiwania i numery portów mogą być używane przez zdalne przekazywanie (ssh -R ...).


4

Istnieje opcja no-port-forwarding, której można użyć, która uniemożliwia przekierowanie portów. Obecny przynajmniej od OpenSSH 4.3p2 (CentOS 5.3 - najstarsza maszyna, do której mam dostęp). Połóż to w tym samym miejscu, w którym byś znalazł permitopen.


13
Całkowite wyłączenie przekierowania portów wydaje się przesadne i nie nadaje się do pytania. Zakładam, że OP chce to ograniczyć , ale zezwalając na pewne określone przekierowania portów zdalnych.
gertvdijk

2
Tak, muszę zezwolić na przekierowanie niektórych portów
Lluís

0

Nie można tego ograniczyć za pomocą ssh. Być może do tego celu można wykorzystać selinux lub iptables. Istnieje jednak alternatywna strategia, która może, ale nie musi, odpowiadać Twoim potrzebom. Użyj powiązania z gniazdami UNIX. Powinno być dostępne od wersji openssh 6.8.

Korzystając z gniazd, masz do dyspozycji system plików ACL (chociaż gniazda bardziej zależą od * nix) do dyspozycji i możesz go użyć, aby uniemożliwić jednemu użytkownikowi powiązanie z innymi gniazdami. Jednak nie zapobiega w żaden sposób powiązaniu z portami, więc w zależności od przypadku użycia może nie pomóc, ale być może porty nie mają znaczenia, jeśli możesz konsekwentnie używać tylko gniazd.

W przypadku gniazd UNIX obsługa wiszących plików gniazd może być problematyczna, ponieważ wydawcy odwrotni próbują połączyć się ponownie. Mam inne pytanie (i odpowiedź) na ten problem. Krótko mówiąc, prawdopodobnie chcesz również użyć StreamLocalBindUnlink yes:

Jak wyczyścić gniazdo tunelu zwrotnego SSH po zamknięciu połączenia?


-1

Duplikat: /superuser/516417/how-to-restrict-ssh-port-forwarding-without-denying-it

Wygląda na to, że możesz użyć następujących?

W pliku konfiguracyjnym serwera znajduje się opcja PermitOpen . Tej opcji można użyć do określenia hostów i portów, dla których można ustanowić przekazywanie. Tej opcji można użyć wewnątrz bloku Dopasuj, więc może być ograniczona przez użytkownika, grupę lub nazwę hosta lub wzorzec adresu IP.

Edycja: Więc w konfiguracji serwera dodaj następujące

PermitOpen host: port

PermitOpen IPv4_addr: port

PermitOpen [IPv6_addr]: port


1
Tylko w U&L można oznaczyć jako duplikat.
GAD3R,

1
Jak stwierdzono w pytaniu, to dotyczy -L i jest już znane jako brak rozwiązania
alex88,

1
Czy kiedykolwiek będzie na to rozwiązanie (oprócz iptables)?
daveave
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.