Как временно открыть порт в ufw для определенного IP-адреса?
Я использую UFW (несложный брандмауэр) на моем веб-сервере. Прямо сейчас я настроил его, чтобы позволить SSH миру, и fail2ban, чтобы предотвратить массовые попытки входа. Веб-сервер имеет открытые порты 80 и 443.
То, что я хотел бы сделать, это закрыть доступ по SSH до тех пор, пока он мне не понадобится, а затем сделать его доступным только для моего текущего публичного IP-адреса, который периодически меняется. Я имею в виду сценарий PHP через HTTPS, который проверяет мой доступ, а затем помещает запрос в базу данных. Затем задание cron запускает скрипт, который читает базу данных и запускает ufw, чтобы открыть порт SSH только для моего IP-адреса. Через 30 минут правило будет удалено, и SSH снова станет недоступным. Я также хочу разрешить нескольким IP-адресам иметь временный доступ, и я в конечном итоге хочу расширить на другие порты за пределами SSH.
Какие команды ufw должны запускать мои вышеупомянутые автоматические сценарии для временного добавления и удаления доступа к SSH-порту для отдельных IP-адресов?
1 ответ
На мой взгляд, лучшим решением было бы использовать стук портов, в основном вы должны были бы "стучать" по ряду случайных портов, которые затем вызывали бы какое-либо действие на сервере, действие было бы, чтобы ваш 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