Прозрачный прокси, который сохраняет MAC-адрес клиента
У меня есть клиент, который хочет перехватывать трафик 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
Рассматриваемый клиент находится в своей собственной подсети и настроен так, что прокси-сервер является шлюзом по умолчанию.
Результат:
- Клиент отправляет кадр на прокси; исходный IP-адрес клиента, исходный mac-адрес клиента, конечный IP-адрес сервера, конечный mac-прокси-сервер
- Прокси пересылает этот кадр на шлюз; исходный IP-адрес - прокси, исходный mac - прокси, конечный IP - сервер, конечный mac - шлюз
- Шлюз пересылает это на сервер и получает ответ обратно.
- Шлюз отправляет ответ обратно прокси; исходный IP - сервер, исходный mac - шлюз, целевой IP - прокси, целевой Mac - прокси
- Прокси пересылает этот ответ клиенту; исходный IP - сервер, исходный mac - прокси, конечный IP - клиент, конечный mac - клиент. Конфигурация tproxy и iptables позволяет прокси отправлять пакеты с нелокальным IP-адресом.
Есть ли способ сделать что-то прозрачное на уровне MAC-адресов? То есть поместите клиента в ту же подсеть, что и шлюз. Шлюз видит исходный IP и mac как клиентский, даже если они получены от прокси. Можно ли это сделать, настроив прокси-сервер в качестве моста, а затем использовать ebtables для эскалации трафика, который будет обрабатываться iptables?
Когда я использую ebtables для передачи чего-либо до iptables, кажется, что моя прокси-программа не отвечает на пакеты, так как они предназначены для MAC-адресов шлюзов, а не для прокси-серверов.
Какие еще потенциальные возможности я мог бы исследовать?
РЕДАКТИРОВАТЬ: Когда клиент и шлюз находятся в разных подсетях (и клиент установил прокси в качестве шлюза), он работает, как описано в 1-5. Но я хочу знать, возможно ли иметь клиент и шлюз на одном и том же подсеть и иметь прокси полностью прозрачным (т.е. клиент не знает о прокси). Клиент не хочет перемещать некоторых клиентов в другую подсеть, он просто хочет найти решение. Спасибо!
РЕДАКТИРОВАТЬ 2: Я могу настроить прокси-сервер в качестве моста с помощью brctl, но не могу найти способ направить этот трафик в мою прокси-программу - спрашивается здесь Возможно ли для моста Linux перехватить трафик?, В настоящее время, с описанием от 1 до 5, он работает на уровне 3; он прозрачен на стороне клиента (клиент думает, что он общается с IP-адресом сервера), но не на стороне шлюза (шлюз общается с IP-адресом прокси-сервера). Я хочу выяснить, можно ли заставить это работать на втором уровне, чтобы он был полностью прозрачным? Какие варианты я должен изучить? Спасибо
РЕДАКТИРОВАТЬ 3: прояснил ситуацию более подробно.
1 ответ
Если машины находятся в одной подсети, ответ - нет. Внутри подсети протокол Ethernet доставляет пакеты от компьютера к компьютеру, а на уровне Ethernet MAC-адрес является истинным адресом источника, а IP-адреса неизвестны.