Віддалений доступ до машини Linux за брандмауером


11

Я буду розгортати машину Linux як своєрідний громадський термінал у віддаленому місці. Я хотів би мати доступ до нього дистанційно через SSH для обслуговування, але я не хочу тримати порт відкритим на віддаленому брандмауері в рідкісні випадки, коли мені потрібно отримати доступ до цієї машини. Я хоч і про простий скрипт, щоб створити зворотний тунель SSH на машині ззовні, але я не хотів би, щоб користувач мав нічого робити, коли мені потрібно отримати доступ до нього. Будь-які ідеї?

Оновлення: я вирішив розпочати свій оригінальний план сценарію для створення зворотного ssh-тунелю. Хоча інші запропоновані рішення, наприклад, стукання портів, будуть більше узгоджуватись із тим, що я дійсно хочу зробити, у цьому випадку я не маю жодного доступу для налаштування маршрутизатора, окрім прогулянки користувача через конфігурацію. здригаються


Ви не повинні налаштувати маршрутизатор. Linux має брандмауер iptables, якого достатньо для захисту брандмауера. І якщо зробити тунель завжди на ssh на сервер, він робить його вразливим до атаки, кидає хоста, до якого він підключений.
Казім'єрас Аліуліс

1
Мені доведеться відкрити порт на маршрутизаторі, однак передати все, що мені потрібно, до вікна Linux. СШ тунель не завжди. Це буде запущено користувачем у тому кінці, коли мені потрібен доступ до машини.
бодотак

Відповіді:


5

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

Якщо про зміну маршрутизатора зовсім не виникає сумніву, можливо, вам доведеться переглянути рішення P2P або VPN, як Hamachi . Якщо ви налаштуєте систему для автоматичного встановлення VPN-з'єднання при запуску, вам слід мати змогу підключатися, коли вам потрібно. Hamachi робить усі переговори про брандмауер за вас. Єдиним недоліком є ​​те, що ви повинні покластися на те, що сервери Hamachi справні та функціональні, коли вам потрібно підключитися.

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


Нижче моя оригінальна відповідь, я припускав, що оновлення маршрутизатора - це варіант.

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

Є багато реалізацій, які краще, ніж інші. Деякі використовують сильну криптографію, щоб зробити людину без правильних клавіш майже неможливою відправити правильний стук.


Це звучить як чудова ідея! На жаль, питання про брандмауер - це просто звичайний споживчий клас Linksys або його аналог.
бодотака

1
Якщо ви можете встановити dd-wrt, ви можете використовувати knockd ( dd-wrt.com/wiki/index.php/Knockd )
Zoredache

@Zoredache Правда, але це у віддаленому місці. У мене немає доступу до цього маршрутизатора, і я здригнувся від думки намагатися пройти користувача через встановлення dd-wrt.
бодотака

Я згоден, що це, мабуть, правильний спосіб встановити це, за умови, що я мав фізичний доступ до маршрутизатора для встановлення dd-wrt.
бодотака

З тих пір, як Hamachi придбав LogMeIn, користувачі Linux виявили неприйнятну увагу. Я вважаю продукт ненадійним, коли машини Linux є частиною моєї мережі hamachi.
bmb

6

Я б не турбувався про те, щоб залишити порт 22 доступним для Інтернету, але я б вжив певних кроків для його захисту.

По-перше, відключіть інтерактивну аутентифікацію клавіатури та перейдіть до ssh-клавіш.

По-друге, встановіть щось на кшталт fail2ban на віддаленому сервері, щоб заштрихувати IP-адреси, які повторно перевіряють вашу машину. Оскільки у вас є ключі налаштування ssh, не повинно бути помилок аутентифікації для авторизованих користувачів.

Якщо ви можете, скористайтеся порадою WerkkreWs і налаштуйте брандмауер перед пристроєм для припинення з'єднання vpn, тоді дозвольте лише демон ssh на віддаленому сервері приймати з'єднання, що надходять через цей vpn.

Крім того, якщо ваш брандмауер не може перервати з'єднання vpn, ви, ймовірно, можете переслати пакети GRE або IPSEC на вашу машину Linux і завершити його там.


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

Я розумію і співчуваю вашому болю.
Дейв Чейні

2
Першим кроком у цьому рішенні було б налаштувати sshd для запуску на нестандартному порту. Там багато ботів стукають на порт 22. Виберіть порт, який не відображається в / etc / services, і "nmap HOST" не знайде його.
hayalci

4

Це здається, що ви шукаєте стук

Ви можете встановити це на самому сервері Linux, за допомогою iptables, так що це схоже на брандмауер другого рівня. Навіть якщо порт 22 відкритий на фронтальному брандмауері, він би не був відкритий на сервері, тому портикани не побачать жодних відкритих портів. Потім, коли ви відправляєте "таємний стук", раптом у вас відкритий шлях до порту 22.

Чи має це сенс?


Якщо я не помиляюся, мені доведеться також переслати всі порту стулки так, чи не так? Це не було б очевидно, коли хтось сканував маршрутизатор? Вони не знають порядку, але скидання можливих комбінацій до 6, якщо я пам'ятаю, як правильно робити перестановки, дає їм величезний початок. Або я думаю про це неправильно?
бодотака

У той час як порти, які використовуються для збивання, потрібно переадресувати, хост knockd хоста насправді не повинен жодним чином відповідати на джерело стуку.
Зоредаче

правильно - порти, відкриті на першому брандмауері, не будуть відкритими на другому, тому для сканера всі вони здаються закритими. Ні в якому разі не можна відрізнити стукітні порти від небійних.
Brent

3

Щоб підбити підсумки всіх відповідей:

використовувати ssh, але зробити його більш незрозумілим та захищеним.

Для безпеки:

  • Переконайтесь, що вхід у корінь не дозволено (PermitRootLogin ні).
  • Обмежити користувачів, які можуть увійти за допомогою параметра налаштування AllowUsers або AllowGroups.
  • Переконайтеся, що він використовує лише 2 протоколи ssh (протокол 2).
  • Доцільно використовувати тільки ключі аутентифікації, але пароль зручніше, коли може виникнути необхідність підключення до сервера з відпустки, де у вас немає доступу до ключів аутентифікації.

Для незрозумілості:

  • Змініть ssh-порт на якийсь випадковий високий порт, який ви б пам’ятали, як, наприклад, 20486. Це дозволить позбутися більшості автоматичних брутефорсерів, але це не приховуватиме його від усієї перевірки портів на сервері.
  • Приховати можливість підключення до порту. Один із способів - це стукіт портів, згаданий в інших відповідях, але вам потрібне спеціальне програмне забезпечення, яке не може бути доступним скрізь. Ще один простий варіант - використовувати брандмауер iptables з останнім модулем для створення правила, яке дозволить підключитися лише під час другої або третьої спроби. Отже, ви знаєте, що вам доведеться кілька разів спробувати підключитися успішно, але просте сканування всіх портів не виявить ssh-порт. Правила будуть подібними до таких:


iptables -A INPUT -m tcp -p tcp --dport 20486 -m state --state NEW -m recent --set
iptables -A INPUT -m tcp -p tcp --dport 20486 -m state --state NEW  -m recent --rcheck --seconds 60 --hitcount 2 -j ACCEPT
iptables -A INPUT -m tcp -p tcp --dport 20486 -j DROP


+1 приємне резюме та цікава ідея про трюк із кількома спробами.
David Z

2

Заплановано завдання скрипт для зворотного SSH тунелю або відкрийте порт брандмауера.

Якщо ви турбуєтесь про те, щоб SSH був відкритий для світу, ви можете запланувати завдання, коли у вас буде період технічного обслуговування зі скриптами iptables, і лише тоді буде доступний порт.


1
Домовились. Якщо у вас немає шляху до VPN, єдине реальне рішення - це в основному відкрити порт. Якщо вас це нервує, ви завжди можете використовувати нестандартний порт.
WerkkreW

2

Погляньте на стукіт портів, щоб відкрити свій тунель SSH.

Крім того, запустіть заборонені блоки, щоб заблокувати людей після занадто багато поганих запитів.

Обидва пакети доступні у стандартних сховищах Ubuntu, Fedora та RHEL.


1

Вперед і відкрийте порт, просто зробіть його поза межами нормального діапазону. Я зробив би це якийсь випадковий порт за 1024. Таким чином, хакерам навряд чи вдасться його шукати.


0

Немає причин не тріпати отвір у брандмауері, якщо вам потрібен доступ до машини віддалено, проте нечасто.

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

Звичайно, це набагато крихкіше і менш безпечно, ніж просто відкрити порт. Але я впевнений, що у вас є свої причини.

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