Regras do IPTables Corosync & Pacemaker

0

Ao usar o Corosync com dois toques através de endereços multicast 226.94.1.1 (Porta 5405) & amp; 226.94.1.2 (Port 5406) quais regras do iptables são necessárias para permitir nós para se comunicar de forma otimizada, sem dar qualquer acesso indevido e fazer o regras são brandas?

Eu tenho corrente:

iptables -A INPUT -p udp -m multiport --dports 5404,5405,5406 -j ACCEPT

Isso permitirá toda a comunicação necessária para uma configuração do Corosync / Pacemaker? ambos os anéis?

Eu ouvi argumentos de que algo como:

iptables -I INPUT 1 -m pkttype --pkt-type multicast -j ACCEPT

é obrigatório. No entanto, não consigo replicar uma situação em que isso ajuda se a primeira regra listada acima já estiver em vigor.

A documentação da Red Hat parece apoiar a primeira abordagem. Há sim alguma documentação da IBM esposando o segundo, mas é apenas um caso de uma regra que é muito leniente quando o primeiro faria o trabalho igualmente bem enquanto não deixando portas desnecessárias abertas?

Eu estou inclinado mais para a primeira regra, sendo suficiente, mas queria obter mais algumas opiniões sobre o assunto.

    
por kemra102 02.03.2014 / 19:57

1 resposta

1

A documentação da Red Hat e da IBM especifica regras que permitem mais pacotes do que realmente são necessários.

Os pacotes IP multicast não são muito diferentes dos pacotes IP unicast, a única diferença (além de como eles são enviados na camada 2 e roteados) é o endereço de destino, que deve estar no intervalo 224.0.0.0/ 4.

Como descrito na Falha do servidor , as seguintes regras podem ser usadas para um único toque do Corosync (supondo que OUTPUT chain não bloqueia nenhum tráfego):

iptables -A INPUT -p igmp -i $corosync_interface -j ACCEPT
for src_addr in $ip_addr_self $ip_addr_partner1 $ip_addr_partner2; do
  iptables -A INPUT -i $corosync_interface -s $src_addr -d $ip_addr_self \
    -p udp --source-port $(($corosync_port - 1)) \
    --destination-port $corosync_port -j ACCEPT
  iptables -A INPUT -i $corosync_interface -s $src_addr -d $ip_addr_mcast \
    -p udp --source-port $(($corosync_port - 1)) \
    --destination-port $corosync_port -j ACCEPT
done

Neste exemplo, as seguintes variáveis são assumidas como definidas:

  • $corosync_interface : a interface de rede usada pelo Corosync
  • $ip_addr_self : o endereço IP ao qual o Corosync se vincula localmente (especificado como bindnetaddr in corosync.conf )
  • $ip_addr_partner1 , $ip_addr_partner2 : os endereços IP dos outros nós do Corosync - mais podem ser adicionados se o cluster tiver mais de três nós.
  • $ip_addr_mcast : o endereço multicast usado para o Corosync (especificado como mcastaddr in corosync.conf )
  • $corosync_port : a porta (destino) usada pelo Corosync (especificada como mcastport in corosync.conf )

Para vários toques, a mesma abordagem pode ser usada com o nome da interface, endereços IP e números de porta alterados para corresponder às respectivas definições.

Em comparação com as regras especificadas na documentação, as regras acima são restritas a interfaces específicas, endereços de origem e portas de origem e a porta de destino é limitada a uma única porta. Na verdade, o Corosync não envia pacotes para mais de uma porta de destino, apenas usa uma porta diferente (porta de destino menos uma) para enviar dados do que para receber dados.

    
por Sebastian Marsching 30.12.2014 / 21:11