2012-01-09 3 views
0

У меня есть интересная проблема. Моя компания размещает небольшой сервер приложений для клиента, и они хотят ограничить доступ только к нескольким IP-адресам. Клиент - крупная компания со многими подразделениями, и каждое подразделение имеет свою собственную сетевую структуру.Apache allow/deny IP regex

Я не буду вдаваться в детали, но из-за внутренней структуры моей компании для веб-серверов мы не можем использовать обычный разрешить, запретить синтаксис в Apache. У нас есть балансировщики нагрузки, которые отправляются на веб-серверы, которые затем отправляются на сервер приложения. Вместо этого мы используем что-то вроде следующего в нашей конфигурации Apache:

RewriteCond %{HTTP:X-Forwarded-For} !^213.212.45.54 

Мы используем заголовок X-Forwarded-For, чтобы соответствовать внешним IP-адресов. Проблема в том, что у одного из подразделений нашего клиента (назовите его подразделением A) его интернет-настройка проходит через внутренний прокси. Их внутренний прокси перенаправляет рабочую станцию ​​IP каждого пользователя на наш веб-сервер. Это означает, что X-Forwarded-For заголовок для тех пользователей, выглядит примерно так:

10.123.16.23, 213.212.45.54, 172.20.162.2 

10-адрес является рабочей станцией IP каждого пользователя в своей сети, 213 является WAN IP этого разделения, и 172 - это балансировка нагрузки моей компании.

Наша компания подтвердила, что если мы добавим IP-адрес рабочей станции пользователя в конфигурацию Apache, они смогут без проблем получить доступ к странице. Однако добавить каждый IP-адрес будет утомительным.

Есть ли способ сказать Apache только обратить внимание на средний IP (WAN IP), используя регулярные выражения? Или есть лучший способ настроить Apache?

+1

Может быть, это поможет сориентировать вас в правильном направлении, регулярное выражение , \ S * (213 \. \ D + \. \ D + \. \ D +) \ S *, матчи и возвращает средний IP 213.212.45.54 , чтобы вы могли использовать это, чтобы вызвать RewriteRule. –

ответ

0

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

Что-то же просто, как это может работать:

RewriteCond %{HTTP:X-Forwarded-For} !213\.212\.45\.54 

Обратные косые черты необходимы перед точками, потому что в противном случае. соответствует любому числу любых символов, включая совпадение ничем, это эквивалент * в подстановочном синтаксисе.

Нравится это, если строка 213.212.45.54 находится в любом месте заголовка X-Forwarded-For, регулярное выражение будет соответствовать.