Я не являюсь сетевым инженером. Я студент, который решил записывать свои действия и делиться ими со знакомыми людьми, вспоминая, чем я занимался с самого начала. Я буду рад исправить это в комментариях. Этот конспект основан на других статьях на различных ресурсах. Он поддерживает авторов этих драйверов, подробно излагает некоторые из высказанных положений и считает их подходящими для статей.
Я постараюсь писать очень подробно, чтобы те, кто знает то же, что и я в начале своего пути, смогли все понять.
Вступление
Я давно хотел увеличить количество серверов, видимых в домашней локальной сети из-за границы, и использовать их для проектов и профессиональных мест.
Почему бы не использовать простой VPS и не тратить компьютерную мощность? Ответ очень прост. У меня уже был статический белый IP и я использовал старый ноутбук в качестве сервера. Поэтому дополнительных расходов не предвиделось.
Что мы имеем?
Для сравнения, на момент написания статьи (2021 год), стоимость минимального VP на надежном ресурсе — 400 рублей. Стоимость белого IP провайдера — 179 руб.
Ноутбук (Intel Core I5 M 560 2,67 ГГц, 4/60 Гб) с установкой Ubuntu Server 20.04.3 (рекомендуется использовать Rufus (Win) или Balenaetter (OS X) для создания установочной флэш-памяти)
Маршрутизатор от интернет-провайдера с пакетом "статический IP-адрес
Второй компьютер для тестирования (все, что можно сделать через браузер, можно сделать и через телефон, но это вопрос удобства)
Приятная музыка, чтобы процесс не был утомительным
Какая цель?
Создайте сервер python3 flask (для простоты)
Установка постоянного локального адреса на сервер
Продолжайте. Сначала установите постоянный IP-адрес для сервера в локальной сети. Идея состоит в том, чтобы использовать DHCP (протокол, который назначает случайный IP-адрес каждой сети, но вы хотите, чтобы маршрутизатор знал, куда отправлять внешние запросы).
Проверьте интерфейс, который будет использоваться в ifconfig
В зависимости от типа используемого подключения (кабель или Wi-Fi), вы можете проверить файл /etc/netplan
Настройте следующим образом.
ETHX — имя подключенного устройства
Здесь важно понять, что означают следующие строки
Адрес (6) — это адрес сервера в локальной сети, что мы и делаем
/24 означает маску сети (255.255.255.255.0). В этом случае первые три числа являются локальным адресом локального маршрутизатора, а последнее — диким. Мы выбрали 192.168.1.200.
Шлюз4 — это ворота, или маршрутизатор, сети. Его адрес — 192.168.1.1, который обычно является общим для всех маршрутизаторов провайдера, поэтому поищите его в Google (адрес может быть указан там же, где и пароль Wi-Fi).
В области NameServers: адрес (9) предоставляет тот же адрес, что и Gateway4 (извините, не знаю, что это такое).
DHCP4: нет и DHCP6: заявить, что DHCP не используется Нет
На этом этапе вам может понадобиться проверить
sudo tcpdump -i ethx icmp и icmp icmptype = icmp -echo
Чтобы посмотреть, кто нас пингует.
Выполните пинг другого компьютера в локальной сети по адресу 192.168.1.200.
Вы также можете проверить, есть ли у портативного сервера доступ в Интернет — используйте Ping на Google.com.
Более подробно это объясняется в этой статье о Ubuntu о других дистрибутивах поиск в Google ‘Set static IP’.
Операция; был там, сделал это!
Рассказываем роутеру про сервер
Сервер знает, что он работает с постоянным IP и не использует DHCP. Это хорошая возможность сообщить маршрутизатору, что ему необходимо отправить внешний запрос на сервер. Чтобы получить доступ к конфигурации маршрутизатора, введите IP-адрес в поле поиска.
Доступны два варианта.
Настройте зону DMZ в конфигурации маршрутизатора и укажите в ней локальный адрес сервера. Это делает сервер общедоступным и позволяет любому желающему подключиться к нему.
Пробросьте необходимые порты ресурсов на сервер через маршрутизатор (проброс портов). Не забудьте про порт SSH (22) и бутылку (5000)!
Попробуйте выполнить пинг из внешней сети.
Все хорошо; теперь, когда сервер виден снаружи, подумайте о безопасности.
Защита сервера
Используйте это очень хорошее руководство для настройки SSH, брандмауэра и fail2ban. (Опять же, моя цель — не копировать все, что я нахожу, а собрать это в одном месте, чтобы не забыть). Я делаю все в Ubuntu Server, но в этом руководстве есть одно для CentOS и одно для RedHat.
Сначала создайте пользователя, отличного от root (1), укажите пароль (2) и разрешите ему использовать привилегии root через sudo (3).
Для настройки следуйте инструкциям, приведенным в статье выше. Здесь нечего добавить, кроме подробностей о публичном и приватном ключах.
ssh-keygen -t rsa генерирует два ключа, один открытый (с расширением .pub) и один закрытый (без такого расширения).
Открытый ключ отправляется на сервер в файле authorised_keys в каталоге /.ssh в домашнем каталоге пользователя (/home/username/.shh/authorised_key).
Для этого можно использовать команду.
Закрытый ключ используется для аутентификации. Скопируйте его куда-нибудь, чтобы не потерять.
Вы можете использовать ключ для подключения с помощью следующих команд
Важно отключить проверку подлинности пароля. Если вы не отключите его, вы сможете делать все это бесплатно.
Брандмауэры.
Использование перенаправления портов позволяет получить доступ к серверу только через соединение на определенном порту, в то время как зоны DMZ разрешают практически любой тип запроса. При использовании зон DMZ на сервере должен быть установлен FireWall. Это ограничивает количество портов, которые могут принимать внешние запросы.
Включите SSH (1) и порт 5000 (2) в ufw (Firewall) и запустите FireWall (3).
После установки FireWall не забудьте разрешить доступ к порту SSH (22) и порту Flask (5000) (или к любому другому программному обеспечению, которое вы используете). Я забыл это сделать и долгое время не понимал, почему мой сервер не отвечает.
На этом сайте есть правильная разбивка команд управления брандмауэром.
Fail2ban.
Fail2ban ограничивает количество попыток подключения, что значительно затрудняет получение учетных данных для аутентификации SSH.
Сначала установите (1) и запустите (2, 3).
Теперь вы можете настроить его с помощью следующих конфигурационных файлов: /etc/fail2ban/fail2ban.conf и /etc/fail2ban/jail.conf. Во-вторых, он ограничивает количество соединений в определенные периоды и время запрета.
Теперь сделаем проверку более сложного уровня
Установите flask и python3:.
Скопируйте код тестового сервера с веб-страницы в файл server.py.
Находясь в директории с этим файлом, запустите сервер.
Сервер запущен, и вы можете напрямую подключиться к нему с внешнего устройства через строку браузера, введя внешний адрес вашего маршрутизатора. Далее приводится пример.
Если все работает, на экране появится буквенно-цифровое сообщение "Hello, World! Не сработало; пожалуйста, перечитайте примечания в этом руководстве.