iptables 规则用于阻止进入/传出 Xen 容器的流量

iptables 规则用于阻止进入/传出 Xen 容器的流量

我正在尝试在我的 xen 主机服务器上设置 IPTABLES,它将阻止对同一台机器上的 xen 客户端的传入和/或传出访问。具体来说,我需要阻止到特定容器的传出端口 25 流量和传入端口 53 流量。

常规 IPTABLE 规则似乎只会影响流向主机的流量,而不会影响 xen 客户端。

对于我的服务器来说,eth0 是内部网络,eth1 是外部网络。

以下规则集看起来应该可以工作,但容器根本不受到影响:

iptables -A OUTPUT -p tcp -m state –state NEW,ESTABLISHED,RELATED –sport 25 -d -j REJECT
iptables -A INPUT -p tcp -m state –state NEW,ESTABLISHED,RELATED –dport 53 -d -j REJECT
iptables -A INPUT -p udp -m state –state NEW,ESTABLISHED,RELATED –dport 53 -d -j REJECT

所以基本上,我如何设置适用于 xen 客户端而不是 xen 主机的 IPTABLE 规则?

谢谢

答案1

此规则在我的安装中有效:

iptables -I FORWARD 1 -d [client-ip] -p tcp -m tcp --dport 53 -j DROP
iptables -I FORWARD 1 -d [client-ip] -p udp -m udp --dport 53 -j DROP

请注意,netfilter 从上到下读取规则,如果您有一条规则允许所有流量到达上面的这个客户端(iptables -A添加规则结尾表格中的“新规”将无法达成,也不会生效。

我不明白为什么你要使用“状态”模块,如果你列出了所有有效状态?它只是占用 CPU 时间,在我看来没有任何效果。

接下来,我不确定阻止来自端口 25 的流量的目的是什么。如果你的客户端发送ab 电子邮件,他连接到远程服务器的端口 25,但使用其中一个本地端口(默认为 32k..64k)。你能解释一下,你想要得到什么结果吗?

答案2

您可以使用 iptables 的“physdev”模块。但请记住,xen 会在客户机启动时插入(即,将其放在防火墙规则列表的开头)完全访问规则。因此,您应该调整 xen 逻辑。

我自己为 xen 主机配备了简单的防火墙,其配置如下:

#!/bin/bash

# ====== Public settings ======

LAN='192.168.0.0/24'
WAN='0.0.0.0/0.0.0.0'

HOST_IP='192.168.0.20'    

ADMIN_PORTS='22,873'

DB_IP='192.168.0.6'
MYSQL_PORTS='3306'
DB_PORTS="$ADMIN_PORTS,$MYSQL_PORTS"

WS_IP='192.168.0.10'
WS_PORTS="$ADMIN_PORTS,80"

WS2_IP='192.168.0.9'
WS2_PORTS="$ADMIN_PORTS,8082"

XP_IP='192.168.0.7'
XP_PORTS="$ADMIN_PORTS,3389,6666,6688,12345"


# ====== Private settings ======

IPTABLES='/sbin/iptables'

clearTables()
{
        $IPTABLES -t filter -P INPUT ACCEPT
        $IPTABLES -t filter -P FORWARD ACCEPT
        $IPTABLES -t filter -P OUTPUT ACCEPT

        $IPTABLES -t nat -P PREROUTING ACCEPT
        $IPTABLES -t nat -P POSTROUTING ACCEPT
        $IPTABLES -t nat -P OUTPUT ACCEPT

        $IPTABLES -t mangle -P PREROUTING ACCEPT
        $IPTABLES -t mangle -P INPUT ACCEPT
        $IPTABLES -t mangle -P OUTPUT ACCEPT
        $IPTABLES -t mangle -P FORWARD ACCEPT
        $IPTABLES -t mangle -P POSTROUTING ACCEPT

        $IPTABLES -t filter -F
        $IPTABLES -t nat -F
        $IPTABLES -t mangle -F

        $IPTABLES -t filter -X
        $IPTABLES -t nat -X
        $IPTABLES -t mangle -X
}

listTables(){
        for table in filter nat mangle; do
                echo "=========== $table ============";
                $IPTABLES -t $table -n -L;
                echo;
        done
}

clearTables

PHYSDEV='-m physdev --physdev-is-bridged'


# ====== Firewall logic ======

#========= Common permissions for host machine ==========
$IPTABLES -A FORWARD $PHYSDEV -p ALL -s $HOST_IP -j ACCEPT
$IPTABLES -A FORWARD $PHYSDEV -p ALL -d $HOST_IP -j ACCEPT


# ======= For all (guests) =======

# DNS
$IPTABLES -A FORWARD $PHYSDEV -p udp --dport 53 -j ACCEPT
$IPTABLES -A FORWARD $PHYSDEV -p udp --sport 53 -j ACCEPT

# ping
#$IPTABLES -A FORWARD $PHYSDEV -p icmp -s $DB_IP -d $LAN -j REJECT
$IPTABLES -A FORWARD $PHYSDEV -p icmp -j ACCEPT
$IPTABLES -A FORWARD $PHYSDEV -p icmp -j ACCEPT


#======= DB server ======

# LAN <--> admin ports
$IPTABLES -A FORWARD $PHYSDEV -s $LAN -d $DB_IP -p tcp -m multiport --dports $ADMIN_PORTS -j ACCEPT
$IPTABLES -A FORWARD $PHYSDEV  -s $DB_IP -d $LAN -p tcp -m multiport --sports $ADMIN_PORTS -j ACCEPT

# MySQL between WS and DB
$IPTABLES -A FORWARD $PHYSDEV -s $WS_IP -d $DB_IP -p tcp -m multiport --dports $MYSQL_PORTS -j ACCEPT
$IPTABLES -A FORWARD $PHYSDEV -s $DB_IP -d $WS_IP -p tcp -m multiport --sports $MYSQL_PORTS -j ACCEPT


#======== WS ========
# LAN <--> admin ports
$IPTABLES -A FORWARD $PHYSDEV -s $LAN -d $WS_IP -p tcp -m multiport --dports $ADMIN_PORTS -j ACCEPT
$IPTABLES -A FORWARD $PHYSDEV  -s $WS_IP -d $LAN -p tcp -m multiport --sports $ADMIN_PORTS -j ACCEPT
# HTTP-порт
$IPTABLES -A FORWARD $PHYSDEV -s $LAN -d $WS_IP -p tcp -m multiport --dports $WS_PORTS -j ACCEPT
$IPTABLES -A FORWARD $PHYSDEV -s $WS_IP -d $LAN -p tcp -m multiport --sports $WS_PORTS -j ACCEPT


#======== WS2 =======
# LAN <--> admin ports
$IPTABLES -A FORWARD $PHYSDEV -s $LAN -d $WS2_IP -p tcp -m multiport --dports $ADMIN_PORTS -j ACCEPT
$IPTABLES -A FORWARD $PHYSDEV  -s $WS2_IP -d $LAN -p tcp -m multiport --sports $ADMIN_PORTS -j ACCEPT
# HTTP-ports
$IPTABLES -A FORWARD $PHYSDEV -s $LAN -d $WS2_IP -p tcp -m multiport --dports $WS2_PORTS -j ACCEPT
$IPTABLES -A FORWARD $PHYSDEV -s $WS2_IP -d $LAN -p tcp -m multiport --sports $WS2_PORTS -j ACCEPT


#======== WIN_XP =======
# LAN <--> admin ports
$IPTABLES -A FORWARD $PHYSDEV -s $LAN -d $XP_IP -p tcp -m multiport --dports $ADMIN_PORTS -j ACCEPT
$IPTABLES -A FORWARD $PHYSDEV  -s $XP_IP -d $LAN -p tcp -m multiport --sports $ADMIN_PORTS -j ACCEPT
# HTTP-ports
$IPTABLES -A FORWARD $PHYSDEV -s $LAN -d $XP_IP -p tcp -m multiport --dports $XP_PORTS -j ACCEPT
$IPTABLES -A FORWARD $PHYSDEV -s $XP_IP -d $LAN -p tcp -m multiport --sports $XP_PORTS -j ACCEPT


#========== Common ban to LAN for guests ==========
$IPTABLES -A FORWARD $PHYSDEV -p ALL -d $LAN -j DROP
$IPTABLES -A FORWARD $PHYSDEV -p ALL -s $LAN -j DROP

答案3

我很少尝试阻止 DomU VM,所以我无法确切告诉您该怎么做。但请参考此页面:

http://wiki.xensource.com/xenwiki/XenNetworking

尤其是“桥接”部分。那里有一些iptables例子。

相关内容