Открывайте порты и направляйте трафик через брандмауэр

В идеале большинство локальных сетей защищены от внешнего мира. Если вы когда-либо пробовали установить службу, такую ​​как веб-сервер или экземпляр Nextcloud дома, то, вероятно, из первых рук знаете, что, хотя к службе легко получить доступ изнутри сети, она недоступна во всем мире. Интернет.

Для этого есть как технические причины, так и соображения безопасности, но иногда вы хотите открыть доступ к чему-либо в локальной сети для внешнего мира. Это означает, что вам необходимо правильно и безопасно направлять трафик из Интернета в локальную сеть. В этой статье я объясню, как это сделать.

Локальные и общедоступные IP-адреса

Первое, что вам нужно понять, это разницу между адресом локального интернет-протокола (IP) и общедоступным IP-адресом. В настоящее время большая часть мира (все еще) использует систему адресации под названием IPv4, которая, как известно, имеет ограниченный пул номеров, доступных для назначения сетевым электронным устройствам. Фактически, в мире больше сетевых устройств, чем адресов IPv4, но IPv4 продолжает функционировать. Это возможно из-за локальных адресов.

Все локальные сети в мире используют одни и те же пулы адресов. Например, локальный IP-адрес моего домашнего маршрутизатора — 192.168.1.1. Один из них, вероятно, совпадает с номером вашего домашнего маршрутизатора, но когда я перехожу к 192.168.1.1, я попадаю на экран входа в систему моего маршрутизатора, а не на экран входа в систему вашего маршрутизатора. Это потому, что ваш домашний маршрутизатор на самом деле имеет два адреса: один общедоступный и один локальный, а общедоступный защищает локальный от обнаружения в Интернете, а тем более от того, чтобы его можно было спутать с чужим 192.168.1.1.

Фактически, именно поэтому Интернет называют Интернетом: это «сеть» взаимосвязанных и в остальном самодостаточных сетей. Каждая сеть, будь то ваше рабочее место, или ваш дом, или ваша школа, или большой центр обработки данных, или само «облако», представляет собой набор подключенных хостов, которые, в свою очередь, обмениваются данными со шлюзом (обычно маршрутизатором), который управляет трафиком из Интернет и в локальную сеть, а также из локальной сети в Интернет.

Это означает, что если вы пытаетесь получить доступ к компьютеру в сети, которая не является той, к которой вы в данный момент подключены, то знание локального адреса этого компьютера вам не поможет. Вам необходимо знать публичный адрес шлюза удаленной сети. И это еще не все. Вам также необходимо разрешение на проход через этот шлюз в удаленную сеть.

Межсетевые экраны

В идеале, даже сейчас вокруг вас должны быть брандмауэры. Вы их не видите (надеюсь), но они там. С точки зрения технологий, брандмауэры имеют забавное название, но на самом деле они немного скучные. Брандмауэр — это просто компьютерная служба (также называемая «демоном»), подсистема, которая работает в фоновом режиме большинства электронных устройств. На вашем компьютере работает множество демонов, в том числе, например, отслеживающий движения мыши или трекпада. Брандмауэр — это демон, запрограммированный на прием или запрещение определенных видов сетевого трафика.

Брандмауэры — это относительно небольшие программы, поэтому они встроены в большинство современных устройств. Они работают на вашем мобильном телефоне, на вашем маршрутизаторе и на вашем компьютере. Брандмауэры разработаны на основе сетевых протоколов, и это часть спецификации разговора с другими компьютерами о том, что пакет данных, отправленный по сети, должен объявлять определенные фрагменты информации о себе (или быть проигнорированным). Одна вещь, которую содержат сетевые данные, — это номер порта , который является одной из основных вещей, которые брандмауэр использует при приеме или отклонении трафика.

Например, веб-сайты размещаются на веб-серверах. Когда вы хотите просмотреть веб-сайт, ваш компьютер отправляет сетевые данные, идентифицируя себя как трафик, предназначенный для порта 80 веб-хоста. Брандмауэр веб-сервера запрограммирован на прием входящего трафика, предназначенного для порта 80, поэтому он принимает ваш запрос (а веб-сервер, в свою очередь, отправляет вам веб-страницу в ответ). Однако, если бы вы отправили (случайно или намеренно) сетевые данные, предназначенные для порта 22 этого веб-сервера, вам, скорее всего, будет отказано в брандмауэре (и, возможно, заблокировано на некоторое время).

Это может показаться странным для понимания, поскольку, как и IP-адреса, порты и брандмауэры на самом деле «не существуют» в физическом мире. Это концепции, определенные в программном обеспечении. Вы не можете открыть свой компьютер или маршрутизатор, чтобы физически проверить сетевые порты, и вы не можете посмотреть на номер, напечатанный на чипе, чтобы найти свой IP-адрес, и вы не можете окунуть свой брандмауэр в воду, чтобы потушить его. Но теперь, когда вы знаете, что эти концепции существуют, вы знаете, какие препятствия возникают при переходе с одного компьютера в одной сети на другой в другой сети.

Пришло время обойти эти блокады.

Ваш IP-адрес

Я предполагаю, что у вас есть контроль над своей собственной сетью, и вы пытаетесь открыть свои собственные брандмауэры и направить свой собственный трафик, чтобы разрешить внешний трафик в вашу сеть. Во-первых, вам нужны локальный и общедоступный IP-адреса.

Чтобы найти свой локальный IP-адрес, вы можете использовать команду ipaddress в Linux:

ip addr show | grep "inet "
 inet 127.0.0.1/8 scope host lo
 inet 192.168.1.6/27 brd 10.1.1.31 scope [...]

В этом примере мой локальный IP-адрес 192.168.1.6. Другой адрес (127.0.0.1) — это специальный адрес «обратной связи», который ваш компьютер использует для обращения к себе изнутри.

Чтобы найти свой локальный IP-адрес в macOS, вы можете использовать ifconfig:

ifconfig | grep "inet "
 inet 127.0.0.1 netmask 0xff000000
 inet 192.168.1.6 netmask 0xffffffe0 [...]

А в Windows используйте ipconfig:

ipconfig

Получите общедоступный IP-адрес вашего маршрутизатора на icanhazip.com . В Linux вы можете получить это из терминала с помощью команды curl :

$ curl http://icanhazip.com
93.184.216.34

Держите эти числа под рукой на будущее.

Направление трафика через роутер

Первое устройство, которое необходимо настроить, — это устройство шлюза. Это может быть большой физический сервер или крошечный маршрутизатор. В любом случае шлюз почти наверняка выполняет преобразование сетевых адресов (NAT), то есть процесс приема трафика и изменения IP-адреса назначения.

Когда вы генерируете сетевой трафик для просмотра внешнего веб-сайта, ваш компьютер должен отправлять этот трафик на шлюз вашей локальной сети, потому что ваш компьютер, по сути, ничего не знает о внешнем мире. Насколько ваш компьютер знает, весь Интернет — это просто ваш сетевой маршрутизатор, 192.168.1.1 (или любой другой адрес вашего маршрутизатора). Итак, ваш компьютер отправляет все на ваш шлюз. Задача шлюза — смотреть на трафик и определять, куда он на самом деле направляется, а затем передавать эти данные в реальный Интернет. Когда шлюз получает ответ, он пересылает входящие данные обратно на ваш компьютер.

Если вашим шлюзом является маршрутизатор, то, чтобы открыть доступ к вашему компьютеру внешнему миру, вы должны назначить порт в вашем маршрутизаторе, который будет представлять ваш компьютер. Это настраивает ваш маршрутизатор для приема трафика на определенный порт и направления всего этого трафика прямо на ваш компьютер. В зависимости от марки маршрутизатора, который вы используете, этот процесс имеет несколько разных имен, включая переадресацию портов или виртуальный сервер, а иногда даже настройки брандмауэра.

Все устройства разные, поэтому я не могу точно сказать, что вам нужно щелкнуть, чтобы настроить параметры. Обычно вы получаете доступ к домашнему маршрутизатору через веб-браузер. Адрес вашего маршрутизатора иногда печатается на его нижней части и начинается с 192.168 или 10.

Перейдите по адресу вашего маршрутизатора и войдите в систему, используя учетные данные, которые вы предоставили при подключении к Интернету. Часто это так же просто, как adminс цифровым паролем (иногда этот пароль также печатается на маршрутизаторе). Если вы не знаете логин, позвоните своему интернет-провайдеру и узнайте подробности.

В графическом интерфейсе перенаправьте входящий трафик для одного порта на порт (обычно самый простой) локального IP-адреса вашего компьютера. В этом примере я перенаправляю входящий трафик, предназначенный для порта 22 (используемого для SSH-соединений) моего домашнего маршрутизатора, на мой настольный компьютер.

 

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

Направление трафика через сервер

Если ваш шлюз является физическим сервером, вы можете направлять трафик с помощью firewall-cmd . Используя опцию расширенного правила , вы можете настроить сервер для прослушивания входящего запроса по определенному адресу (ваш общедоступный IP-адрес) и конкретному порту (в этом примере я использую 22, который является портом, используемым для SSH), а затем направить его трафик на IP-адрес и порт в локальной сети (локальный адрес вашего компьютера).

$ firewall-cmd --permanent --zone=public \
--add-rich-rule 'rule family="ipv4" destination address="93.184.216.34" forward-port port=22 protocol=tcp to-port=22 to-addr=192.168.1.6'

Установите брандмауэр

Большинство устройств имеют брандмауэры, поэтому вы можете обнаружить, что трафик не может пройти на ваш локальный компьютер даже после того, как вы перенаправили порты и трафик. Возможно, есть брандмауэр, блокирующий трафик даже в вашей локальной сети. Брандмауэры предназначены для обеспечения безопасности вашего компьютера, поэтому не поддавайтесь желанию полностью отключить брандмауэр (кроме устранения неполадок). Вместо этого вы можете выборочно разрешить трафик.

Процесс изменения персонального брандмауэра зависит от вашей операционной системы.

В Linux уже определено множество служб. Посмотреть доступные:

sudo firewall-cmd --get-services
amanda-client amanda-k5-client bacula bacula-client
bgp bitcoin bitcoin-rpc ceph cfengine condor-collector
ctdb dhcp dhcpv6 dhcpv6-client dns elasticsearch
freeipa-ldaps ftp [...] ssh steam-streaming svdrp [...]

Если служба, которую вы пытаетесь разрешить, присутствует в списке, вы можете добавить ее в свой брандмауэр:

sudo firewall-cmd --add-service ssh --permanent

Если вашей службы нет в списке, вы можете добавить порт, который хотите открыть вручную:

sudo firewall-cmd --add-port 22/tcp --permanent

Открытие порта в вашем брандмауэре зависит от вашей текущей зоны . Дополнительные сведения о брандмауэрах, firewall-cmd и портах

Этот шаг касается только открытия порта на вашем компьютере, чтобы трафик, предназначенный для него через определенный порт, принимался. Вам не нужно перенаправлять трафик, потому что вы уже сделали это на своем шлюзе.

Сделайте связь

Вы настроили шлюз и локальную сеть для маршрутизации трафика за вас. Теперь, когда кто-то за пределами вашей сети переходит на ваш общедоступный IP-адрес, предназначенный для определенного порта, он будет перенаправлен на ваш компьютер через тот же порт. Вы должны контролировать и защищать свою сеть, поэтому используйте свои новые знания осторожно. Слишком много открытых портов может выглядеть как приглашение для злоумышленников и ботов, поэтому открывайте только то, что вы собираетесь использовать. И, самое главное, получайте удовольствие!