Как ограничить доступ виртуальной машины на Ubuntu только к определённым хостам?

Здравствуйте! У меня возникла необходимость настроить правила для трафика на виртуальной машине с Ubuntu 22.04. У меня есть рабочая подсеть 10.140.6.0 (eth0), и мне нужно настроить так, чтобы интерфейс wg0 с подсетью 10.10.10.1 мог подключаться только к определённым хостам на eth0. Это нужно реализовать таким образом, чтобы клиент не имел возможности пинговать или подключаться к каким-либо другим ресурсам. В частности, необходимо, чтобы виртуальная машина имела доступ только к следующим IP-адресам: 10.140.6.1, 10.140.6.5, 10.140.6.13, 10.140.6.18, и 10.140.6.32, а все остальные адреса игнорировались. Как можно реализовать данное решение? Благодарю за помощь!
  • 26 сентября 2024 г. 19:13
Ответы на вопрос 2
Добрый день!

Для ограничения доступа виртуальной машины на Ubuntu к определённым IP-адресам, вы можете использовать `iptables` для настройки правил межсетевого экрана. 

Вот как вы можете это сделать:

1. **Сначала убедитесь, что у вас установлены пакеты для работы с iptables:**

   ```bash
   sudo apt update
   sudo apt install iptables
   ```

2. **Сначала сбросьте текущие правила для iptables, чтобы начать с чистого slate:**

   ```bash
   sudo iptables -F
   sudo iptables -X
   ```

3. **Затем установите политику по умолчанию для цепочки INPUT (входящий трафик) и OUTPUT (исходящий трафик) на DROP, чтобы запретить весь трафик по умолчанию:**

   ```bash
   sudo iptables -P INPUT DROP
   sudo iptables -P OUTPUT DROP
   ```

4. **Разрешите локальный трафик:**

   ```bash
   sudo iptables -A INPUT -i lo -j ACCEPT
   sudo iptables -A OUTPUT -o lo -j ACCEPT
   ```

5. **Теперь добавьте правила для разрешения трафика только к указанным IP-адресам для интерфейса `wg0`:**

   ```bash
   # Разрешить выходящий трафик из wg0 на указанные IP
   sudo iptables -A OUTPUT -o eth0 -d 10.140.6.1 -j ACCEPT
   sudo iptables -A OUTPUT -o eth0 -d 10.140.6.5 -j ACCEPT
   sudo iptables -A OUTPUT -o eth0 -d 10.140.6.13 -j ACCEPT
   sudo iptables -A OUTPUT -o eth0 -d 10.140.6.18 -j ACCEPT
   sudo iptables -A OUTPUT -o eth0 -d 10.140.6.32 -j ACCEPT
   
   # Разрешить входящий трафик от указанных IP
   sudo iptables -A INPUT -i eth0 -s 10.140.6.1 -j ACCEPT
   sudo iptables -A INPUT -i eth0 -s 10.140.6.5 -j ACCEPT
   sudo iptables -A INPUT -i eth0 -s 10.140.6.13 -j ACCEPT
   sudo iptables -A INPUT -i eth0 -s 10.140.6.18 -j ACCEPT
   sudo iptables -A INPUT -i eth0 -s 10.140.6.32 -j ACCEPT
   ```

6. **Дополнительно, вы можете разрешить ответы на исходящий трафик (например, для установленных соединений):**

   ```bash
   sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
   ```

7. **Сохраните правила для iptables, чтобы они применялись после перезагрузки системы:**

   ```bash
   sudo apt install iptables-persistent
   sudo netfilter-persistent save
   ```

С этими настройками ваша виртуальная машина будет разрешать соединения только к указанным IP-адресам, а весь остальной трафик будет заблокирован. Убедитесь, что вы протестировали настройки перед развертыванием в продуктивной среде, чтобы избежать потери доступа к виртуальной машине.
надо осваивать iptables/nftables и писать правила.
Похожие вопросы