Назад | Перейти на главную страницу

Как настроить IPTables на хосте KVM - iptables-persistent игнорируется

Я пытаюсь настроить некоторые конкретные правила IPTables на хосте ubuntu 14.04.1, на котором работают некоторые гости KVM.

В коробке есть несколько сетевых адаптеров с несколькими IP-адресами, и гости используют разные адреса в зависимости от их функций.

Обычно для этого я использую iptables-persistent, но по какой-то причине правила из /etc/iptables/rules.v4 не загружаются во время загрузки. iptables-persistent корректно работает, если libvirt не установлен.

Если я запускаю '/etc/init.d/iptables-persistent start', тогда загружаются правила и все настройки соответствуют моим ожиданиям. Но при загрузке их нет. Я пробовал создать очень простой файл rules.v4 для отладки, но он все еще не загружен.

Символическая ссылка init для iptables-persistent существует по адресу /etc/rc2.d/S37iptables-persistent.

Я подтвердил, что ufw отключен. Я также удалил правила nwfilter из / etc / libvirt / nwfilter, и virsh nwfilter-list не отображает никаких записей.

Есть идеи, что еще может устанавливать эти правила и как я настраиваю их по своему усмотрению?

вывод состояния ufw

# ufw status
Status: inactive

вывод virsh nwfilter-list

# virsh nwfilter-list
 UUID                                  Name                 
------------------------------------------------------------------

содержимое /etc/iptables/rules.v4

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:LOG_AND_DROP - [0:0]
-A INPUT -s 192.168.10.0/24 -i br0 -j ACCEPT
-A INPUT -s 192.168.11.0/24 -i br0 -j ACCEPT
-A LOG_AND_DROP -j LOG --log-prefix "iptables deny: " --log-level 7
-A LOG_AND_DROP -j DROP
COMMIT

вывод iptables -L -n после загрузки (нежелательный результат)

# iptables -L -n -v
Chain INPUT (policy ACCEPT 12 packets, 912 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 ACCEPT     udp  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            udp dpt:53
    0     0 ACCEPT     tcp  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            tcp dpt:53
    0     0 ACCEPT     udp  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            udp dpt:67
    0     0 ACCEPT     tcp  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            tcp dpt:67
    0     0 ACCEPT     udp  --  tunnelbr0 *       0.0.0.0/0            0.0.0.0/0            udp dpt:53
    0     0 ACCEPT     tcp  --  tunnelbr0 *       0.0.0.0/0            0.0.0.0/0            tcp dpt:53
    0     0 ACCEPT     udp  --  tunnelbr0 *       0.0.0.0/0            0.0.0.0/0            udp dpt:67
    0     0 ACCEPT     tcp  --  tunnelbr0 *       0.0.0.0/0            0.0.0.0/0            tcp dpt:67
    0     0 ACCEPT     udp  --  mgmtbr0 *       0.0.0.0/0            0.0.0.0/0            udp dpt:53
    0     0 ACCEPT     tcp  --  mgmtbr0 *       0.0.0.0/0            0.0.0.0/0            tcp dpt:53
    0     0 ACCEPT     udp  --  mgmtbr0 *       0.0.0.0/0            0.0.0.0/0            udp dpt:67
    0     0 ACCEPT     tcp  --  mgmtbr0 *       0.0.0.0/0            0.0.0.0/0            tcp dpt:67
  193 17300 ACCEPT     all  --  br0    *       192.168.10.0/24      0.0.0.0/0           
    0     0 ACCEPT     all  --  br0    *       192.168.11.0/24      0.0.0.0/0           

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 ACCEPT     all  --  *      virbr0  0.0.0.0/0            192.168.122.0/24     ctstate RELATED,ESTABLISHED
    0     0 ACCEPT     all  --  virbr0 *       192.168.122.0/24     0.0.0.0/0           
    0     0 ACCEPT     all  --  virbr0 virbr0  0.0.0.0/0            0.0.0.0/0           
    0     0 REJECT     all  --  *      virbr0  0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable
    0     0 REJECT     all  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable
    0     0 ACCEPT     all  --  tunnelbr0 tunnelbr0  0.0.0.0/0            0.0.0.0/0           
    0     0 REJECT     all  --  *      tunnelbr0  0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable
    0     0 REJECT     all  --  tunnelbr0 *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable
    0     0 ACCEPT     all  --  mgmtbr0 mgmtbr0  0.0.0.0/0            0.0.0.0/0           
    0     0 REJECT     all  --  *      mgmtbr0  0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable
    0     0 REJECT     all  --  mgmtbr0 *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable

Chain OUTPUT (policy ACCEPT 132 packets, 17456 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 ACCEPT     udp  --  *      virbr0  0.0.0.0/0            0.0.0.0/0            udp dpt:68
    0     0 ACCEPT     udp  --  *      tunnelbr0  0.0.0.0/0            0.0.0.0/0            udp dpt:68
    0     0 ACCEPT     udp  --  *      mgmtbr0  0.0.0.0/0            0.0.0.0/0            udp dpt:68

Chain LOG_AND_DROP (0 references)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 LOG        all  --  *      *       0.0.0.0/0            0.0.0.0/0            LOG flags 0 level 7 prefix "iptables deny: "
    0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0 

Вывод iptables -L -n -v после запуска /etc/init.d/iptables-persistent start (ожидаемый результат)

# iptables -L -n -v
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
   13   920 ACCEPT     all  --  br0    *       192.168.10.0/24      0.0.0.0/0           
    0     0 ACCEPT     all  --  br0    *       192.168.11.0/24      0.0.0.0/0           

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 8 packets, 1104 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain LOG_AND_DROP (0 references)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 LOG        all  --  *      *       0.0.0.0/0            0.0.0.0/0            LOG flags 0 level 7 prefix "iptables deny: "
    0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0           

Все «дополнительные» правила, которые вы видите, были добавлены демоном libvirt для поддержки (и безопасности) виртуальных сетей для гостей вашей виртуальной машины. Обычно вам не нужно беспокоиться об этих правилах (и не следует пытаться сохранить их, так как они будут дублироваться при следующей загрузке).

Также ясно, что все ваши постоянные правила брандмауэра мы добавлен в брандмауэр.

Было трудно или невозможно распознать любой из этих фактов без критического -v переключатель для команды `iptables.

Вы проверяли / etc / network / interfaces на предмет наличия директивы pre-up, которая может выглядеть примерно так:

pre-up iptables-restore < /etc/iptables.rules

Другая возможность в Ubuntu / Debian заключается в том, что сценарии находятся в каталоге /etc/network/if-pre-up.d/, поэтому вы должны перечислить содержимое этого каталога:

# ls -al /etc/network/if-pre-up.d/

Другая возможность заключается в том, что NetworkManager загружает правила, и вы можете проверить это, выполнив поиск firewall / iptables в следующем каталоге:

/etc/NetworkManager/dispatcher.d/

Также проверьте все сценарии в / etc / init и /etc/init.d на наличие «iptables» и «iptables-restore».