Вопрос или проблема
У меня есть сетевое хранилище (NAS), которое подключается к двум различным Wi-Fi сетям в зависимости от его местоположения (оно не всегда находится на одном и том же месте). NAS реализовано с использованием компьютера Raspberry Pi. Обычно эти Wi-Fi сети предоставляют доступ в интернет для подключенных к ним компьютеров. Я не могу изменить настройки Wi-Fi сетей. По соображениям безопасности я хотел бы настроить NAS так, чтобы
- оно полностью отвергало любое интернет-соединение в обоих направлениях, вне зависимости от того, к какой Wi-Fi сети оно подключено, и
- оставалось доступным из LAN Wi-Fi.
Идея заключается в том, чтобы только компьютеры, непосредственно подключенные к Wi-Fi, могли получить доступ к NAS.
Возможно ли это? Как лучше всего это сделать? Я не очень хорошо разбираюсь в сетях, извините, если это что-то очевидное.
Я пробую (источник)
iptables -A INPUT -s $NETWORK_ADDRESS/$MASK -j ACCEPT
iptables -A INPUT -j DROP
iptables -A OUTPUT -d $NETWORK_ADDRESS/$MASK -j ACCEPT
iptables -A OUTPUT -j DROP
Однако, это блокирует не только доступ в интернет, но и доступ по LAN.
Ответ или решение
Теория
Для изоляции сетевого хранилища (NAS) от Интернета, сохраняя доступ к нему в локальной сети (LAN), требуется понимать, как управлять сетевыми пакетами на уровне операционной системы. Основной инструмент для управления подключениями в Linux — утилита iptables
. Она позволяет фильтровать и контролировать сетевые пакеты на основе различных правил.
NAS на основе Raspberry Pi имеет подключение к двум различным Wi-Fi сетям, которые обеспечивают доступ в Интернет. Чтобы защитить устройство от внешних угроз, необходимо разрывать любое интернет-соединение, при этом гарантируя, что устройство останется доступным в локальных сетях Wi-Fi.
Примеры
Ваш подход с использованием iptables
, указанный в вашем коде, концептуально верен, но немного неточен в реализации. Приведенные правила:
iptables -A INPUT -s $NETWORK_ADDRESS/$MASK -j ACCEPT
iptables -A INPUT -j DROP
iptables -A OUTPUT -d $NETWORK_ADDRESS/$MASK -j ACCEPT
iptables -A OUTPUT -j DROP
действительно блокируют весь трафик, кроме указанного сетевого адреса. Однако, если вы неправильно определили переменные $NETWORK_ADDRESS
и $MASK
, устройство может решить, что LAN трафик также следует блокировать.
Нужно уточнить настройки сети и убедиться, что адрес и маска сети точно определены. Эти правила работают, только если параметры определены корректно.
Применение
-
Узнать сетевой диапазон:
Чтобы ограничить доступ вне локальной сети, сначала найдите IP адрес и маску сети в данных Wi-Fi сетях:ifconfig wlan0
Посмотрите вывод и определите
inet
(ваш IP) иnetmask
для текущей сети. Например, 192.168.1.0/24. -
Правильная настройка iptables:
Задам две стратегии для настройкиiptables
:A. Использовать маску сети и шлюзы:
# Пропуск пакетов в пределах локальной сети iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT iptables -A OUTPUT -d 192.168.1.0/24 -j ACCEPT # Отклонение остальных входящих/исходящих пакетов iptables -A INPUT -j DROP iptables -A OUTPUT -j DROP
B. Использовать интерфейсы:
Если вы точно знаете, через какой интерфейс идет подключение к Wi-Fi, например,wlan0
:# Разрешение всех подключений через специфичный интерфейс iptables -A INPUT -i wlan0 -j ACCEPT iptables -A OUTPUT -o wlan0 -j ACCEPT # Отклонение всех остальных подключений iptables -A INPUT -j DROP iptables -A OUTPUT -j DROP
-
Проверка и сохранение правил:
После установления правил iptables, проверьте их работу:iptables -L -v
Очень важно убедиться, что ваши правила iptables загружаются автоматически при запуске системы. Для этого используйте:
iptables-save > /etc/iptables/rules.v4
или используйте утилиты, например,
netfilter-persistent
.
Дополнительные Заметки
- Отключение IPv6: Если ваше NAS не использует IPv6, отключите его внутренняя обработка с помощью
sysctl
или же через модули ядра. - Логирование: Чтобы иметь возможность анализировать попытки доступа и отладки, вы можете добавить правила журналирования после DROP:
iptables -A INPUT -j LOG --log-prefix "IPTables-INPUT-Dropped: " --log-level 4 iptables -A OUTPUT -j LOG --log-prefix "IPTables-OUTPUT-Dropped: " --log-level 4
- Учтите, что настройки могут потеряться после перезагрузки, если вы не сохраните их.
Применяя эти техники, вы обеспечите, что ваше NAS может безопасно функционировать в любых условиях, подключаясь только к нужным локальным сетям без риска выхода в интернет.