Передайте запрос IP от Nginx до журналов Apache

"LDAP путь", чтобы сделать это должно было бы получить базовый объект с GUID (или SID), который получит только базовый объект и не иметь дополнительные присоединенные данные класса. Однако от этого базового объекта можно получить фактический "distinguishedName" для пользовательского объекта. Получение пользовательского объекта с помощью атрибута "distinguishedName" возвратит объект DirectoryEntry (.Net/C#/PowerShell) или объект iadsUser (VBScript) с полными данными класса и позволит Вам добираться безотносительно других данных атрибута, в которых Вы нуждаетесь.

Проблема получает начальный объект с GUID (или SID). Некоторые источники скажут, что необходимо преобразовать формат строки GUID (т.е. {28c67c50-9778-47a4-a77a-bf56f238a0c4}) в строковое представление массива байтов (т.е. "\50\7c\c6\28\78\97\a4\47\7a\a7\bf\56\f2\38\a0\c4") для передачи LDAP. Согласно документации Microsoft дело обстоит не так. Представление простой строки GUID/SID достаточно.

Вот образец того, как можно связать с объектом через GUID, затем получают фактический пользовательский объект с полными данными класса. Powershell на самом деле вытягивает полный объект, если Вы связываете с GUID. Если бы Вы используете VBScript, то необходимо было бы сделать два процесса шага.

Кроме того, обратите внимание на то, что хотя в документах Microsoft говорится, что несколько форматов строки GUID приемлемы, единственный, который я смог успешно использовать, должен разделить {} - символы. КРОМЕ ТОГО, обратите внимание, что это не корректная строка "массива байтов", но просто строка GUID, лишенная специальных символов.

$strGUID = "{28c67c50-9778-47a4-a77a-bf56f238a0c4}" -replace '-|{|}',''
$guid = [ADSI]"LDAP://"
$user = [ADSI]$guid.distinguishedName

Тот же процесс может использоваться для SID, связывают. Страница MSDN, описывающая это, говорит, что существует несколько fstring доступных форматов, но наиболее распространенным будет s-1-5-...-...-...-... формат.

#Powershell
$strSID="S-1-5-21-500000003-1000000000-1000000003-1001"
$uSid = [ADSI]"LDAP://"
$user = [ADSI]$user.distinguishedName

* ЗАПРОСЫ *

Если Вы собираетесь выполнить запрос LDAP для нахождения объекта (например, путем сравнения 'objectGUID' к массиву байтов или 'objectSID' к массиву байтов), это - когда необходимо будет сделать "корректное" преобразование массива байтов. Важно отметить, что массив байтов имеет другой порядок, чем строковое представление, поскольку это хранится как DWORD-WORD-WORD-WORD-BYTES для GUID и ДЕЙСТВИТЕЛЬНО принимает порядок порядка байтов во внимание. Преобразование массива байтов для SID имеет подобный condierations.

Существует несколько различных способов выполнить преобразование, Technet имеет простой vbScript алгоритм. Вы могли также сделать что-то более необычное с C#/VB.Net использование Системы. Гуид, или с помощью простого сценария в PowerShell (должен любить PowerShell!):

#Powershell
#   Creates a new System.GUID object from the supplied string.
#   Only need for this example.
$guid = [system.guid]"{28c67c50-9778-47a4-a77a-bf56f238a0c4}" 
$out=""
#Formats the array of integers as a backslash-delimited string of Hex values
$guid.ToByteArray() | %{ $out += $("\{0:x2}" -f $_) }

Необходимо затем смочь запросить для объекта с помощью стандартного фильтра LDAP:

(&(objectClass=User)(objectGUID=\50\7c\c6\28\78\97\a4\47\a7\7a\bf\56\f2\38\a0\c4))

... или независимо от того, что можно запрашивать для. Это должно работать на SID также.

0
задан 15 August 2011 в 19:15
3 ответа

необходимо изменить формат журнала апача для поддержки x-forward

например,

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %{X-Forwarded-For}i" combined

Затем можно использовать

 CustomLog logs/access_log combined

Таким образом, последняя запись в Вашем журнале будет заголовком nginx, устанавливает для реального IP. Конечно, можно передвинуть порядок в строке LogFormat

3
ответ дан 4 December 2019 в 12:01

Взгляните на mod_rpaf апачский модуль

На deb/ubuntu можно установить имя пакета libapache2-mod-rpaf

После того, как установленный, добавьте свой nginx IP к RPAFproxy_ips, начинающемуся/etc/apache2/mods-available/rpaf.conf

<IfModule mod_rpaf.c>
RPAFenable On RPAFsethostname 
On RPAFproxy_ips 127.0.0.1   
</IfModule>

Перезапустите апача, и необходимо видеть корректные IP-адреса в журналах.

Я удержал бы это на месте в Вашей конфигурации nginx также:

proxy_set_header Host $host;
proxy_set_header X-Real-IP  $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
1
ответ дан 4 December 2019 в 12:01

Вы только изменяете HTTP-заголовок не путь, как Apache видит соединение (от Nginx).

0
ответ дан 4 December 2019 в 12:01

Теги

Похожие вопросы