Назад | Перейти на главную страницу

Как временно открыть порт в ufw для определенного IP-адреса?

Я использую 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