Анонімізація OpenVPN Дозволити доступ SSH до внутрішнього сервера


10

Я використовую VPN для анонімізації, але хочу отримати доступ SSH до внутрішнього комп'ютера.

Як отримати доступ до свого внутрішнього комп'ютера через SSH? Коли я роблю ssh 98.123.45.6 , час з'єднання закінчується.

  • IP-адреса від кабельного провайдера: 98.123.45.6
  • Анонімний IP через VPN: 50.1.2.3
  • Внутрішній комп’ютер: 192.168.1.123

Під час пошуку я знайшов рекомендації або встановити правила iptables, правила маршрутизації, або додати ListenAddress до sshd_config. Що з них стосується мого випадку?

Ось мій маршрут :

Таблиця маршрутизації IP ядра
Шлюз призначення Генмаска Прапори Метричні посилання Використання 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
петля * 255.0.0.0 U 0 0 0 ло
за замовчуванням 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
за замовчуванням ddwrt 0.0.0.0 UG 202 0 0 eth0

Відповіді:


15

Щоб вирішити цю проблему, вам потрібно буде встановити як iptables, так і правила маршрутизації. Конкретна проблема, з якою ви стикаєтесь, полягає в тому, що вихідні пакети SSH передаються через анонімний інтерфейс тунелю VPN замість інтерфейсу Ethernet. Це відбувається тому, що ваше програмне забезпечення VPN встановило правило маршрутизації для надсилання будь-якого і всього необробленого трафіку через інтерфейс тунелю. Добре підходить для анонімізації мережевого трафіку; погано для встановлення SSH-з'єднань з комп'ютером.

Є кілька способів виправити цю проблему, але я поділюся з вами тим, який працював на мене в ідентичній ситуації. Ось що нам потрібно зробити:

  1. Створіть нову таблицю правил IP для обробки не-VPN-трафіку
  2. Додайте правило IP для пошуку нашої таблиці без VPN для будь-яких пакетів, позначених певною маскою netfilter
  3. Додайте маршрут IP, який спрямовуватиме весь трафік у нашій таблиці без VPN, щоб використовувати ваш інтерфейс Ethernet замість тунелю
  4. Додайте правило iptables, щоб позначити весь трафік SSH нашою призначеною маскою netfilter

Примітка. Я працював з Raspbian, виконуючи наступні дії, тому вам може знадобитися трохи відкоригувати команди, щоб відповідати вашому дистрибутиву.

Створення нової таблиці правил IP-адреси

Почніть з огляду файлу визначення таблиці iproute2. Ми хочемо переконатися, що ми не використовуємо ім’я чи номер будь-яких існуючих таблиць правил.

cat /etc/iproute2/rt_tables

Ви, ймовірно, побачите щось у цьому напрямку:

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

Виберіть довільне число та назву для своєї нової таблиці правил - все, що не використовується вище. Я використаю номер 201 та ім’я novpnдля залишку цієї відповіді.

Додайте визначення безпосередньо до файлу визначення або відредагуйте його в текстовому редакторі на ваш вибір:

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

Додайте нове правило IP для пошуку таблиці без VPN

Перевірте наявність існуючих правил ip, які стосуються масок netfilter:

ip rule show | grep fwmark

Якщо греп нічого не виявиться, ви в чистоті. Якщо він друкує деякі рядки, врахуйте шістнадцятковий номер праворуч від слова fwmarkу кожному рядку. Вам потрібно буде вибрати номер, який наразі не використовується. Оскільки у мене не було існуючих правил fwmark, я вибрав число 65.

ip rule add fwmark 65 table novpn

Це означає, що будь-які пакети з netfilter mask 65 шукають у нашій новій novpnтаблиці інструкції щодо маршрутизації пакетів.

Спрямуйте весь трафік у нашій новій таблиці, щоб використовувати інтерфейс Ethernet

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

Тут важливо зауважити dev eth0. Це змушує весь трафік, який проходить через novpnтаблицю, використовувати лише апаратний інтерфейс Ethernet, а не інтерфейс віртуального тунелю, який створює ваш VPN.

Зараз би вдалий час, щоб очистити кеш iproute, щоб переконатися, що ваші нові правила та маршрути негайно діють:

ip route flush cache

Інструктуйте правило брандмауера, щоб позначити весь трафік SSH за допомогою призначеної маски netfilter

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

Тут є занадто багато варіантів для мене, щоб пояснити в будь-якій великій глибині. Я настійно рекомендую прочитати сторінку керівництва для iptables, щоб зрозуміти, що тут відбувається:

man iptables

Коротше кажучи: ми додаємо правило виводу до таблиці манжела брандмауера (для спеціалізованої обробки пакетів), яка дає йому вказівку позначити будь-які пакети TCP, що походять з вихідного порту 22, за допомогою нашої призначеної мережі Netfilter 65.

Що далі?

У цей момент ви повинні бути готові до тестування SSH. Якщо все піде добре, вам слід зустріти радісне підказку "Логін як".

З метою безпеки я рекомендую вам доручити брандмауеру відмовитись від вхідних запитів SSH з інтерфейсу тунелю:

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

Зауважте, що всі вищезазначені інструкції є тимчасовими (за винятком створення ідентифікатора таблиці правил) - вони очистяться наступного разу при перезавантаженні комп'ютера. Робити їх постійними - це вправа, яку я залишаю вам.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.