С помощью этого / 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 Но я не могу заставить его работать.
-А для добавления и -Я для вставки в начало списка правил