Как составить список адресов назначения в iptables?

Мне нужно создать правило в iptables, которое будет маркировать трафик, исключая при этом несколько диапазонов IP-адресов. Например:  
```bash
iptables -A PREROUTING -i enp1s0 -s 10.8.0.0/24 ! -d 10.9.0.0/24 -t mangle -j MARK --set-mark 4
```  
В этом примере, где указано `! -d`, мне необходимо добавить дополнительные диапазоны IP, такие как 10.11.0.0/24, 10.14.0.0/24 и другие. Я знаю, что много информации касается использования ipset, но в основном приводятся примеры с соответствиями по исходным адресам, а не по адресам назначения. Я хотел бы узнать, как можно осуществить это в iptables. Я также понимаю, что можно создавать несколько правил для повторной маркировки трафика, но считаю это не самым оптимальным методом.
  • 31 октября 2024 г. 17:03
Ответы на вопрос 2
Для добавления нескольких диапазонов IP-адресов в правило `iptables`, исключая эти адреса, вы можете использовать `ipset`. Это позволит вам сгруппировать диапазоны IP-адресов в набор и легко управлять ими.

Вот шаги, как это сделать:

1. **Установите ipset** (если не установлен):
   ```bash
   sudo apt-get install ipset
   ```

2. **Создайте набор ipset**:
   ```bash
   ipset create excluded_ips hash ip
   ```

3. **Добавьте необходимые диапазоны IP в созданный набор**:
   ```bash
   ipset add excluded_ips 10.9.0.0/24
   ipset add excluded_ips 10.11.0.0/24
   ipset add excluded_ips 10.14.0.0/24
   ```

4. **Обновите правило iptables, чтобы использовать набор ipset**:
   ```bash
   iptables -A PREROUTING -i enp1s0 -s 10.8.0.0/24 -m set ! --match-set excluded_ips dst -t mangle -j MARK --set-mark 4
   ```

Таким образом, вы создаете набор `excluded_ips`, в который добавляете все диапазоны, которые хотите исключить. В последнем правиле `iptables` используется опция `-m set` для проверки, не является ли адрес назначения (`dst`) частью набора `excluded_ips`.

Использование ipset позволяет избежать создания множества похожих правил в `iptables`, что делает настройку более чистой и легкой для управления.
Например, так: 

iptables -t mangle -N SPISOK
iptables -t mangle -A SPISOK -d 10.9.0.0/24 -j RETURN
iptables -t mangle -A SPISOK -d 10.11.0.0/24 -j RETURN
iptables -t mangle -A SPISOK -d 10.14.0.0/24 -j RETURN
iptables -t mangle -A SPISOK -j MARK --set-mark 4
iptables -t mangle -A PREROUTING -i enp1s0 -s 10.8.0.0/24 -j SPISOK
Похожие вопросы