NetworkManager para iniciar o script

1

Em /etc/NetworkManager/dispatcher.d/01ifupdown em algum lugar no final:

case "$2" in
    up)
 export MODE="start"
 export PHASE="up"

 if [ -d /var/run/network/ ] ; then
  tmpfile='mktemp -t'
  if [ -e /var/run/network/ifstate ] ; then
   cat /var/run/network/ifstate | grep -v ^$IFACE= > $tmpfile || true
  fi
  echo $IFACE=$IFACE >> $tmpfile
  mv $tmpfile /var/run/network/ifstate
 fi

 exec run-parts /etc/network/if-up.d
 exec /etc/iptables.rules
 ;;

Eu executo o script iptables.rules, que é um shell script contendo algo assim:

#!/bin/sh
...
echo "restoring iptables..."
/sbin/iptables-restore -v <<-EOF;
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]

-A INPUT -i $EXTIF -p ICMP -s $UNIVERSE -d $EXTIP -j ACCEPT

COMMIT
EOF

Se eu executar este script a partir do shell, poderei ver a regra adicionada. No entanto, após a inicialização, a regra não está lá. / var / log / messages não mostra nada, nem tenho certeza se o eco do script deve estar visível lá ou em outro lugar.

    
por Michael 05.09.2010 / 03:01

2 respostas

1

Existem basicamente duas maneiras de configurar seu firewall com esse script.

Um deles é copiar o esqueleto do script em /etc/init.d e modificá-lo para as suas necessidades, depois criar os links necessários (usando update-rc.d). Isso cria um "serviço" que é iniciado e interrompido quando os níveis de execução são alterados, dependendo de suas configurações.

O quão bem isso funcionará com sua máquina é uma questão diferente. O NetworkManager só inicia interfaces quando um usuário faz logon, enquanto os scripts de nível de execução são executados no momento da inicialização. Como suas interfaces de rede não possuem endereços IP até que o NetworkManager os tenha configurado, qualquer regra do iptables com endereços IP conectados a interfaces locais provavelmente falhará.

A outra opção é iniciar seus scripts de firewall a partir do arquivo / etc / network / interfaces. Nesse arquivo existem sub-rotinas que dizem ao SO como configurar as interfaces. Cada interface que deve ser configurada pelo NetworkManager começa com "allow-hotplug". Normalmente, essas estrofes só têm essa linha, já que tudo é normalmente tratado pelo DHCP. No entanto, você pode adicionar linhas no formato

up script-with-parameters

ou

down script-with-parameters

que são executados quando esta interface específica sobe ou desce (o que também acontece se alguém puxa o cabo de rede). Isso deve fazer o truque para você. Leia a man page para interfaces ( man interfaces ).

    
por 05.09.2010 / 10:42
1

exec faz com que o controle seja passado para o seu parâmetro de maneira que não retorne nada, pois exec run-parts /etc/network/if-up.d não será executado.

Você terá que encontrar algum outro lugar para executar o seu script iptables.rules de

    
por 05.09.2010 / 03:23