В настоящее время я могу думать о трех способах:
Первый - использовать knockd
- мой любимый - ( http://www.zeroflux.org/projects/knock/ ]) и настройте последовательность портов, которую помните только вы, и дайте knockd
открыть SSH для IP-адреса, с которого вы ссылаетесь. knockd
доступен в пакете debian, и пример конфигурации ( /etc/knockd.conf
) может быть следующим:
[options]
logfile = /var/log/knockd.log
[opencloseSSH]
sequence = 2221,2222,2223
seq_timeout = 5
tcpflags = syn
start_command = /usr/sbin/iptables -I INPUT -i enp0s8 -s %IP% -p tcp --dport 22 -j ACCEPT
cmd_timeout = 15
stop_command = /usr/sbin/iptables -D INPUT -i enp0s8 -s %IP% -p tcp --dport 22 -j ACCEPT
Таким образом knockd
будет прослушивать последовательность на указанных портах (они могут даже быть одинаковыми) и откроет порт, если последовательность будет достигнута в течение 5 секунд. Через 15 секунд правило снова удаляется, поэтому в течение этих 15 секунд необходимо запустить успешный вход.
Второй основан на динамическом DNS в сочетании с регулярным обновлением цепочки iptables:
iptables -N SSH
iptables -A INPUT -p tcp -m tcp --dport 22 -j SSH
Запланируйте задание cron для запуска следующего скрипта, например, каждую минуту:
#!/bin/bash
iptables -F SSH
iptables -A SSH -s ddns-entry.com -j ACCEPT
Таким образом, цепочка SSH очищается и пополняется каждые выбранный вами интервал.
В качестве альтернативы вы можете создать (защищенную паролем) веб-страницу на вашем хосте Debian 6, которая позволит вам ввести IP-адрес, сохраненный, например, в / tmp / currip
. Запланируйте запуск задания cron каждую минуту - или, что еще лучше, используйте inotify / incron - и проверьте файл / tmp / currip
и измените правило iptables
, чтобы использовать адрес, указанный в файл. Поскольку это очень зависит от типа используемого вами веб-стека, я не привожу здесь образец.