Anonimizacja OpenVPN Zezwól SSH na dostęp do wewnętrznego serwera

10

Korzystam z anonimowej sieci VPN, ale chcę dostępu SSH do komputera wewnętrznego.

Jak uzyskać dostęp do mojego komputera wewnętrznego za pośrednictwem protokołu SSH? Kiedy wykonuję ssh 98.123.45.6 , połączenie wygasa .

  • Adres IP od dostawcy telewizji kablowej: 98.123.45.6
  • Anonimowe IP przez VPN: 50.1.2.3
  • Komputer wewnętrzny: 192.168.1.123

Podczas przeszukiwania znalazłem zalecenia, aby albo skonfigurować reguły iptables, reguły routingu, albo dodać ListenAddress do sshd_config. Który z nich dotyczy mojej sprawy?

Oto moja trasa :

Tabela routingu IP jądra
Brama docelowa Genmask Flagi Metryka Ref Użyj Iface
10.115.81.1 10.115.81.9 255.255.255.255 UGH 0 0 0 tun0
10.115.81.9 * 255.255.255.255 UH 0 0 0 tun0
50.1.2.3-sta ddwrt 255.255.255.255 UGH 0 0 0 eth0
192.168.1.0 * 255.255.255.0 U 202 0 0 eth0
169.254.0.0 * 255.255.0.0 U 204 0 0 vboxnet0
sprzężenie zwrotne * 255.0.0.0 U 0 0 0 lo
domyślnie 10.115.81.9 128.0.0.0 UG 0 0 0 tun0
128.0.0.0 10.115.81.9 128.0.0.0 UG 0 0 0 tun0
domyślnie ddwrt 0.0.0.0 UG 202 0 0 eth0
Lionel
źródło

Odpowiedzi:

15

Aby rozwiązać ten problem, musisz skonfigurować zarówno iptables, jak i reguły routingu. Szczególnym problemem, jaki napotykasz, jest to, że wychodzące pakiety SSH są kierowane przez anonimowy interfejs tunelowy VPN zamiast interfejsu Ethernet. Dzieje się tak, ponieważ oprogramowanie VPN skonfigurowało regułę routingu, aby wysyłać cały nieobsługiwany ruch przez interfejs tunelu. Dobry do anonimizacji ruchu sieciowego; zły dla nawiązywania połączeń SSH z komputerem.

Istnieje kilka sposobów rozwiązania tego problemu, ale podzielę się z Wami tym, który pracował dla mnie w identycznej sytuacji. Oto, co musimy zrobić:

  1. Utwórz nową tabelę reguł IP do obsługi ruchu innego niż VPN
  2. Dodaj regułę IP, aby wyszukać naszą tabelę bez VPN dla pakietów oznaczonych określoną maską netfilter
  3. Dodaj trasę IP, która kieruje cały ruch w naszej tabeli bez VPN, aby używać interfejsu Ethernet zamiast tunelu
  4. Dodaj regułę iptables, aby oznaczyć cały ruch SSH za pomocą naszej wyznaczonej maski netfilter

Uwaga: Pracowałem z Raspbian, wykonując następujące czynności, więc może być konieczne dostosowanie poleceń w celu dopasowania do dystrybucji.

Tworzenie nowej tabeli reguł IP

Rozpocznij od sprawdzenia pliku definicji tabeli iproute2. Chcemy mieć pewność, że nie używamy nazwy ani numeru żadnej istniejącej tabeli reguł.

cat /etc/iproute2/rt_tables

Prawdopodobnie zobaczysz coś według tych zasad:

# reserved values
255      local 
254      main
253      default   
0        unspec
#
# local
#
#1      inr.ruhep

Wybierz dowolny numer i nazwę dla nowej tabeli reguł - wszystko, czego nie użyjesz powyżej. W novpnpozostałej części tej odpowiedzi użyję numeru 201 i imienia .

Dodaj definicję bezpośrednio do pliku definicji lub edytuj ją w wybranym edytorze tekstowym:

echo "201 novpn" >> /etc/iproute2/rt_tables

Dodaj nową regułę IP, aby wyszukać tabelę bez VPN

Sprawdź wszelkie istniejące reguły IP dotyczące masek netfilter:

ip rule show | grep fwmark

Jeśli grep niczego nie wykryje, to wszystko jest jasne. Jeśli drukuje niektóre wiersze, zwróć uwagę na liczbę szesnastkową po prawej stronie słowa fwmarkw każdym wierszu. Musisz wybrać numer, który nie jest aktualnie używany. Ponieważ nie miałem żadnych reguł fwmark, wybrałem numer 65.

ip rule add fwmark 65 table novpn

Powoduje to, że wszystkie pakiety z maską netfilter 65 sprawdzają naszą nową novpntabelę pod kątem instrukcji, jak kierować pakiety.

Skieruj cały ruch w naszej nowej tabeli, aby korzystać z interfejsu Ethernet

ip route add default via YOUR.GATEWAY.IP.HERE dev eth0 table novpn

Należy tutaj zwrócić uwagę dev eth0. Zmusza to cały ruch przechodzący przez novpntabelę do korzystania wyłącznie ze sprzętowego interfejsu Ethernet zamiast wirtualnego interfejsu tunelu, który tworzy twoja sieć VPN.

Byłby to dobry moment na opróżnienie pamięci podręcznej iproute, aby mieć pewność, że nowe zasady i trasy odniosą natychmiastowy skutek:

ip route flush cache

Poinstruuj regułę zapory, aby oznaczyć cały ruch SSH za pomocą wyznaczonej maski netfilter

iptables -t mangle -A OUTPUT -p tcp --sport 22 -j MARK --set-mark 65

Jest tu zbyt wiele opcji, bym mógł je szczegółowo wyjaśnić. Gorąco zachęcam do przeczytania strony podręcznika dla iptables, aby dowiedzieć się, co się tutaj dzieje:

man iptables

W skrócie: dodajemy regułę wyjściową do tabeli zarządzającej zapory ogniowej (w celu specjalistycznej obsługi pakietów), która instruuje ją, aby oznaczała wszystkie pakiety TCP pochodzące z portu źródłowego 22 za pomocą naszej wyznaczonej maski 65 filtra sieci.

Co następne?

W tym momencie powinieneś być gotowy do przetestowania SSH. Jeśli wszystko pójdzie dobrze, powinieneś zobaczyć szczęśliwy komunikat „Zaloguj się jako”.

Ze względów bezpieczeństwa zalecam poinstruowanie zapory ogniowej, aby porzuciła wszelkie przychodzące żądania SSH z interfejsu tunelu:

iptables -A INPUT -i tun0 -p tcp -m tcp --dport 22 -j DROP

Zauważ, że wszystkie powyższe instrukcje są przejściowe (z wyjątkiem tworzenia identyfikatora tabeli reguł) - zostaną wyczyszczone przy następnym uruchomieniu komputera. Uczynienie ich trwałymi to ćwiczenie, które pozostawiam tobie.

Ben D.
źródło