Я использую ufw (несложный брандмауэр) на своем веб-сервере. Прямо сейчас я настроил его, чтобы разрешить доступ по SSH всему миру, и fail2ban для предотвращения массовых попыток входа. На веб-сервере открыты порты 80 и 443.
Я бы хотел закрыть доступ по SSH до тех пор, пока он мне не понадобится, а затем сделать его доступным только для моего текущего общедоступного IP-адреса, который периодически меняется. Я думаю о сценарии PHP через HTTPS, который проверяет мой доступ, а затем помещает запрос в базу данных. Затем задание cron запускает сценарий, который читает базу данных и запускает ufw, чтобы открыть порт SSH только для моего IP-адреса. Через 30 минут правило будет удалено, и SSH снова станет недоступным. Я также хочу разрешить нескольким IP-адресам иметь временный доступ, и в конечном итоге я хочу расширить доступ к другим портам за пределами SSH.
Какие команды ufw должны запускаться моими вышеупомянутыми автоматическими сценариями для временного добавления и удаления доступа к SSH-портам для отдельных IP-адресов?
На мой взгляд, лучшим решением было бы использовать блокировку портов, в основном вы бы "выбили" серию случайных портов, которые затем инициировали бы действие на сервере, действие будет заключаться в том, чтобы разрешить вашему IP-адресу вход по SSH. Вы можете даже установить таймаут, чтобы через некоторое время порт был закрыт.
Для стука порта вы можете использовать knockd. Конечно, вам нужен клиент для стука и с другой стороны. Конфигурация knockd будет выглядеть так:
[options]
logfile = /var/log/knockd.log
[SSH]
sequence = 7000,8000,9000
seq_timeout = 5
start_command = ufw allow from %IP% to any port 22
tcpflags = syn
cmd_timeout = 10
stop_command = ufw delete allow from %IP% to any port 22