
У меня возникла проблема с iptables из-за моего очень ограниченного опыта работы с ним.
У меня настроен выходной ретранслятор TOR, и я пытаюсь перенаправить весь локальный и TOR-трафик так, чтобы он выходил из моего сервера через порт 8080.
На данный момент у меня установлено следующее:
-A PREROUTING -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080
Но, похоже, это перенаправляет только транзитный трафик, когда я выступаю в роли маршрутизатора, а не трафик, исходящий от устройства.
решение1
Не буду комментировать TOR, так как не обладаю достаточными знаниями.
Но для цели iptables, вот он. PREROUTING
включает маршрутизацию. При инициировании соединения изместныйсистема, вы не маршрутизируете. Вам просто нужно использовать OUTPUT
вместо/в дополнение к PREROUTING
.
Область примененияREDIRECT
:
REDIRECT
Эта цель действительна только в таблице nat, в цепочках PREROUTING и OUTPUT, а также в цепочках, определяемых пользователем, которые вызываются только из этих цепочек. Она перенаправляет пакет на саму машину, изменяя IP-адрес назначения на основной адрес входящего интерфейса (локально сгенерированные пакеты сопоставляются с адресом localhost, 127.0.0.1 для IPv4 и ::1 для IPv6).
Так:
iptables -t nat -A OUTPUT -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080
РЕДАКТИРОВАТЬ:
Чтобы избежать перенаправления определенного пользователя или группы (например, чтобы избежать бесконечного цикла со службой на порту 8080), вы можете сделать так (пример для службы, работающей с эффективной группой tor
) вместо приведенного выше:
iptables -t nat -N OUTPUT intercept
iptables -t nat -A OUTPUT -p tcp -m tcp --dport 80 -j intercept
iptables -t nat -A intercept -m owner --gid-owner tor -j RETURN
iptables -t nat -A intercept -j REDIRECT --to-ports 8080