У меня есть клиент, который хочет перехватить SSL-трафик, когда он покидает их сеть. Мое предлагаемое решение состоит в том, чтобы настроить прокси-сервер, который будет прозрачным, и на уровне 2, и на уровне 3, чтобы его можно было просто добавить в их сеть без каких-либо изменений в конфигурации. Прокси-сервер имеет два сетевых адаптера, один из которых подключен к серверу, а другой - к клиенту. Клиент, прокси и шлюз находятся под контролем клиента, сервер - нет.
Например:
client --- Proxy --- gateway -|- server
Моя прокси-программа настроена с опцией сокета IP_TRANSPARENT, чтобы она могла отвечать на соединения, предназначенные для удаленного IP.
Я использую следующую настройку:
iptables -t mangle -A PREROUTING -p tcp --dport 80 -j TPROXY --on-port 3128 --tproxy-mark 1/1
iptables -t mangle -A PREROUTING -p tcp -j MARK --set-mark 1
ip rule add fwmark 1/1 table 1
ip route add local 0.0.0.0/0 dev lo table 1
Рассматриваемый клиент находится в своей собственной подсети и настроен таким образом, что прокси-сервер является шлюзом по умолчанию.
Результат:
Есть ли способ сделать что-то прозрачным на уровне MAC-адреса? То есть поместите клиента в ту же подсеть, что и шлюз. Шлюз видит исходный IP-адрес и Mac как клиентские, даже если они исходят от прокси. Можно ли это сделать, настроив прокси как мост, а затем использовать ebtables для увеличения трафика, который будет обрабатываться iptables?
Когда я использую ebtables для передачи чего-либо в iptables, оказывается, что моя прокси-программа не отвечает на пакеты, поскольку они предназначены для MAC-адреса шлюза, а не прокси-сервера.
Какие еще потенциальные возможности я мог бы изучить?
РЕДАКТИРОВАТЬ: когда клиент и шлюз находятся в разных подсетях (и клиент установил прокси-сервер в качестве шлюза), он работает, как описано в пунктах 1-5. Но я хочу знать, можно ли иметь клиент и шлюз на одном и том же подсеть и сделать прокси полностью прозрачным (т.е. клиент не знает о прокси). Заказчик не хочет перемещать некоторых клиентов в другую подсеть, он просто хочет получить решение. Спасибо!
РЕДАКТИРОВАТЬ 2: я могу настроить прокси-сервер как мост с помощью brctl, но не могу найти способ направить этот трафик в мою прокси-программу - спрашивается здесь Может ли мост Linux перехватить трафик?. В настоящее время с описанием от 1 до 5 он работает на уровне 3; он прозрачен на стороне клиента (клиент думает, что он обращается к IP-адресу сервера), но не на стороне шлюза (шлюз обращается к IP-адресу прокси). Я хочу узнать, можно ли заставить это работать на уровне 2, чтобы он был полностью прозрачным? Какие доступные варианты мне следует изучить? Спасибо
РЕДАКТИРОВАТЬ 3: более подробно прояснил ситуацию.
Если машины находятся в одной подсети, ответ отрицательный. Внутри подсети протокол Ethernet доставляет пакеты от машины к машине, а на уровне Ethernet MAC-адрес является истинным адресом источника, а IP-адреса неизвестны.