...

пятница, 20 сентября 2013 г.

[Из песочницы] Защищаем систему. Или как настроить и использовать port knocking

Салам-папалам всем!

Тут озадачился как же можно сделать свой сервер более безопаснее. Использование напрямую iptables с блокировкой по IP не решало проблемы, т.к. я могу к серверу подсоединяться не только с рабочего ПК, но и издому, или с другого города, или в автобусе (когда в пробках стою).

Решил использовать port knocking.

Кто ни разу не пользовался этим, милости прошу под кат.


Для тех кто не в теме кратко скажу: это демон, который «слушает» сетевой интерфейс и если «услышал», что идут запросы на 7000,8000,9000 порт, то добавляет разрешающее правило для вашего IP на определённый заранее вами порт. Она просто выполняет команду на разрешение или запрещение доступа в iptables.


Итак, я захотел прикрыть от всех ssh.

Сперва установим сам демон (для тестов я использовал свой рабочий ПК на Ubuntu):



sudo apt-get install knockd


Для CentOS можно установить так:



sudo rpm -Uhv http://pkgs.repoforge.org/knock/knock-0.5-3.el6.rf.x86_64.rpm


Далее нам надо отредактировать конфиг этого демона ( /etc/knockd.conf ):



[options]
UseSyslog

[openSSH]
sequence = 7000:tcp,8000:tcp, 9000:udp
seq_timeout = 5
command = /sbin/iptables -I INPUT 1 -s %IP% -d -p tcp --dport 22 -j ACCEPT
tcpflags = syn

[closeSSH]
sequence = 9000:udp,8000:tcp,7000:tcp
seq_timeout = 5
command = /sbin/iptables -D INPUT -s %IP% -d ВАШ_IP_ГДЕ_ХОТИТЕ_ПРИКРЫТЬ_ДОСТУП -p tcp --dport 22 -j ACCEPT
tcpflags = syn



Затем перезапускаем демон:



sudo /etc/init.d/knockd restart


Далее, добавляем запрещающее правило для всех на 22-ой порт:



sudo iptables -A INPUT -s 0/0 -d ВАШ_IP_ГДЕ_ХОТИТЕ_ПРИКРЫТЬ_ДОСТУП -p tcp --dport 22 -j REJECT


В секции [openSSH] обратите внимание на строчки -I INPUT 1. Если мы просто напишем вместо этого -A INPUT, то оно будет добавляться в конец цепочки правил, и следовательно будет срабатывать только самое верхнее правило. Поэтому мы пишем так, что бы запрещающее правило было добавлено в конец.

sequence указывает на то, какими последовательностями портов мы будем открывать себе доступ. Обязательно укажите на своё.

Можно еще указать протокол, допустим так: 7000:udp, 8000:udp, 9000:tcp

tcpflags — тут мы указываем какие заголовки должны содержаться в передаваемых пакетах.


В секции [closeSSH] указываем обратную последовательность для закрытия 22-го порта. И там же команда на удаление вашего IP из списка разрешенных.


Теперь встаёт вопрос: как же послать эту волшебную последовательность на порты?

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

В Windows я пользовался так: скачал, распаковал. Открыл командную строку,



cd ПУТЬ_ДО_ПАПКИ_С_ПРОГРАММОЙ
knock 192.168.0.1 7000:tcp 8000:tcp 9000:udp




Всё, открыли порт. Теперь мы можем заходить по SSH!

Если хотите для другого протокола это использовать, то таким же способом напишите секцию [openFTP], [closeFTP] с теми же правлами, только порты поменяйте на нужное и всё.

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


Всем безопасности!


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers. Five Filters recommends:



Комментариев нет:

Отправить комментарий