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

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

2 ответа2

5

В плане безопасности мне на ум приходят три дополнительных метода.

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-порт, который вообще не был виден.

Более подробно, стук портов добавит строку в вашу конфигурацию 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
1

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .