Мы показали, как удаленно запускать WOL с помощью «Стука портов» на вашем маршрутизаторе. В этой статье мы покажем, как использовать его для защиты службы VPN.
Изображение Aviad Raviv & bfick.
Предисловие
Если вы использовали встроенную функциональность DD-WRT для VPN или у вас есть другой VPN-сервер в вашей сети, вы можете по достоинству оценить возможность защитить его от атак методом перебора, скрывая его за последовательностью стука. Сделав это, вы отфильтруете детей сценариев, которые пытаются получить доступ к вашей сети. С учетом сказанного, как указывалось в предыдущей статье, стук портов не является заменой хорошего пароля и/или политики безопасности. Помните, что при достаточном терпении злоумышленник может обнаружить последовательность и выполнить повторную атаку.
Также имейте в виду, что недостатком реализации этого является то, что когда любой клиент/клиенты VPN хотят подключиться, они должны запустить последовательность стуков заранее и что если они не могут завершить последовательность для по любой причине, они не смогут VPN вообще.
обзор
Чтобы защитить * службу VPN, мы сначала отключим все возможные связи с ней, заблокировав экземплярный порт 1723. Для достижения этой цели мы будем использовать iptables. Это потому, что именно так фильтруется связь в большинстве современных дистрибутивов Linux/GNU в целом и в DD-WRT в частности. Если вам нужна дополнительная информация о iptables, ознакомьтесь с его статьей в вики и посмотрите нашу предыдущую статью на эту тему. Как только служба защищена, мы создадим последовательность стуков, которая временно откроет порт для создания экземпляра VPN, а также автоматически закроет его через заданный промежуток времени, сохранив при этом уже установленный сеанс VPN.
Примечание. В этом руководстве в качестве примера используется служба PPTP VPN. С учетом сказанного, тот же метод можно использовать для других типов VPN, вам просто нужно изменить заблокированный порт и/или тип связи.
Предпосылки, предположения и рекомендации
- Предполагается/требуется наличие маршрутизатора DD-WRT с поддержкой Opkg.
- Предполагается/требуется, что вы уже выполнили действия, описанные в руководстве «Как попасть в вашу сеть (DD-WRT)».
- Предполагается некоторое знание сетей.
Давайте взломать.
По умолчанию Правило «Блокировать новые VPN» в DD-WRT
Хотя приведенный ниже фрагмент «кода», вероятно, подойдет для каждого уважающего себя iptables-дистрибутива Linux/GNU, поскольку существует очень много вариантов, мы покажем, как его использовать только в DD-WRT. Ничто не мешает вам, если вы хотите, реализовать это непосредственно на VPN-сервере. Однако то, как это сделать, выходит за рамки этого руководства.
Поскольку мы хотим расширить брандмауэр маршрутизатора, логично, что мы добавим в скрипт «брандмауэр». Это может привести к тому, что команда iptables будет выполняться каждый раз, когда брандмауэр обновляется, и, таким образом, мы сохраняем наше расширение для сохранения.
Из веб-интерфейса DD-WRT:
-
Перейдите в «Администрирование» -> «Команды».
-
Введите ниже «код» в текстовое поле:
inline = "$ (iptables -L INPUT -n | grep -n" состояние ОТНОШЕНО, УСТАНОВЛЕНО "| awk -F: {'print $ 1'})"; рядный = $ (($ рядный 2 + 1)); iptables -I INPUT "$ inline" -p tcp --dport 1723 -j DROP
- Нажмите «Сохранить брандмауэр».
- Готово.
Что это за команда “Вуду”?
Приведенная выше команда «волшебство вуду» выполняет следующие действия:
- Находит, где находится линия iptable, которая позволяет проходить через уже установленную связь. Мы делаем это потому, что: A. На маршрутизаторах DD-WRT, если служба VPN включена, она будет расположена чуть ниже этой линии, и B. Для нашей цели важно продолжать разрешать жить уже установленным сеансам VPN после стучит событие.
- Вычитает два (2) из выходных данных команды листинга, чтобы учесть смещение, вызванное заголовками информационных столбцов. Как только это будет сделано, добавьте один (1) к указанному выше номеру, чтобы добавляемое нами правило появилось сразу после правила, которое разрешает уже установленную связь. Я оставил здесь эту очень простую «математическую проблему», просто чтобы прояснить логику «почему нужно убрать одного с места правила вместо того, чтобы добавить к нему».
Конфигурация KnockD
Нам нужно создать новую последовательность запуска, которая позволит создавать новые VPN-соединения. Для этого отредактируйте файл knockd.conf, введя в терминале:
vi/opt/etc/knockd.конф
Добавьте к существующей конфигурации:
[включить-VPN]
последовательность = 02,02,02,01,01,01,2010,2010,2010
seq_timeout = 60
start_command = iptables -I INPUT 1 -s% IP% -p tcp --dport 1723 -j ПРИНЯТЬ
cmd_timeout = 20
stop_command = iptables -D INPUT -s% IP% -p tcp --dport 1723 -j ПРИНЯТЬ
Эта конфигурация будет:
- Установите окно возможности завершить последовательность до 60 секунд. (Рекомендуется сделать это как можно короче)
- Прослушайте последовательность из трех ударов по портам 2, 1 и 2010 (этот порядок преднамеренный, чтобы сбить сканеры портов с пути).
- Как только последовательность будет обнаружена, выполните команду start_command. Эта команда «iptables» поместит «принять трафик, предназначенный для порта 1723, откуда поступили удары» в верхней части правил брандмауэра. (Директива% IP% специально обрабатывается KnockD и заменяется IP-адресом происхождения выбивок).
- Подождите 20 секунд, прежде чем выдать «stop_command».
- Выполните команду «stop_command». Где эта команда «iptables» делает обратное и удаляет правило, разрешающее связь.
Вот и все, ваш VPN-сервис должен быть подключаемым только после успешного «стука».
Автор . Советы .
В то время как вы должны быть готовы, есть пара моментов, которые я должен упомянуть.
- Поиск проблемы. Помните, что если у вас возникли проблемы, сегмент «устранение неполадок» в конце первой статьи должен стать вашей первой остановкой.
- Если вы хотите, вы можете сделать так, чтобы директивы «start/stop» выполняли несколько команд, разделяя их с помощью полуколена (;) или даже сценария. Это позволит вам сделать некоторые изящные вещи. Например, я заставил knockd отправить мне * электронное письмо, сообщающее, что последовательность была запущена и откуда.
- Не забывайте, что «для этого есть приложение», и даже если оно не упомянуто в этой статье, вам предлагается воспользоваться программой для Android knocker от StavFX.
- Что касается Android, не забывайте, что есть PPTP VPN-клиент, обычно встроенный в ОС от производителя.
- Метод первоначальной блокировки чего-либо, а затем продолжения разрешения уже установленной связи, можно использовать практически для любой связи на основе TCP. На самом деле в фильмах Knockd на DD-WRT 1–6 я уже давно вернулся к тому, когда использовал в качестве примера протокол удаленного рабочего стола (RDP), использующий порт 3389.
Примечание. Чтобы сделать это, вам нужно получить на своем маршрутизаторе функцию электронной почты, которая в настоящее время действительно не работает, поскольку снимок SVN пакетов opkg в OpenWRT находится в беспорядке. Вот почему я предлагаю использовать knockd непосредственно на VPN-боксе, который позволяет вам использовать все опции отправки электронной почты, доступные в Linux/GNU, такие как SSMTP и sendEmail, чтобы упомянуть некоторые.
Кто беспокоит мой сон?