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

Как добавить правила брандмауэра при запуске цепочки в CentOS с libvirt и iptables?

С помощью этого / etc / sysconfig / iptables:

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j ACCEPT -s 192.168.3.0/24 -d 10.0.0.0/24
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

Моя цепочка FORWARD выглядит так:

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  192.168.3.0/24       10.0.0.0/24

Теперь, когда я запускаю libvirtd, цепочка FORWARD выглядит так:

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             10.0.0.0/24          ctstate RELATED,ESTABLISHED
ACCEPT     all  --  10.0.0.0/24          anywhere            
ACCEPT     all  --  anywhere             anywhere            
REJECT     all  --  anywhere             anywhere             reject-with icmp-port-unreachable
REJECT     all  --  anywhere             anywhere             reject-with icmp-port-unreachable
ACCEPT     all  --  192.168.3.0/24       10.0.0.0/24         

Как видите, мое правило для 192.168.3.0/24 было после REJECT.

Как разместить правило для 192.168.3.0/24 перед REJECT?

Наконец, я использовал перехватчик сетевого сценария libvirt для решения своей проблемы: ловушка сценария libvirt

# cat /etc/libvirt/hooks/network 

#!/bin/bash

NAME=$1
TASK=$2
IPTABLES=/usr/sbin/iptables

if [ $NAME = "default" ] ;then
  case "$TASK" in 
  # hook is called with <network_name> started begin -
  started)
      $IPTABLES -I FORWARD -s 192.168.3.0/24 -d 10.0.0.0/24 -j ACCEPT
  ;;
  # hook is called with <network_name> stopped end -
  stopped)
      $IPTABLES -D FORWARD -s 192.168.3.0/24 -d 10.0.0.0/24 -j ACCEPT
  ;;
  *)
      echo "qemu hook called with unexpected options $*" >&2
  ;;
  esac
fi

Теперь мое правило появляется первым. Я бы предпочел через это: libvirt nwfilter Но я не могу заставить его работать.

для добавления и для вставки в начало списка правил