С точки зрения безопасности, три дополнительных метода приходят мне на ум.
A: использовать аутентификацию с открытым ключом
чтобы добавить к безопасности, вы можете настроить SSH-сервер для использования аутентификации с открытым ключом. То есть, либо в дополнение, либо вместо надежного пароля, соединение будет открыто только в том случае, если SSH-клиент предоставляет закрытый ключ, который соответствует открытому ключу на сервере. Даже если злоумышленник может получить открытый ключ каким-то образом, он не может восстановить секретный ключ от этого.
Однако это не скроет ваш порт от сканеров портов.
B: используйте другой порт
кроме того, я сделал хороший опыт в плане меньше сканирование портов с настройкой SSH сервер слушать порт, отличный от 22.
Соответствующий параметр конфигурации по умолчанию в /etc/ssh/sshd_config
is
Port 22
вы можете изменить это, скажем 54322:
Port 54322
не забудьте повторно запустить сервер SSH после этого; в зависимости от Linux на вашей малине, это может быть один из
# service sshd restart
# systemctl restart sshd
(том #
sign, если не в файле, должен обозначать корневой запрос здесь, в моих примерах.)
не волнуйтесь, ваш текущий сеанс SSH будет оставаться активным. Возможно, стоит попробовать открыть второй сеанс SSH на порт 54322, чтобы узнать, работает ли вход в систему.
Не забывайте
- установите SSH-клиент на Новый Порт
- если применимо, перенаправьте новый порт интернет-маршрутизатора на Малина Pi
C: закройте порт и откройте его только по вашему запросу
если вы действительно не хотите, чтобы показать "интернет", что у вас есть этот порт открыт, посмотрите на порт стучит демонов, e. g. knockd
. Те программы слушают (закрытые) порты, определенные вами, и после последовательности стука, также определенной вами, открывают другой порт, e. g. ваш порт SSH.
От мобильного телефона или ноутбука, вы начинаете стучать последовательность, и демон стука на вашем Raspberry Pi открывает порт SSH, который не был виден вообще.
более подробно, порт стук будет добавить строку в iptables
конфигурации. Эта линия откроет порт на вашей малине. Это также означает, что порт SSH должен быть закрыт iptables
раньше. И это означает, что вы не можете войти через SSH.
пример knockd.conf
может выглядеть так:
[openclosessh]
sequence = 1000,2020,3015,65432
seq_timeout = 15
tcpflags = syn
start_command = /usr/local/bin/knockd-open.sh %IP%
cmd_timeout = 30
stop_command = /usr/local/bin/knockd-close.sh %IP%
кроме того, не забудьте перенаправить to-be-knocked порты с Вашего интернет-маршрутизатора на твоя малина.
соответствующие скрипты открытия / закрытия могут выглядеть так:
#!/bin/bash
# /usr/local/bin/knockd-open.sh
# adds two lines at the top of iptables which allow all incoming and outgoing traffic on tcp port 54322
iptables -I INPUT -s -p tcp --dport 54322 -j ACCEPT
iptables -I OUTPUT -d -p tcp --sport 54322 -j ACCEPT
и
#!/bin/bash
# /usr/local/bin/knockd-close.sh
# deletes those two lines again
iptables -D INPUT -s -p tcp --dport 54322 -j ACCEPT
iptables -D OUTPUT -d -p tcp --sport 54322 -j ACCEPT
не забудьте сделать оба скрипта исполняемыми с помощью chmod +x /usr/local/bin/knockd*
. Кроме того, вы должны запустить и включить службу knockd с одним из
# service knockd start && update-rc.d knockd enable
# systemctl start knockd && systemctl enable knockd
особенно, если вы используете стук на удаленном компьютере, к которому у вас нет доступа к консоли, вы можете использовать atd
автоматически отменить любые изменения и / или перезагрузить малину в случае ошибок конфигурации.
потому что iptables не будут храниться при перезагрузках автоматически, в примере, вы можете быть root (через su
) и
# at now + 5 minutes
> reboot
> (hit ctrl-d)
# ./script-which-closes-iptables.sh
пример ./script-which-closes-iptables.sh
может выглядеть так (не забудьте сделать его исполняемым с chmod +x
)
#!/bin/bash
# allow everything on the loopback interface
iptables -A INPUT -i lo -j ACCEPT
# allow only related or established incoming ssh sessions
iptables -A INPUT -p tcp -m state --state RELATED,ESTABLISHED -m tcp --dport 54322 -j ACCEPT
# allow outgoing related or established ssh sessions
iptables -A OUTPUT -p tcp -m state --state RELATED,ESTABLISHED -m tcp --sport 54322 -j ACCEPT
# allow everything on the loopback interface
iptables -A OUTPUT -o lo -j ACCEPT
# drop everything else in and out
iptables -P INPUT DROP
iptables -P OUTPUT DROP
если ваша сессия SSH умирает сейчас, малина перезагрузится через 5 минут. Если сеанс SSH все еще активен, отмените ожидающую перезагрузку с
# atq
15 reboot
# atrm 15
если сеанс SSH все еще активен, попробуйте войти через второй сеанс SSH. Это не должно сработать. Затем используйте свой мобильный телефон и выбейте порты, которые вы настроили в /etc/knockd.conf
. После этого повторите попытку входа через второй сеанс SSH. На этот раз все должно сработать.
затем вы можете сделать ваши iptables сохраняются перезагрузки. В вашей системе может потребоваться установить пакет через
# apt-get install iptables-persistent
сохранить iptables с
# iptables-save > /etc/iptables/iptables-rules
и включите сервис iptables с помощью
# systemctl enable iptables