A: использовать аутентификацию с открытым ключом

A: использовать аутентификацию с открытым ключом

У меня дома есть Raspberry Pi, который я подключил к своей домашней сети. Я использую его для запуска VPN-сервера, SSH-туннеля и иногда подключаюсь к нему по SSH для обслуживания.

Плохая ли идея открывать порты (TCP) на моем маршрутизаторе, чтобы я мог удаленно подключаться к своему Pi, когда я вдали от дома? Я не использую обычный порт 22; это случайный порт, который я выбрал. Однако, когда я сканирую свой IP-адрес с помощью nmapon pentest-tools.com, я вижу открытый порт, который я выбрал для использования для SSH. Мой Pi защищен паролем, и на нем нет никаких конфиденциальных данных или номеров кредитных карт, о которых я знаю. Но учитывая, что я использую его для VPN или SSH-туннелирования, через него могут передаваться конфиденциальные данные. Так плохо ли открывать этот порт SSH на моем маршрутизаторе? Может ли кто-нибудь сделать что-нибудь вредоносное в моей домашней сети, открыв этот порт, учитывая, что мой Pi всегда включен и слушает этот порт?

решение1

С точки зрения безопасности мне на ум приходят еще три метода.

A: использовать аутентификацию с открытым ключом

Для повышения безопасности вы можете настроить свой SSH-сервер на использование аутентификации с открытым ключом. То есть, в дополнение к надежному паролю или вместо него, соединение будет открыто только в том случае, если SSH-клиент предоставит закрытый ключ, который соответствует открытому ключу на сервере. Даже если злоумышленник каким-то образом получит открытый ключ, он не сможет восстановить из него закрытый ключ. Однако это не скроет ваш порт от сканеров портов.

B: используйте другой порт

Кроме того, я получил хороший опыт в плане уменьшения количества сканирований портов, настроив сервер SSH на прослушивание порта, отличного от 22. Соответствующая опция конфигурации по умолчанию /etc/ssh/sshd_config:

Port 22

Вы можете изменить это, скажем, на 54322:

Port 54322

Не забудьте перезапустить SSH-сервер после этого; в зависимости от Linux на вашем Raspberry, это может быть один из

# service sshd restart
# systemctl restart sshd

( #Знак, если его нет в файле, в моих примерах будет обозначать корневую подсказку.)

Не волнуйтесь, ваш текущий сеанс SSH останется активным. Возможно, стоит попробовать открыть второй сеанс SSH на порт 54322, чтобы проверить, работает ли вход. Не забудьте

  • настройте свой SSH-клиент на новый порт
  • если применимо, перенаправьте новый порт вашего интернет-маршрутизатора на Raspberry Pi

C: закрыть порт и открыть его только по вашему запросу

Если вы действительно не хотите показывать "интернету", что у вас открыт этот порт, взгляните на демоны стука портов, например knockd. Эти программы слушают (закрывают) порты, определенные вами, и при последовательности стука, также определенной вами, открывают другой порт, например, ваш порт SSH. С мобильного телефона или ноутбука вы инициируете последовательность стука, и демон стука на вашем Raspberry Pi открывает ваш порт SSH, который вообще не был виден.

Если говорить более подробно, то port knocking добавит строку в вашу iptablesконфигурацию. Эта строка откроет порт на вашем Raspberry. Это также означает, что порт 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%

Также не забудьте перенаправить порты, которые должны быть заблокированы, с вашего интернет-маршрутизатора на ваш Raspberry.

Соответствующие сценарии открытия/закрытия могут выглядеть следующим образом:

#!/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 $1 -p tcp --dport 54322 -j ACCEPT
iptables -I OUTPUT -d $1 -p tcp --sport 54322 -j ACCEPT

и

#!/bin/bash
# /usr/local/bin/knockd-close.sh
# deletes those two lines again
iptables -D INPUT -s $1 -p tcp --dport 54322 -j ACCEPT
iptables -D OUTPUT -d $1 -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функцию автоматической отмены любых изменений и/или перезагрузки Raspberry в случае ошибок конфигурации.

Так как 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 сейчас умирает, Raspberry перезагрузится через 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

решение2

Если у вашего Raspberry Pi надежный пароль и надежная защита SSH, то все в порядке; злоумышленники ничего не смогут сделать с SSH, если не смогут войти в него или использовать его. Но порт они наверняка найдут.

Историческая справка: В прошлом,возникла проблемас конфигурацией SSH; автоматически сгенерированный ключ был предсказуем. Это было исправлено.

Если нападающиеделатьполучить доступ SSH, они фактически владеют устройством. Затем они могут использовать его для плохих вещей, таких какОтравление ARP, что позволяет им захватывать и изменять незашифрованные данные, проходящие через вашу сеть. Они также могут использовать Pi как отправную точку для атак на другие ваши хосты. Pi — это такой же компьютер, как и любой другой, и вам нужно быть осторожным, чтобы защитить его.

Связанный контент