Spraw, aby sshd nasłuchiwał określonego interfejsu

15

Na moim komputerze korzystam z OpenVPN, które używają interfejsu tun0. Chcę, aby sshd nasłuchiwał tylko na tym interfejsie.

Wiem, że mogę podać adres IP, na którym chcesz nasłuchiwać

/etc/ssh/sshd_config

z

ListenAddress 0.0.0.0

dyrektywa. Ale mój adres IP się zmieni, więc nie mogę tutaj wybrać adresu IP, który zawsze jest prawidłowy. Wiem, że mogę uruchomić demona tylko wtedy, gdy VPN jest włączony - to nie jest problem.

Jak sprawić, aby sshd nasłuchiwał tylko na określonym interfejsie (tun0)?

Philipp
źródło
2
Firewall poza portem 22 na innych portach, które nie są tun0?
NickW

Odpowiedzi:

7

Nie możesz tego zrobić bezpośrednio, ponieważ sshd rozpoznaje tylko adresy IP. Możesz być w stanie zrzucić coś za pomocą skryptu openvpn up

-up cmd Polecenie powłoki do uruchomienia po pomyślnym otwarciu urządzenia TUN / TAP (zmiana UID użytkownika przed). Skrypt up jest przydatny do określania poleceń trasy, które kierują ruch IP przeznaczony dla prywatnych podsieci, które istnieją na drugim końcu połączenia VPN do tunelu ...

Zobacz także --downopcję czyszczenia i odpowiednie części dokumentacji szczegółowo opisujące zabezpieczenia skryptu itp.

Przekonasz się, że adres IP urządzenia tun jest przekazywany do skryptu jako zmienna środowiskowa. Również sshd przyjmuje opcje w wierszu poleceń formularza

-oSomeOption=SomeValue

-o opcja Można użyć do podania opcji w formacie użytym w pliku konfiguracyjnym. Jest to przydatne do określania opcji, dla których nie ma oddzielnej flagi wiersza polecenia. Aby uzyskać szczegółowe informacje na temat opcji i ich wartości, zobacz sshd_config (5)

Więc możesz użyć

-o ListenAddress=<some address>

Prawdopodobnie masz jakąś metodę poza pasmem, aby porozmawiać ze swoim VPS, aby kiedy to się zepsuło, możesz skontaktować się z serwerem.

użytkownik9517
źródło
1
Spróbuj:-o ListenAddress=$(ip addr | awk '/inet/ && /tun0/{sub(/\/.*$/,"",$2); print $2}')
pjz
@pjz Nie sądzę, że musisz to robić, ponieważ jestem całkiem pewien, że adres IP urządzenia jest dostępny jako zmienna środowiskowa dla skryptu up. Po prostu nie mam pod ręką, żeby to przetestować.
user9517
1
Doskonały! Adres IP jest przekazywany do skryptu up jak ifconfig_local = 10.xx.xx.xx. Cały szereg innych danych (dev_type = tun, common_name = moja nazwa_serwera, ifconfig_remote, route_gateway_1, niezaufany_ip, ifconfig_local, proto_1, tls_serial_1, tls_serial_0 ...) są przekazywane dalej.
Philipp
Tak, wiem, a teraz ty też :)
user9517
3
Może chcesz edytować swoją odpowiedź i dodać odpowiednią nazwę zmiennej env? (dla przyszłych czytelników)
Philipp