Рейтинг:0

Wireguard ограничивает доступ к сервисам и машинам в локальной сети

флаг ua

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

Пример: Сервер 1 (192.168.1.23 | 10.0.0.1) с установленным Wireguard + Nextcloud + Jellyfin на одной машине Сервер 2 (192.168.1.62) с Photoprism

Удаленный узел 1 (10.0.0.2 | динамический IP-адрес) Удаленный узел 2 (10.0.0.3 | динамический IP-адрес)

Я хочу:

1- Разрешить одноранговому узлу 1 (10.0.0.2) доступ к серверу 1 Nextcloud + Jellyfin и доступ к серверу 2 для Photoprism.

2- Разрешить Peer2 (10.0.0.3) только доступ к серверу 1 Nextcloud, но не к Jellyfin, и заблокировать доступ к серверу 2.

Прямо сейчас я могу получить доступ ко всем машинам в моей локальной сети со всех сверстников.

Правила iptables:

PostUp = iptables -A FORWARD -i %i -j ПРИНЯТЬ; iptables -A FORWARD -o %i -j ПРИНЯТЬ; iptables -t nat -A POSTROUTING -o enp0s7 -j MASQUERADE; iptables -t nat -A РАЗМЕЩЕНИЕ -o wg0
PostDown = iptables -D FORWARD -i %i -j ПРИНЯТЬ; iptables -D FORWARD -o %i -j ПРИНЯТЬ; iptables -t nat -D POSTROUTING -o enp0s7 -j MASQUERADE; iptables -t nat -D POSTROUTING -o wg0

я следил за этим руководство, от Джастин Людвиг потому что топология Site to Point очень похожа на мою. Итак, я попытался воспроизвести правила Iptables с помощью следующих правил:

# маскарад
PreUp = iptables -t mangle -A PREROUTING -i wg0 -j MARK --set-mark 0x200
PreUp = iptables -t nat -A РАЗМЕЩЕНИЕ ! -o wg0 -m отметка --mark 0x200 -j МАСКАРАД
PostDown = iptables -t mangle -D PREROUTING -i wg0 -j MARK --set-mark 0x200
PostDown = iptables -t nat -D ОТПРАВКА ! -o wg0 -m отметка --mark 0x200 -j МАСКАРАД

# вход wireguard
PreUp = iptables -I ВВОД -p udp --dport 2332 -j ПРИНЯТЬ
PostDown = iptables -D ВВОД -p udp --dport 2332 -j ПРИНЯТЬ

# брандмауэр сайта
PreUp = iptables -N wg0-фильтр
PreUp = iptables -N to-photoprism
PreUp = iptables -N to-jellyfin
PreUp = iptables -N to-nextcloud

PreUp = iptables -I INPUT -i wg0 -j wg0-filter
PreUp = iptables -I ВПЕРЕД -i wg0 -j wg0-фильтр
PreUp = iptables -I FORWARD -o wg0 -j wg0-filter
PreUp = iptables -I ВЫВОД -o wg0 -j wg0-фильтр

PreUp = iptables -A wg0-filter -m состояние --state УСТАНОВЛЕНО,СВЯЗАННО -j ПРИНЯТЬ
PreUp = iptables -A wg0-filter -d 192.168.1.63 -p tcp --dport 2342 -j to-photoprism
PreUp = iptables -A wg0-filter -d 192.168.1.23 -p tcp --dport 8096 -j to-jellyfin
PreUp = iptables -A wg0-filter -d 192.168.1.23 -p tcp --dport 80 -j to-nextcloud
PreUp = iptables -A wg0-filter -j ОТКЛОНИТЬ

PreUp = iptables -A to-photoprism -s 10.0.0.2 -j ПРИНЯТЬ

PreUp = iptables -A to-jellyfin -s 10.0.0.2 -j ПРИНЯТЬ
PreUp = iptables -A to-jellyfin -s 10.0.0.3 -j ПРИНЯТЬ

PreUp = iptables -A to-nextcloud -s 10.0.0.2 -j ПРИНЯТЬ
PreUp = iptables -A to-nextcloud -s 10.0.0.3 -j ПРИНЯТЬ

PostDown = iptables -D INPUT -i wg0 -j wg0-filter
PostDown = iptables -D FORWARD -i wg0 -j wg0-filter
PostDown = iptables -D FORWARD -o wg0 -j wg0-filter
PostDown = iptables -D ВЫВОД -o wg0 -j wg0-фильтр

PostDown = iptables -F to-photoprism
PostDown = iptables -F to-jellyfin
PostDown = iptables -F to-nextcloud

PostDown = iptables -X to-photoprism
PostDown = iptables -X to-jellyfin
PostDown = iptables -X to-nextcloud

Это не сработало, Peer 1 и Peer 2 могут получить доступ к серверу 1, обеим службам, но не к серверу 2.

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

заранее спасибо

Рейтинг:0
флаг cn

В целом ваши правила iptables мне кажутся хорошими; хотя:

  1. В описании вопроса вы упоминаете, что сервер 2 имеет IP-адрес 192.168.1.62; но в правилах iptables вы, кажется, используете 192.168.1.63 для этого:

     iptables -A wg0-filter -d 192.168.1.63 -p tcp --dport 2342 -j to-photoprism
    

    Это опечатка в одном месте или в другом?

  2. В описании вы упоминаете Peer 2 (10.0.0.3) не должен иметь доступа к Jellyfin; но в правилах iptables вы предоставляете ему доступ с помощью этой строки:

     iptables -A to-jellyfin -s 10.0.0.3 -j ПРИНЯТЬ
    

    Возможно, вы хотели удалить это правило?

  3. я ничего не вижу PostDown команды на снос wg0-фильтр цепочка, как у вас для других пользовательских цепочек; убедитесь, что вы включили их:

     PostDown = iptables -F wg0-фильтр
     PostDown = iptables -X wg0-filter
    

    Без этих команд разрыва, если вы вносите изменения и перезапускаете, wg0-цепочка может закончиться использованием старых правил из предыдущих попыток вместо новых обновлений. (И убедитесь, что вы следуете Внесение изменений в конфигурацию совет из статьи, чтобы закрыть интерфейс WireGuard перед внесением изменений в конфигурацию и перезапуском - запустите sudo iptables-сохранить когда интерфейс опущен, дважды проверьте, есть ли у вас какие-либо старые правила или цепочки, которые не были очищены.)

флаг ua
Спасибо, Лор, что взял на себя ответственность ответить на мой неаккуратный пост. Мне очень жаль, что я был небрежным. IP-адрес действительно был неправильным в моем файле wg0.conf. «PostDown = iptables -X wg0-filter» была просто опечаткой в ​​сообщении. Не работает как надо. Спасибо за отличные уроки и заметки!

Ответить или комментировать

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