iptables para bloquear o tráfego de entrada / saída para um contêiner Xen

1

Estou tentando configurar o IPTABLES no meu servidor host xen que bloqueará o acesso de entrada e / ou saída a um cliente xen na mesma máquina. Especificamente, preciso bloquear o tráfego da porta 25 de saída e o tráfego da porta 53 para um contêiner específico.

As regras regulares do IPTABLE parecem apenas afetar o tráfego que vai para o host - não o cliente xen.

Para o meu servidor, eth0 é a rede interna, eth1 é o externo.

O seguinte conjunto de regras parece funcionar, mas o contêiner não é afetado:

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

Então, basicamente, como configuro uma regra IPTABLE que será aplicada ao cliente xen em vez do host xen?

Obrigado

    
por John P 17.08.2011 / 03:14

3 respostas

1

Esta regra funcionou na minha instalação:

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

Observe que o netfilter lê as regras de cima para baixo e se você tem uma regra permitindo todo o tráfego para esse cliente acima ( iptables -A adiciona regra ao fim do na tabela), essa nova regra não será alcançada e não terá efeito.

Eu não entendi porque você usa o módulo "state" se você listar todos os estados válidos? Ele apenas usa o tempo da CPU e não tem efeito IMHO.

Em seguida, não tenho certeza, qual é o objetivo de bloquear o tráfego, indo da porta 25. Se o cliente envia ab e-mail, ele se conecta à porta 25 do servidor remoto, mas usa um de portas locais (32k..64k por padrão) do seu lado. Você não poderia explicar, o que você quer obter como resultado?

    
por 17.08.2011 / 12:32
1

Você pode jogar com o módulo "physdev" do iptables. Mas lembre-se de que xen insere (isto é, coloca no início da lista de regras de firewall) regras de acesso total no início do convidado. Então, você deve ajustar a lógica xen.

Meu próprio firewall simples para host xen com huests:

#!/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
    
por 13.11.2015 / 10:10
0

Eu raramente tento bloquear as VM's DomU, então não posso dizer exatamente o que fazer. Mas por favor consulte esta página:

link

especialmente a seção "Bridging". Existem alguns exemplos de iptables aqui.

    
por 18.08.2011 / 10:36