Olá.
Uso Arch Linux, e para gerenciar rede, uso o Network Manager. Minha conexão com a internet é via rádio, interface wlan0. Compartilho essa conexão com um Notebook na rede local eth0 usando uma regra no IPTables. Estou precisando que sempre que a wlan0 conectar, umas regras que uso pra evitar invasões sejam executadas (/etc/firewall/security) e sempre que essa interface desconectar, essas regras sejam removidas. Sempre que eth0 conectar os comandos pra compartilhamento (/etc/firewall/share) e as regras de bloqueios de sites (/etc/firewall/block: executadas apenas se wlan0 estiver conectada e consiga pingar www.google.com, pois precisa resolver os domínios dos sites a serem bloqueados) sejam executados. Sempre que a eth0 desconectar as regras de compartilhamento e bloqueios sejam limpas.
Criei o seguinte script (/etc/NetworkManager/dispatcher.d/40_iptables):
#!/bin/bash
INTERFACE=$1
STATUS=$2
function checkping() {
if [ `ping -q -w 1 -c 1 www.google.com > /dev/null && echo true || echo false` ]; then
ping_ok=true
else
ping_ok=false
fi
}
function doblock() {
checkping
if [ $ping_ok ]; then
exec /etc/firewall/block
else
sleep 60
doblock
fi
}
case "$INTERFACE" in
'eth0')
if [ $STATUS = "up" ]; then
exec /etc/firewall/share
if [ `ifconfig | grep wlan0 | wc -l` = 1 ]; then
doblock
fi
else
exec iptables -F
exec iptables -F -t nat
if [ -f /etc/firewall/secured ]; then
exec /etc/firewall/security
fi
fi
;;
'wlan0')
if [ $STATUS = "up" ]; then
exec /etc/firewall/security
else
exec iptables -F
fi
;;
esac
Está tudo funcionando perfeitamente, com exceção da parte dos bloqueios, que não são executados. O que tem de errado com a função doblock? Parece que ela não está sendo executada...
Sou iniciante na criação de scripts Shell Script, se alguém puder me apontar o erro será de grande ajuda :D