Как правильно настроить Mikrotik CHR и Apache, чтобы обеспечивать корректную запись реальных IP-адресов пользователей?

У вас есть две виртуальные машины: <br/> 10.0.0.1 - Mikrotik Cloud Hosted Router <br/> 10.0.0.2 - Centos 7 с установленным Apache. Микротик управляет внешним трафиком, а внутренние IP-адреса выдает материнская операционная система. На Mikrotik настроен проброс порта 443 через dst-nat на 443 порт Centos. <br/> <pre><code>/ip firewall nat
add action=masquerade chain=srcnat out-interface=ether1
add action=netmap chain=dstnat comment="Web-server SSL" dst-address=\
    10.0.0.1 dst-port=443 in-interface=ether1 protocol=tcp to-addresses=\
    10.0.0.2 to-ports=443</code></pre> <br/> В Apache включен сбор логов с установленными параметрами: <br/> <pre><code class="apache">LogFormat "%a %l %u %t \"%r\" %&gt;s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%a %l %u %t \"%r\" %&gt;s %O" common</code></pre> <br/> Тем не менее, в логах Apache отображается только IP-адрес 10.0.0.1. Как можно настроить систему так, чтобы Apache получал реальный IP-адрес пользователя вместо адреса Mikrotik?
  • 17 сентября 2024 г. 14:03
Ответы на вопрос 1
Чтобы обеспечить корректную запись реальных IP-адресов пользователей в логах Apache, вам необходимо настроить Mikrotik CHR и Apache так, чтобы информация о реальном IP-адресе пользователей передавалась на веб-сервер.

### Шаги для настройки корректной записи IP-адресов:

1. **Настройка Mikrotik для передачи реального IP-адреса**:

   Вам нужно использовать заголовок `X-Forwarded-For`, чтобы передавать исходный IP-адрес клиента на сервер Apache. Для этого добавим правило для изменения заголовков.

   Используйте следующие команды в Mikrotik для настройки `http` класса сервисов и `web-proxy` или `mangle` для создания правил с заголовками. Приведем пример с `mangle`:

   ```plaintext
   /ip firewall mangle
   add chain=forward protocol=tcp dst-port=443 action=add-src-to-address-list address-list=web-clients address-list-timeout=1h
   ```

   Обратите внимание, что данный пример создает список IP-адресов, но нам нужно понимать, какой метод вы будете использовать для передачи IP на сервер. Используйте `HTTP Headers`:

   ```plaintext
   /ip hotspot walled-garden ip add action=allow comment="Allow to pass on next load" disabled=no dst-host=<ваш-домен> 
   ```

   В данном случае, вы можете использовать `HTTP/HTTPS` перенаправление с добавлением заголовка. 

2. **Настройки Apache для корректной обработки заголовка `X-Forwarded-For`**:

   Включите модуль `mod_remoteip`, который отвечает за обработку заголовка `X-Forwarded-For`. Для этого выполните следующие команды:

   ```bash
   sudo a2enmod remoteip
   ```

   Затем настройте `remoteip` в конфигурации Apache (обычно это файл `/etc/httpd/conf/httpd.conf` или `/etc/httpd/conf.d/your-vhost.conf`):

   ```apache
   <IfModule mod_remoteip.c>
       # Укажите IP-адрес Mikrotik или диапазон, откуда будут приходить
       RemoteIPHeader X-Forwarded-For
       RemoteIPTrustedProxy 10.0.0.1  # IP-адрес Mikrotik
   </IfModule>
   ```

3. **Настройка логирования**:

   Измените формат логов Apache в соответствии с вашим требованием для записи реальных IP:

   ```apache
   LogFormat "%{REMOTE_ADDR}e %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
   ```

   Или просто указывайте `REMOTE_ADDR` для получения пусть `X-Forwarded-For`.

4. **Перезапустите Apache**:

   После внесения изменений вам нужно перезапустить сервер Apache, чтобы изменения вступили в силу:

   ```bash
   sudo systemctl restart httpd
   ```

### Заключение
Таким образом, вы настроите Mikrotik для передачи реальных IP-адресов через заголовок `X-Forwarded-For`, а Apache примет этот заголовок для записи корректных адресов пользователей в своих логах. Теперь в логах Apache должны отображаться реальные IP-адреса клиентов.
Похожие вопросы