Защита SSH через port knocking

Защита SSH через port knocking
Photo by Kelly Sikkema / Unsplash

Иногда, по каким-то причинам необходимо закрыть какой-то порт так, чтоб к нему все же оставался доступ с любого IP адреса.
Например, регулятор требует, чтоб SSH порт был закрыт для всего мира.

На выручку приходит port knocking.

Итак, поставим knockd и настроим его так, чтоб SSH был закрыт, но открывался при попытке соединиться с последовательносью портов.

Установка knockd

sudo apt install knockd
sudo vim /etc/knockd.conf

Тут у нас есть уже настроенные правила, которые нам надо поправить. Меняем порты в которые мы будем стучаться, чтоб открылся наш SSH.

[openSSH]
	sequence    = 2233,2244,2255
	command     = /sbin/iptables -I INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
...

[closeSSH]
	sequence    = 12322

Тут мы поменяли список портов и команде сменили -A и -I, что означает делать вставку правила файервола в начало списка правил, вместо того, чтоб добавлять его в конец.

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

sudo ip addr
sudo vim /etc/default/knockd

Тут раскоментируем строку и вписываем правильное имя интерфейса:

...
KNOCKD_OPTS="-i ens18"

Iptables

Дальше настраиваем файервол:

sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 22 -j REJECT

и делаем его активным после перезагрузки:

sudo apt install iptables-persistent

При установке соглашаемся сохранить наши существующие правила файервола.

Осталось перезапустить сервис knockd и проверить как все работает.

sudo service knockd restart

Подключаемся:

telnet ip 2233
telnet ip 2244
telnet ip 2255
ssh ip

Вот и все. SSH порт откроется для вашего текущего IP адреса и пустит вас на сервер.

Чтоб закрыть порт нужно постучать в указанный порт:

telnet ip 12322

Read more

🔄 Своя Dropbox-альтернатива: Syncthing

🔄 Своя Dropbox-альтернатива: Syncthing

🧠 Зачем? Облачные сервисы — удобно, но: * не хочется платить Google/Dropbox за хранение своих файлов * хочется моментально синхронизировать фото, документы и заметки между устройствами * и делать это на своём сервере, без отправки данных «в облако» 👉 Решение — Syncthing: децентрализованный, зашифрованный, open source-синк между любыми устройствами. 🚀 Что ты получишь? * 📂 Автосинк папок между сервером,

🎧 Свой подкаст-сервер за 5 минут: Podgrab

🎧 Свой подкаст-сервер за 5 минут: Podgrab

✨ Зачем? Подкасты — отличный способ учиться, развлекаться и быть в курсе мира. Но что, если: * Хочется слушать подкасты офлайн * Хочется архивировать любимые шоу * Не устраивают сторонние сервисы, реклама и трекеры Решение: Podgrab — простой подкаст-граббер, который автоматически скачивает новые выпуски с любого RSS. А в связке с Audiobookshelf ты получаешь полноценный медиасервер.

Безопасное управление конфигурациями в Ansible: Полное руководство по использованию rescue и always

Безопасное управление конфигурациями в Ansible: Полное руководство по использованию rescue и always

Введение: Почему это важно В мире DevOps и системного администрирования существует простое правило: всё ломается. Особенно в самый неподходящий момент. Когда вы изменяете конфигурацию критического сервиса (например, Nginx), цена ошибки может быть очень высока — от простого даунтайма до потери данных. Ansible предлагает элегантное решение для безопасного внесения изменений через механизм

Использование ~/.ssh/authorized_keys для управления входящими SSH-соединениями

Использование ~/.ssh/authorized_keys для управления входящими SSH-соединениями

Файл ~/.ssh/authorized_keys позволяет настроить команды, которые будут выполняться при входящих SSH-соединениях. Это полезный инструмент для управления доступом и обеспечения безопасности, особенно при работе с резервным копированием данных. Настройка резервного копирования с использованием authorized_keys В данном примере рассматривается использование authorized_keys для настройки резервного копирования базы данных Bacula