Удаленный доступ к машине Linux за брандмауэром

11

Я собираюсь развернуть машину Linux как своего рода общедоступный терминал в удаленном месте. Я хотел бы иметь возможность удаленного доступа к нему через SSH для технического обслуживания, но я не хочу оставлять порт на удаленном брандмауэре открытым в тех редких случаях, когда мне нужен доступ к этой машине. Хотя у меня есть простой сценарий для создания обратного туннеля SSH к машине снаружи, но я бы предпочел не требовать, чтобы пользователь что-то делал, когда мне нужен доступ к нему. Любые идеи?

Обновление: я решил пойти с моим первоначальным планом сценария для создания обратного туннеля SSH. В то время как другие предлагаемые решения, такие как стук портов, были бы в большей степени похожи на то, что я действительно хочу сделать, в этом случае у меня нет никакого доступа для настройки маршрутизатора, кроме как пройти пользователя через конфигурацию. содрогаться

baudtack
источник
Вы не должны настраивать маршрутизатор. В Linux есть брандмауэр iptables, которого достаточно для безопасности брандмауэра. А создание всегда на ssh-туннеле к серверу делает его уязвимым для атак, выбрасывая хост, к которому он подключен.
Казимирас Алиулис
1
Я должен был бы открыть порт на маршрутизаторе, однако, чтобы передать все, что мне нужно, в ящик Linux. Туннель SSH не всегда. Он будет запущен пользователем, когда мне понадобится доступ к машине.
Бодэкт

Ответы:

5

Это связано не столько с тем, чтобы открывать порт, а с тем, чтобы не желать обходить пользователя через процесс открытия порта. К сожалению, у меня вообще нет доступа к этому роутеру.

Если об изменении маршрутизатора совершенно не может быть и речи, вам может понадобиться решение P2P или VPN, такое как Hamachi . Если вы настроите систему на автоматическое установление VPN-соединения при запуске, то вы сможете подключиться, когда вам это нужно. Hamachi делает все переговоры по брандмауэру за вас. Единственный недостаток - вы должны полагаться на работоспособность и работоспособность серверов Hamachi при подключении.

Если у вас есть постоянно работающий сервер, вы можете настроить autossh так, чтобы удаленная система всегда оставляла туннель открытым и подключенным к вашему серверу. Единственный недостаток заключается в том, что удаленная система скомпрометирована, и злоумышленник получит ключи, которые использовались для установки сеанса ssh. Было бы очень важно сохранить вашу систему, которая принимает соединение ssh, действительно заблокированной.


Ниже мой оригинальный ответ, я предположил, что обновление маршрутизатора было вариантом.

Одним из решений, которое вы, возможно, захотите исследовать, если ваш брандмауэр поддерживает это, является стук портов . В некоторых брандмауэрах должна быть возможность отправлять специальный набор пакетов, которые брандмауэр замечает, а затем временно открывает дыру в брандмауэре.

Есть много реализаций, некоторые из которых лучше, чем другие. Некоторые используют сильную криптографию, чтобы сделать практически невозможным для человека без правильных ключей послать правильный стук.

Zoredache
источник
Это звучит как отличная идея! К сожалению, рассматриваемый брандмауэр представляет собой простой пользовательский класс 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-адресов blackball, которые повторно проверяют вашу машину. Поскольку у вас есть настроенные ключи ssh, авторизованным пользователям не должно быть ошибок аутентификации.

В качестве альтернативы, если у вас есть возможность, прислушайтесь к совету WerkkreWs и настройте межсетевой экран перед машиной, чтобы разорвать соединение vpn, затем разрешите только демону ssh на удаленном сервере принимать соединения, проходящие через этот vpn.

В качестве альтернативы, если ваш брандмауэр не может разорвать соединение vpn, вы, вероятно, можете переслать пакеты GRE или IPSEC на свой Linux-компьютер и завершить его там.

Дейв Чейни
источник
Это связано не столько с тем, чтобы открывать порт, а с тем, чтобы не желать обходить пользователя через процесс открытия порта. К сожалению, у меня вообще нет доступа к этому роутеру.
Бодтак
Я понимаю и сочувствую вашей боли.
Дейв Чейни
2
Первым шагом в этом решении будет настройка sshd для работы на нестандартном порту. Есть много ботов, стучащих в порт 22 там. Выберите порт, который не отображается в / etc / services и "nmap HOST" не находит его.
Хаялчи
4

Похоже, вы ищете нокдаун

Вы можете установить это на самом сервере Linux с iptables, чтобы он был как брандмауэр 2-го уровня. Даже если порт 22 открыт на брандмауэре внешнего интерфейса, он не будет открыт на сервере, поэтому порты не будут видеть никаких открытых портов. Затем, когда вы отправляете «секретный стук», у вас внезапно появляется открытый путь к порту 22.

Имеет ли это смысл?

казарка
источник
Если я не ошибаюсь, мне придется перенаправить все порты детонации, верно? Разве это не будет очевидно, когда кто-то сканирует роутер? Они не знали бы порядок, но если отбросить возможные комбинации до 6, я помню, как правильно делать перестановки, дает им огромное преимущество. Или я думаю об этом неправильно?
Бодэкт
В то время как порты, используемые для детонации, должны быть перенаправлены, хост, на котором выполняется knockd, фактически не должен каким-либо образом отвечать источнику стука.
Zoredache
правильно - порты, открытые на первом брандмауэре, не будут открыты на 2-м, поэтому для сканера все они выглядят закрытыми. Нет способа отличить стучащие порты от не стучащих.
Брент
3

Подводя итог всем ответам:

используйте ssh, но сделайте его более неясным и безопасным.

Для безопасности:

  • Убедитесь, что вход в систему root не разрешен (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 хорошее резюме и интересная идея о трюке с несколькими попытками.
Дэвид Z
2

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

Если вы беспокоитесь о том, что SSH открыт для всего мира, вы можете запланировать задачу, когда у вас будет период обслуживания со сценариями iptables и только тогда будет доступен порт.

sclarson
источник
1
Согласовано. Если у вас нет возможности подключиться к VPN, единственное реальное решение - открыть порт. Если вы нервничаете по этому поводу, вы всегда можете использовать нестандартный порт.
WerkkreW
2

Загляните в порт, чтобы открыть свой SSH-туннель.

Кроме того, запустите denyhosts, чтобы заблокировать людей после слишком большого количества плохих запросов.

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

Тим Хоулэнд
источник
1

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

Брэд Гилберт
источник
0

Нет причин не засовывать дыру в брандмауэре, если вам нужен удаленный доступ к машине, хотя и редко.

Однако, если вы все еще не хотите (или не можете) открыть порт, простой сценарий оболочки может отслеживать доступный интернет-ресурс, которым вы управляете, и прислушиваться к команде запуска обратного туннеля. Учетные записи электронной почты, IRC-каналы и веб-страницы сразу приходят на ум в качестве триггерных устройств.

Конечно, это намного более хрупко и менее безопасно, чем просто открывать порт. Но я уверен, что у тебя есть свои причины.

Брайан
источник