Dica para quem está colocando seus arquivos na pasta
/etc/init.d/ e não está conseguindo
carregar seus scripts na inicialização dos derivados do
Debian Wheezy.
O segredo está na primeira linha, que tem que começar por
#! /bin/sh, exemplo:
#! /bin/sh
start(){
echo "Firewall iniciando..........[OK]";
echo -e "\nPermitindo roteamento de Pacotes: \n";
echo "1" > /proc/sys/net/ipv4/ip_forward
echo -e "\nRoteamento de Pacotes............ [OK] \n";
echo -e "Limpa as regras\n";
iptables -F
iptables -X
iptables -Z
iptables -F INPUT
iptables -F FORWARD
iptables -F OUTPUT
iptables -t nat -F
iptables -t nat -X
iptables -t nat -Z
iptables -t mangle -F
iptables -t mangle -X
iptables -t mangle -Z
echo -e "Política padrão ACCEPT\n";
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
#coloca suas regras de liberação dos serviços necessários da rede
echo -e "\nLiberando destino Conexoes necessarias \n";
iptables -A FORWARD -i $WAN -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i $LAN -o $WAN -j ACCEPT
#iptables -A FORWARD -i $WAN -o $LAN -j ACCEPT
iptables -A FORWARD -j LOG
iptables -t nat -A POSTROUTING -o $WAN -j MASQUERADE
echo -e "\nCompartilhamento da rede ativo………………….[OK]\n";
echo -e "\nConexoes necessarias OK ............ [OK] \n";
echo -e "\nRedirecionando dados para porta do Proxy\n";
iptables -t nat -A PREROUTING -s 192.168.7.0/24 -p tcp --dport 80 -j REDIRECT --to-port 3128
iptables -t nat -A PREROUTING -s 192.168.7.0/24 -p udp --dport 80 -j REDIRECT --to-port 3128
echo -e "\nRedirecionando dados............ [OK] \n";
echo -e "\nBloqueando conexoes de intrusos............ \n";
iptables -A FORWARD -m mac --mac-source 5c:c9:d3:21:b0:2d -j DROP
echo -e "\nBloqueando conexoes de intrusos............ [OK] \n";
echo -e "\nFrewall inicializado.\n";
}
stop(){
echo -e "\nParando firewall\n";
echo -e "limpando as regras\n";
iptables -F
iptables -X
iptables -Z
iptables -F INPUT
iptables -F FORWARD
iptables -F OUTPUT
iptables -t nat -F
iptables -t nat -X
iptables -t nat -Z
iptables -t mangle -F
iptables -t mangle -X
iptables -t mangle -Z
echo -e "setando em DROP/n";
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
echo "Firewall desativado!.............[OK]";
}
case "$1" in
"start") start ;;
"stop") stop ;;
"reload") stop; start ;;
*)
echo "Use parâmetros start|stop|reload";
;;
esac
Outras distros usam também:
#!/bin/bash
...seu script
Já tava ficando maluco aqui. Resolvi pesquisar na documentação do Debian sobre inicialização de scripts na
/init.d/, então, encontrei isto:
Debian Policy dictates that /etc/init.d/*.sh scripts must work properly
when sourced. The following additional rules apply:
* /etc/init.d/*.sh scripts must not rely for their correct functioning
on their being sourced rather than executed. That is, they must work
properly when executed too. They must include "#!/bin/sh" at the top.
This is useful when running scripts in parallel.
* /etc/init.d/*.sh scripts must conform to the rules for sh scripts as
spelled out in the Debian policy section entitled "Scripts" (§10.4).
Use the update-rc.d command to create symbolic links in the /etc/rc?.d
as appropriate. See that man page for more details.
Talvez muita gente já saiba disto mas eu não sabia, pesquisei e não achei muito sobre o assunto.
Mesmo eu usando o
rcconf e o
chkconfig, meus scripts não
iniciavam junto!
Mais uma coisa: para quem não gosta de colocar seus scripts na pasta do sistema (
/etc/init.d/seu_script.sh) para inicializar automático, no Debian Wheezy, você pode colocar o caminho
do seu script (exemplo:
/home/usuario/seu_script.sh) no arquivo
rcS e não no
rc.local, como estávamos acostumados nas versões
anteriores.
Na verdade, a primeira linha diz ao shell qual o interpretador que será usado para executar o script. Esse linha nunca deve ter espaços.
#!/bin/bash
ou
#!/bin/sh
ou
#!/bin/perl
Também é necessário dar permissão de execução.
# chmod +x script
Após a primeira linha (também chamada de Shebang) é recomendável colocar as seguintes linhas:
### BEGIN INIT INFO
# Provides: programa
# Required-Start: scripts_que_precisam_ser_executados_antes_deste
# Required-Stop: scripts_que_precisam_ser_parados_antes_deste
# Default-Start: 2 3 4 5 (runlevels em que o script deverá ser usado)
# Default-Stop: 0 1 6 (runlevels em que o script deverá estar parado)
# Short-Description: Uma breve descrição do programa.
### END INIT INFO
Agora, habilite o programa como o comando abaixo:
# chkconfig script on