Как исправить ситуацию, когда сервер OpenVPN видит клиента с его настоящим IP-адресом, а не с адресом сервера, и другие серверы и сайты также видят адрес сервера?

Как можно настроить iptables на сервере, чтобы ограничить доступ к определённым сервисам только для пользователей VPN, если при подключении к OpenVPN с сервера, который я называю proxy, внешний IP адрес отображается как IP адрес сервера proxy, а на самом сервере отображается IP адрес клиента?
  • 17 ноября 2024 г. 3:43
Ответы на вопрос 2
Если ваш сервер OpenVPN видит клиента с его настоящим IP-адресом, а не с адресом сервера, это может значить, что не настроен NAT (преобразование сетевых адресов) для OpenVPN. Сделать так, чтобы сервер и другие ресурсы видели только IP-адрес сервера, можно следующим образом:

### Настройка NAT с помощью iptables

1. **Включите IP forwarding на сервере OpenVPN**:
   Это можно сделать, выполнив следующую команду:
   ```bash
   echo 1 > /proc/sys/net/ipv4/ip_forward
   ```
   Чтобы сделать это изменение постоянным, отредактируйте файл `/etc/sysctl.conf` и измените или добавьте строку:
   ```
   net.ipv4.ip_forward=1
   ```
   После изменения файла выполните:
   ```bash
   sysctl -p
   ```

2. **Настройка iptables**:
   Добавьте правила iptables для NAT. Замените `tun0` на ваш интерфейс, который используется для OpenVPN (по умолчанию это обычный `tun0`):
   ```bash
   iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
   ```
   Здесь `eth0` — это интерфейс, который соединен с интернетом. Убедитесь, что используете правильный интерфейс.

   Также добавьте правила для разрешения доступа к VPN клиентам:
   ```bash
   iptables -A INPUT -i tun0 -j ACCEPT
   iptables -A FORWARD -i tun0 -j ACCEPT
   iptables -A FORWARD -o tun0 -m state --state RELATED,ESTABLISHED -j ACCEPT
   ```

3. **Сохраните правила iptables**:
   После настройки iptables вам потребуется сохранить эти правила, чтобы они применялись после перезагрузки. В зависимости от вашей системы это может быть сделано с помощью:
   ```bash
   iptables-save > /etc/iptables/rules.v4
   ```
   Или с помощью системного сервиса, например, `netfilter-persistent`.

### Ограничение доступа к сервисам

Чтобы разрешить доступ к определенным сервисам только для пользователей VPN, вы можете добавить дополнительные правила iptables. Например, если у вас есть сервис, работающий на порту 80 (HTTP), вы можете сделать следующее:

1. **Блокировка доступа для всех, кроме VPN**:
   ```bash
   iptables -A INPUT -p tcp --dport 80 -m conntrack --ctstate NEW -j REJECT
   ```

2. **Разрешить доступ с VPN**:
   ```bash
   iptables -A INPUT -i tun0 -p tcp --dport 80 -j ACCEPT
   ```

### Примечание
- Проверьте конфигурацию OpenVPN и убедитесь, что настройка `push "redirect-gateway def1"` включена, чтобы перенаправлять весь трафик через VPN.
- Перед внесением изменений в iptables рекомендуется создать резервную копию текущих настроек, чтобы иметь возможность восстановить их в случае ошибки.
- Тестируйте настройки после внесения изменений, чтобы убедиться, что все работает как ожидалось.
задача в том, чтобы iptables на сервере ограничивал доступ к определённым портам, для всех кто подключается НЕ с IP этого сервера, то есть не из под VPN

iptables -A INPUT ! -s 192.168.111.0/24 -p tcp --dport 443 -j DROP

192.168.111.0/24 - это, например, диапазон адресов, прописанных в конфигурации OpenVPN.
443 - это порт на этом же сарвере, доступ к которому должен быть только через VPN.
Похожие вопросы