Салам-папалам всем!
Тут озадачился как же можно сделать свой сервер более безопаснее. Использование напрямую iptables с блокировкой по IP не решало проблемы, т.к. я могу к серверу подсоединяться не только с рабочего ПК, но и издому, или с другого города, или в автобусе (когда в пробках стою).
Решил использовать port knocking.
Кто ни разу не пользовался этим, милости прошу под кат.
Для тех кто не в теме кратко скажу: это демон, который «слушает» сетевой интерфейс и если «услышал», что идут запросы на 7000,8000,9000 порт, то добавляет разрешающее правило для вашего IP на определённый заранее вами порт. Она просто выполняет команду на разрешение или запрещение доступа в iptables.
Итак, я захотел прикрыть от всех ssh.
Сперва установим сам демон (для тестов я использовал свой рабочий ПК на Ubuntu):
Для CentOS можно установить так:
Далее нам надо отредактировать конфиг этого демона ( /etc/knockd.conf ):
Затем перезапускаем демон:
Далее, добавляем запрещающее правило для всех на 22-ой порт:
В секции [openSSH] обратите внимание на строчки -I INPUT 1. Если мы просто напишем вместо этого -A INPUT, то оно будет добавляться в конец цепочки правил, и следовательно будет срабатывать только самое верхнее правило. Поэтому мы пишем так, что бы запрещающее правило было добавлено в конец.
sequence указывает на то, какими последовательностями портов мы будем открывать себе доступ. Обязательно укажите на своё.
Можно еще указать протокол, допустим так: 7000:udp, 8000:udp, 9000:tcp
tcpflags — тут мы указываем какие заголовки должны содержаться в передаваемых пакетах.
В секции [closeSSH] указываем обратную последовательность для закрытия 22-го порта. И там же команда на удаление вашего IP из списка разрешенных.
Теперь встаёт вопрос: как же послать эту волшебную последовательность на порты?
С сайта разработчика можно скачать программу для популярных платформ. Там же можно увидеть другие примеры использования.
В Windows я пользовался так: скачал, распаковал. Открыл командную строку,
Всё, открыли порт. Теперь мы можем заходить по SSH!
Если хотите для другого протокола это использовать, то таким же способом напишите секцию [openFTP], [closeFTP] с теми же правлами, только порты поменяйте на нужное и всё.
Минусы этой штуки в том, что надо дополнительную прогу использовать прежде чем подсоединиться. Но, мне кажется, что ради безопасности потерпеть можно.
Всем безопасности!
Тут озадачился как же можно сделать свой сервер более безопаснее. Использование напрямую 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 ВАШ_IP_ГДЕ_ХОТИТЕ_ОТКРЫТЬ_ДОСТУП -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] с теми же правлами, только порты поменяйте на нужное и всё.
Минусы этой штуки в том, что надо дополнительную прогу использовать прежде чем подсоединиться. Но, мне кажется, что ради безопасности потерпеть можно.
Всем безопасности!