Monitorar e executar comando?

1. Monitorar e executar comando?

Elgio Santana
Guri.de.Gorpa

(usa Debian)

Enviado em 20/08/2016 - 17:06h

Olá boa tarde,

Por falta de verba para manter um link de IP Fixo, tive que voltar para o dinâmico, e me deparei com um probleminha com meus redirecionamentos no iptables.

Toda vez muda o IP da interface "ppp0" eu tenho que manualmente "reload" no firewall, e queria que monitorasse e assim que mudar o ip "reload o firewall"

O ambiente está assim;
Firewall Iptables

.....
# Interface da Rede Externa - Internet
NET=ppp0

# Meu IP
MEUIP=$(ifconfig $NET | grep "inet end" | awk '{print $3}')
......


Possível script que eu estou em dúvida de usar

#!/bin/bash
NET=ppp0
IPEXT=$(ifconfig $NET | grep "inet end" | awk '{print $3}')
LOG=/tmp/ipchange.log
if ! ping $IPEXT >/dev/null; then
echo "ALERT!!! Internet IP Change!" > $LOG
ssmtp xxxxxxxxxxx@gmail.com < $LOG
sleep 2
service firewall restart
else
echo "Internet OK !!!" > $LOG
exit 1
fi
exit


está correto, ou alguma dica para me ajudar nesse problema, não sou muito com com shell script.

Obrigado.


  


2. Re: Monitorar e executar comando?

Estefanio Brunhara
stefaniobrunhara

(usa CentOS)

Enviado em 20/08/2016 - 18:47h

Tenta fazer isto!
Toda vez que sua conexão ppp sob ela executa um script "/etc/ppp/ip-up" coloca o services firewall restart antes do exit 0.




3. Re: Monitorar e executar comando?

Elgio Santana
Guri.de.Gorpa

(usa Debian)

Enviado em 20/08/2016 - 18:59h

estefaniobrunha escreveu:

Tenta fazer isto!
Toda vez que sua conexão ppp sob ela executa um script "/etc/ppp/ip-up" coloca o services firewall restart antes do exit 0.



Então, seria mais ou menos assim, pelo que eu analisei aqui no processo do "ppp" o arquivo /etc/init.d/pppd-dns quando ele é executado ele chama o arquivo 0000userpeerdns

#!/bin/sh -e
### BEGIN INIT INFO
# Provides: pppd-dns
# Required-Start: $local_fs
# Required-Stop:
# Default-Start: S
# Default-Stop:
# Short-Description: Restore resolv.conf if the system crashed.
### END INIT INFO
#
# Restore /etc/resolv.conf if the system crashed before the ppp link
# was shut down.

case "$1" in
start) ;;
stop|restart|force-reload) exit 0 ;;
*) echo "Usage: $0 {start|stop|restart|force-reload}" >&2; exit 1 ;;
esac

[ -x /etc/ppp/ip-down.d/0000usepeerdns ] \
&& exec /etc/ppp/ip-down.d/0000usepeerdns



Então poderia colocar esse "service firewall restart" em /etc/ppp/ip-up.d/0000usepeerdns que é,

#!/bin/sh -e

# this variable is only set if the usepeerdns pppd option is being used
[ "$USEPEERDNS" ] || exit 0

# exit if the resolvconf package is installed
[ -x /sbin/resolvconf ] && exit 0

# create the file if it does not exist
if [ ! -e /etc/resolv.conf ]; then
: > /etc/resolv.conf
fi

# follow any symlink to find the real file
REALRESOLVCONF=$(readlink --canonicalize /etc/resolv.conf)

# merge the new nameservers with the other options from the old configuration
{
cat /etc/ppp/resolv.conf
grep --invert-match '^nameserver[[:space:]]' "$REALRESOLVCONF" || true
} > "$REALRESOLVCONF.tmp"

# backup the old configuration and install the new one
cp -a "$REALRESOLVCONF" "$REALRESOLVCONF.pppd-backup.$PPP_IFACE"
mv -f "$REALRESOLVCONF.tmp" "$REALRESOLVCONF"

# restart nscd because resolv.conf has changed
if [ -e /var/run/nscd.pid ]; then
/etc/init.d/nscd restart || true
fi

service firewall restart

exit 0


O que acham?


4. Re: Monitorar e executar comando?

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 21/08/2016 - 16:03h

Guri.de.Gorpa escreveu:

Olá boa tarde,

Por falta de verba para manter um link de IP Fixo, tive que voltar para o dinâmico, e me deparei com um probleminha com meus redirecionamentos no iptables.

Toda vez muda o IP da interface "ppp0" eu tenho que manualmente "reload" no firewall, e queria que monitorasse e assim que mudar o ip "reload o firewall"

O ambiente está assim;
Firewall Iptables

.....
# Interface da Rede Externa - Internet
NET=ppp0

# Meu IP
MEUIP=$(ifconfig $NET | grep "inet end" | awk '{print $3}')
......


Possível script que eu estou em dúvida de usar

#!/bin/bash
NET=ppp0
IPEXT=$(ifconfig $NET | grep "inet end" | awk '{print $3}')
LOG=/tmp/ipchange.log
if ! ping $IPEXT >/dev/null; then
echo "ALERT!!! Internet IP Change!" > $LOG
ssmtp xxxxxxxxxxx@gmail.com < $LOG
sleep 2
service firewall restart
else
echo "Internet OK !!!" > $LOG
exit 1
fi
exit

está correto, ou alguma dica para me ajudar nesse problema, não sou muito com com shell script.
Obrigado.

------------------------------------------------------
Boa tarde, Guri.de.Gorpa .
Quanto ao seu script, "parece" que tem algumas falhas . . .
1º Não colocou um "limite" no ping, exemplo, ping -c4 . . . Isso implica que ficará "eternamente pingando" . . .
2º O "ping" é feito em "$IPEXT" (ppp0), logo, só vai falhar se não tiver conectado . . .
SUGESTÃO:

#INICIO#
#!/bin/bash
#SE O IP EXTERNO FOR ALTERADO, ENVIA EMAIL.

PEGAIP() {
[ -e Log_IP_PPP0.txt ] || echo "0.0.0.0::" > Log_IP_PPP0.txt # CRIA Log_IP_PPP0.txt NA 1ª EXECUÇÃO
IPEXT=$(ifconfig ppp0 | grep "inet end" | awk '{print $3}')
if [ $IPEXT ];then
if [ $IPEXT != $(sed -n '$p' Log_IP_PPP0.txt|cut -d":" -f1) ];then
echo -e " ALERT! Internet IP Changed! \n Data:$(date +%x)\n Hora:$(date +%X)\n IP:$IPEXT"|ssmtp "SEU_EMAIL"
echo "$IPEXT:$(date +%x):$(date +%X)" >> Log_IP_PPP0.txt
fi
else
echo -e "SEM_CONEXÃO:$(date +%x):$(date +%X)" >> Log_IP_PPP0.txt
fi
LIMPALOG
}

LIMPALOG() {
#CONTROLA O "TAMANHO" DO Log_IP_PPP0.txt
NR=$(awk 'END{print NR}' Log_IP_PPP0.txt)
(($NR>100)) && sed -i "1,$((NR-10))d" Log_IP_PPP0.txt
}

PEGAIP
#FIM#



A "LÓGICA", é:
"PEGA" o IP externo.
Se a VAR "$IPEXT" existe,
Compara o mesmo com a ultima linha de Log_IP_PPP0.txt
Se é diferente, manda o email e "guarda" o IP externo no log . . .
Se "$IPEXT" não existe, não tem conexão, insere a linha no log . . .

att.:
marcelo oliver




5. Re: Monitorar e executar comando?

Estefanio Brunhara
stefaniobrunhara

(usa CentOS)

Enviado em 21/08/2016 - 19:42h

Não seria mais fácil apenas recarregar o firewall, e no seu firewall onde você menciona o IP do ppp0 você fazer a regra pela interface e colocar ppp+ dai, não importará se é ppp0, ppp1 etc...

Isto claro se seu firewall não for um mar de complexidade!


6. Re: Monitorar e executar comando?

Elgio Santana
Guri.de.Gorpa

(usa Debian)

Enviado em 22/08/2016 - 15:29h

msoliver escreveu:

Guri.de.Gorpa escreveu:

Olá boa tarde,

Por falta de verba para manter um link de IP Fixo, tive que voltar para o dinâmico, e me deparei com um probleminha com meus redirecionamentos no iptables.

Toda vez muda o IP da interface "ppp0" eu tenho que manualmente "reload" no firewall, e queria que monitorasse e assim que mudar o ip "reload o firewall"

O ambiente está assim;
Firewall Iptables

.....
# Interface da Rede Externa - Internet
NET=ppp0

# Meu IP
MEUIP=$(ifconfig $NET | grep "inet end" | awk '{print $3}')
......


Possível script que eu estou em dúvida de usar

#!/bin/bash
NET=ppp0
IPEXT=$(ifconfig $NET | grep "inet end" | awk '{print $3}')
LOG=/tmp/ipchange.log
if ! ping $IPEXT >/dev/null; then
echo "ALERT!!! Internet IP Change!" > $LOG
ssmtp xxxxxxxxxxx@gmail.com < $LOG
sleep 2
service firewall restart
else
echo "Internet OK !!!" > $LOG
exit 1
fi
exit

está correto, ou alguma dica para me ajudar nesse problema, não sou muito com com shell script.
Obrigado.

------------------------------------------------------
Boa tarde, Guri.de.Gorpa .
Quanto ao seu script, "parece" que tem algumas falhas . . .
1º Não colocou um "limite" no ping, exemplo, ping -c4 . . . Isso implica que ficará "eternamente pingando" . . .
2º O "ping" é feito em "$IPEXT" (ppp0), logo, só vai falhar se não tiver conectado . . .
SUGESTÃO:

#INICIO#
#!/bin/bash
#SE O IP EXTERNO FOR ALTERADO, ENVIA EMAIL.

PEGAIP() {
[ -e Log_IP_PPP0.txt ] || echo "0.0.0.0::" > Log_IP_PPP0.txt # CRIA Log_IP_PPP0.txt NA 1ª EXECUÇÃO
IPEXT=$(ifconfig ppp0 | grep "inet end" | awk '{print $3}')
if [ $IPEXT ];then
if [ $IPEXT != $(sed -n '$p' Log_IP_PPP0.txt|cut -d":" -f1) ];then
echo -e " ALERT! Internet IP Changed! \n Data:$(date +%x)\n Hora:$(date +%X)\n IP:$IPEXT"|ssmtp "SEU_EMAIL"
echo "$IPEXT:$(date +%x):$(date +%X)" >> Log_IP_PPP0.txt
fi
else
echo -e "SEM_CONEXÃO:$(date +%x):$(date +%X)" >> Log_IP_PPP0.txt
fi
LIMPALOG
}

LIMPALOG() {
#CONTROLA O "TAMANHO" DO Log_IP_PPP0.txt
NR=$(awk 'END{print NR}' Log_IP_PPP0.txt)
(($NR>100)) && sed -i "1,$((NR-10))d" Log_IP_PPP0.txt
}

PEGAIP
#FIM#



A "LÓGICA", é:
"PEGA" o IP externo.
Se a VAR "$IPEXT" existe,
Compara o mesmo com a ultima linha de Log_IP_PPP0.txt
Se é diferente, manda o email e "guarda" o IP externo no log . . .
Se "$IPEXT" não existe, não tem conexão, insere a linha no log . . .

att.:
marcelo oliver



Entendi, muito bom, mas ainda tenho que após enviar o email de aviso, reiniciar meu firewall, como diz o outro colega, é um "Mar de Complexidade", são mais de 800 linhas...srrsrsr tudo amarrado.

Posso inserir o "service firewall restart após o envio de e-mail?"



7. Re: Monitorar e executar comando?

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 22/08/2016 - 18:02h

Guri.de.Gorpa escreveu:

Entendi, muito bom, mas ainda tenho que após enviar o email de aviso, reiniciar meu firewall, como diz o outro colega, é um "Mar de Complexidade", são mais de 800 linhas...rrsrsr tudo amarrado.
Posso inserir o "service firewall restart após o envio de e-mail?"


Boa tarde Guri ...
Não "vejo" problemas em inserir o "service firewall restart" após o envio do e-mail , ou antes, já que a prioridade
é o "restart do firewall" . . .

Marcelo Oliver








Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts