LinuxКак сделать

Как использовать стук портов в Linux (и почему не стоит)

Рука стучится в закрытую дверь.
Photographee.eu/Shutterstock

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

Стук в порт — «секретный стук»

В 1920-х годах, когда запрет был в полном разгаре, если вы хотели попасть в спикзи, вы должны были знать секретный стук и правильно его нажимать, чтобы попасть внутрь.

Стук в порт — современный эквивалент. Если вы хотите, чтобы люди имели доступ к службам на вашем компьютере, но не хотели открывать брандмауэр в Интернете, вы можете использовать стук портов. Это позволяет вам закрыть порты на вашем брандмауэре, которые разрешают входящие соединения, и автоматически открывать их, когда делается заранее установленная схема попыток соединения. Последовательность попыток соединения действует как секретный стук. Еще один секретный стук закрывает порт.

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

Наиболее надежные подходы к кибербезопасности являются многослойными, поэтому, возможно, стук портов должен быть одним из этих уровней. Чем больше слоев, тем лучше, верно? Тем не менее, вы можете утверждать, что стук портов не добавляет много (если вообще что-то) к должным образом укрепленной, безопасной системе.

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

СВЯЗАННЫЕ: Как создать и установить ключи SSH из оболочки Linux

Установка knockd

Чтобы продемонстрировать стук портов, мы собираемся использовать его для управления портом 22, который является портом SSH. Мы будем использовать инструмент под названием knockd . Используйте apt-get для установки этого пакета в вашу систему, если вы используете Ubuntu или другой дистрибутив на основе Debian. В других дистрибутивах Linux используйте инструмент управления пакетами вашего дистрибутива Linux.

Введите следующее:

  sudo apt-get установить knockd 

Команда sudo apt-get install knockd в окне терминала.

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

Введите следующее, чтобы установить его:

  sudo apt-get установить iptables-persistent 

Команда sudo apt-get install iptables-persistent в окне терминала.

Когда появится экран конфигурации IPV4, нажмите клавишу пробела, чтобы принять опцию «Да».

Нажмите клавишу пробела, чтобы принять параметр «Да» на экране iptables-persistent IPV4.

Снова нажмите клавишу пробела на экране конфигурации IPv6, чтобы принять опцию «Да» и двигаться дальше.

Нажмите клавишу пробела, чтобы принять опцию «Да» на экране конфигурации IPv6.

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

Если кто-то подключается через SSH при выполнении этой команды, мы не хотим, чтобы его отключали:

  sudo iptables -A INPUT -m conntrack --ctstate УСТАНОВЛЕНО, СВЯЗАНО -j ПРИНЯТЬ 

Команда sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED, RELATED -j ACCEPT в окне терминала.

Эта команда добавляет правило брандмауэра, которое гласит:

  • -A : добавить правило в таблицу правил брандмауэра. То есть, добавьте это в основание.
  • INPUT : это правило о входящих соединениях.
  • -m conntrack : правила брандмауэра действуют на сетевой трафик (пакеты), которые соответствуют критериям в правиле. Параметр -m заставляет iptables использовать дополнительные модули сопоставления пакетов — в этом случае тот, который называется conntrack работает с возможностями отслеживания сетевых подключений ядра.
  • –Cstate ESTABLISHED, RELATED : указывает тип соединения, к которому будет применяться правило, а именно соединения ESTABLISHED и RELATED. Установленное соединение уже установлено. Связанное соединение — это соединение, созданное в результате действия установленного соединения. Возможно, кто-то, кто подключен, хочет скачать файл; это может произойти через новое соединение, инициированное хостом.
  • -j ПРИНЯТЬ : если трафик соответствует правилу, перейти к цели ПРИНЯТЬ в брандмауэре. Другими словами, трафик принимается и разрешается проходить через брандмауэр.

Теперь мы можем выполнить команду, чтобы закрыть порт:

  sudo iptables -A INPUT -p tcp --dport 22 -j ОТКАЗАТЬ 

Команда "sudo iptables -A INPUT -p tcp --dport 22 -j ОТКЛОНИТЬ в окне терминала" в окне терминала.

Эта команда добавляет правило брандмауэра, которое гласит:

  • -A : добавить правило в таблицу правил брандмауэра, т.е. добавить его внизу.
  • INPUT : это правило касается входящих соединений.
  • -p tcp : это правило применяется к трафику, который использует протокол управления передачей.
  • –Dport 22 : Это правило особенно применимо к трафику TCP, который нацелен на порт 22 (порт SSH).
  • -j REJECT : если трафик соответствует правилу, перейдите к цели REJECT в брандмауэре. Таким образом, если трафик отклонен, он не разрешен через брандмауэр.

Мы должны запустить демон netfilter-persistent . Мы можем сделать это с помощью этой команды:

  sudo systemctl start netfilter-persistent 

"sudo systemctl start netfilter-persistent" в окне терминала.

Мы хотим, чтобы netfilter-persistent проходил цикл сохранения и перезагрузки, поэтому он загружает и контролирует правила iptable .

Введите следующие команды:

  sudo netfilter-persistent save 

"sudo netfilter-persistent save" в окне терминала.

  sudo netfilter-persistent reload 

"sudo netfilter-persistent reload" в окне терминала.

Теперь вы установили утилиты, и порт SSH закрыт (надеюсь, без прерывания чьего-либо соединения). Теперь пришло время настроить секретный стук.

Конфигурирование knockd

Для настройки knockd вы редактируете два файла. Первый — это следующий knockd конфигурации knockd :

  sudo gedit /etc/knockd.conf 

"sudo gedit /etc/knockd.conf" в окне терминала.

Редактор gedit открывается с knockd файлом конфигурации knockd .

Файл конфигурации knockd в редакторе gedit.

Мы отредактируем этот файл в соответствии с нашими потребностями. Интересующие нас разделы: «openSSH» и «closeSSH». В каждом разделе находятся следующие четыре записи:

  • последовательность : последовательность портов, к которой кто-то должен получить доступ, чтобы открыть или закрыть порт 22. Порты по умолчанию: 7000, 8000 и 9000, чтобы открыть его, и 9000, 8000 и 7000, чтобы закрыть его. Вы можете изменить их или добавить больше портов в список. Для наших целей мы будем придерживаться значений по умолчанию.
  • seq_timeout : период времени, в течение которого кто-то должен получить доступ к портам, чтобы инициировать его открытие или закрытие.
  • команда : команда, отправленная брандмауэру iptables при iptables действия открытия или закрытия. Эти команды либо добавляют правило в брандмауэр (чтобы открыть порт), либо убирают его (чтобы закрыть порт).
  • tcpflags : тип пакета, который каждый порт должен получить в секретной последовательности. Пакет SYN (синхронизация) является первым в запросе соединения TCP , который называется трехсторонним рукопожатием .

Раздел «openSSH» можно прочесть как «запрос TCP-соединения должен быть сделан на порты 7000, 8000 и 9000 — в таком порядке и в течение 5 секунд — чтобы команда открыла порт 22 для отправки на брандмауэр».

Раздел «closeSSH» можно прочесть как «запрос на соединение TCP должен быть сделан для портов 9000, 8000 и 7000 — в этом порядке и в течение 5 секунд — чтобы команда закрыть порт 22 была отправлена ​​брандмауэру».

Правила брандмауэра

Записи «команды» в разделах openSSH и closeSSH остаются неизменными, за исключением одного параметра. Вот как они состоят:

  • -A : добавить правило в конец списка правил брандмауэра (для команды openSSH).
  • -D : удалить команду из списка правил брандмауэра (для команды closeSSH).
  • INPUT : это правило касается входящего сетевого трафика.
  • -s% IP% : IP-адрес устройства, запрашивающего соединение.
  • -p : сетевой протокол; в данном случае это TCP.
  • –Dport : порт назначения; в нашем примере это порт 22.
  • -j ПРИНЯТЬ : перейти к цели принятия в брандмауэре. Другими словами, пусть пакет пропустит остальные правила, не воздействуя на него.

Редактирование файла конфигурации knockd

Изменения, которые мы внесем в файл, выделены красным цветом ниже:

Файл конфигурации knockd в редакторе gedit с выделенными изменениями.

Мы расширяем «seq_timeout» до 15 секунд. Это щедро, но если кто-то запускает запросы на подключение вручную, ему может понадобиться много времени.

В разделе «openSSH» мы меняем опцию -A (добавление) в команде на -I (вставка). Эта команда вставляет новое правило брандмауэра в начало списка правил брандмауэра. Если вы оставите параметр -A , он добавит список правил брандмауэра и поместит его внизу .

Входящий трафик проверяется по каждому правилу брандмауэра в списке сверху вниз. У нас уже есть правило, которое закрывает порт 22. Таким образом, если входящий трафик проверяется по этому правилу до того, как он увидит правило, разрешающее трафик, в соединении будет отказано; если он сначала видит это новое правило, соединение разрешается.

Команда close удаляет правило, добавленное openSSH, из правил брандмауэра. Трафик SSH снова обрабатывается ранее существовавшим правилом «порт 22 закрыт».

После внесения этих изменений сохраните файл конфигурации.

СВЯЗАННЫЕ: Как графически редактировать текстовые файлы в Linux с помощью gedit

Редактирование файла управления knockd

Управляющий файл knockd в целом проще. Прежде чем мы погрузимся и отредактируем это, нам нужно знать внутреннее имя нашего сетевого подключения; чтобы найти его, введите эту команду:

  IP-адрес 

Команда «ip addr» в окне терминала.

Соединение, которое эта машина использует для исследования этой статьи, называется enp0s3 . Запишите имя вашей связи.

Следующая команда редактирует управляющий файл knockd :

  sudo gedit / etc / default / knockd 

Команда "sudo gedit / etc / default / knockd" в окне терминала.

Вот файл knockd в gedit .

Управляющий файл knockd в gedit.

Несколько правок, которые нам нужно сделать, выделены красным:

Файл управления knockd в gedit с выделенными правками.

Мы изменили запись «START_KNOCKD =» с 0 на 1.

Мы также удалили хеш-код с начала записи «KNOCKD_OPTS =» и заменили «eth1» именем нашего сетевого подключения enp0s3 . Конечно, если ваше сетевое соединение является eth1 , вы не измените его.

Доказательство в пудинге

Пришло время посмотреть, работает ли это. Мы knockd демон knockd с помощью этой команды:

  sudo systemctrl начало knockd 

Команда sudo systemctrl start knockd в окне терминала.

Теперь мы прыгнем на другую машину и попробуем подключиться. Мы также установили инструмент knockd на этот компьютер не потому, что хотим настроить детонацию портов, а потому, что пакет knockd предоставляет еще один инструмент под названием knock . Мы будем использовать эту машину для стрельбы в нашей секретной последовательности и постучать за нас.

Используйте следующую команду, чтобы отправить вашу секретную последовательность запросов на подключение к портам хост-компьютера, который выбивает порт с IP-адресом 192.168.4.24:

  стук 192.168.4.24 7000 8000 9000 -d 500 

Это говорит knock чтобы нацелить компьютер на IP-адрес 192.168.4.24 и запустить запрос на подключение к портам 7000, 8000 и 9000, в свою очередь, с -d (задержка) между ними составляет 500 миллисекунд.

Затем пользователь с именем «dave» отправляет запрос SSH на 192.168.4.24:

  ssh dave @ 192.168.4.24 

Его соединение принято, он вводит свой пароль, и начинается его удаленный сеанс. Его командная dave@nostromo меняется с dave@nostromo на dave@ . Чтобы выйти из удаленного компьютера, он набирает:

  выход 

Его командная строка возвращается на локальный компьютер. Он использует knock еще раз, и на этот раз он выбирает порты в обратном порядке, чтобы закрыть порт SSH на удаленном компьютере.

  стук 192.168.4.24 9000 8000 7000 -d 500 

Стук порта и сессия соединения ssh в окне терминала.

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

Итак, как это выглядело с другой стороны? Системный администратор на узле, блокирующем порт, использует следующую команду для просмотра новых записей, поступающих в системный журнал:

  tail -f / var / log / syslog 

Системный журнал, показывающий события стука порта в окне терминала.

  • Вы видите три записи openSSH. Они поднимаются, поскольку каждый порт предназначен для утилиты удаленного стука.
  • Когда все три стадии последовательности запуска выполнены, запись « ОТКРЫТЬ СЕЗАМ » регистрируется
  • Команда для iptables правила в список правил iptables отправляется. Он разрешает доступ через SSH через порт 22 с определенного IP-адреса ПК, который дал правильный секретный стук (192.168.4.23).
  • Пользователь «Дэйв» подключается только на несколько секунд, а затем отключается.
  • Вы видите три записи closeSSH. Они поднимаются, поскольку каждый порт предназначен для утилиты удаленного детонации — он сообщает хосту детонации портов закрыть порт 22.
  • После запуска всех трех этапов мы снова получаем сообщение «ОТКРЫТЬ СЕЗАМ». Команда отправляется на брандмауэр для удаления правила. (Почему не «ЗАКРЫТЬ СЕЗАМ», когда он закрывает порт? Кто знает?)

Теперь единственное правило в списке правил iptables порта 22 — это правило, которое мы ввели в начале, чтобы закрыть этот порт. Итак, порт 22 теперь снова закрыт.

Стукни по голове

Это хитрость в порте. Относитесь к этому как к развлечению и не делайте этого в реальном мире. Или, если нужно, не полагайтесь на это как на единственную форму безопасности.

Похожие посты
Как сделать

Как получить возмещение за покупки в iTunes или App Store

Как сделать

Поверхностное перо не работает? Вот как это исправить

Как сделать

Как настроить и использовать Fire TV Recast

Как сделать

Как изменить рингтон по умолчанию на вашем iPhone