No directório /etc/rc.d/init.d, crie ou copie o seu script. Com o seu script pronto e copiado no directório indicado, segue abaixo exemplo com comentários sobre cada linha.
No exemplo abaixo altere as linhas e conteúdos para melhor adaptar as suas necessidades.
#!/bin/bash
#!/bin/bash
#
# chkconfig: 2345 25 40
#
#description: Firewall CMM
#
# processname: firewall
# pidfile: /var/run/firewall.pid
# config: /etc/rc.d/firewall
# biblioteca Source function.
# Função que habilita a opções de botão - OK
. /etc/rc.d/init.d/functions
# Se você utiliza o chkconfig para habilitar serviços a linhas abaixo permite que ele
# inicie na posição ou ordem de 97 e seja inicializado no level 3 e 5.
####Also, if the script name ends in .sh, the script will be sourced in runlevel S rather than being run in a forked subprocess, but will be explicitly run by sh in all other runlevels.
iniciar(){
#######################
### Flush as regras ###
#######################
iptables -F
iptables -Z
iptables -X
iptables -t nat -F
echo "*******************************************************"
echo "** Iniciar configuração da firewall do Seridor WEB **"
echo "*******************************************************"
# Desactiva o suporte a ICMP redirects uma vez que o servidor não actua como rooter
# este recurso quando ligado alerta os outros servidores que existe um caminho melhor para um determinado endereço ou rede, mas não reencaminha pacotes.
echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects
# Desativa o suporte a ping broadcasts, um recurso que tem poucos usos legítimos e pode ser usado
# para fazer com que servidores participem involuntariamente de ataques DoS,
# enviando grandes quantidades de pings a outros servidores dentro da mesma faixa de endereços.
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
# desativa o suporte ao source routing
# Este é um recurso usado para testes de routers
# permite ao emissor especificar qual o caminho que o pacote tomará até o destino e também o caminho de volta
echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route
# O servidor WEB não deverá compartilhar a conexão,
# nem encaminhar pacotes de outros hosts. Devemos desactivar o suporte a ip_forward:
echo 0 > /proc/sys/net/ipv4/ip_forward
# Uma conexão TCP é iniciada através da troca de três pacotes entre o emissor e o destinatário, o famoso "three-way handshake".
# O emissor envia um pacote SYN, o destinatário responde com um pacote SYN/ACK e o emissor confirma, também enviando um pacote ACK.
# Se o servidor recebe um pacote SYN solicitando a abertura da conexão, mas não recebe o pacote ACK de resposta, ele é obrigado a esperar até que o tempo limite seja atingindo, mantendo a conexão aberta.
# Como existe um limite de conexões TCP que o servidor pode manter ativas simultaneamente, um grande volume de pacotes SYN podem estourar o limite de conexões, fazendo com que o servidor deixe de responder a novas conexões, mesmo que exista banda disponível.
# ativa o uso de SYN Cookies, um recurso oferecido diretamente pelo Kernel
# Ao ativar o recurso, o sistema passa a responder ao pacote SYN inicial com um cookie, que identifica o cliente
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
# Regras que ativam o uso do rp_filter, de forma que o firewall sempre responda aos pacotes na mesma interface da qual eles foram originados.
# Previne ataques diversos que tentem tirar proveito da regra que permite conexões na interface de loopback
echo 1 > /proc/sys/net/ipv4/conf/default/rp_filter
# O bloqueio de pacotes inválidos, melhora a segurança contra ataques diversos,
# incluindo pacotes enviados sem serem precedidos pelo envio do pacote SYN e da abertura da conexão
iptables -A INPUT -m state --state INVALID -j DROP
# Abre para a interface de loopback:
#########################
### liberta o loopback ###
#########################
iptables -A INPUT -p tcp -i lo -j ACCEPT
#iptables -A OUTPUT -p tcp --syn -s 127.0.0.1/255.0.0.0 -j ACCEPT
# Bloqueia um determinado IP. Use para bloquear hosts específicos:
#iptables -A INPUT -p ALL -s 88.191.79.206 -j DROP
# Abre as portas referentes aos serviços usados:
echo "**"
# SSH:
#-j LOG gera um log em /var/log/messages
iptables -A INPUT -p tcp --dport 22 -j LOG
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
echo "**"
# DNS:
iptables -A INPUT -p tcp --dport 53 -j ACCEPT
iptables -A INPUT -p udp --dport 53 -j ACCEPT
echo "**"
# HTTP e HTTPS:
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
#Limita as respostas aos pings a 1 resposta por segundo
iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
echo "**"
# Bloqueia conexões nas demais portas:
iptables -A INPUT -p tcp --syn -j DROP
# Garante que o firewall permitirá pacotes de conexões já iniciadas:
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Bloqueia as portas UDP de 0 a 1023 (com exceção das abertas acima):
iptables -A INPUT -p udp --dport 0:1023 -j DROP
echo "*******************************************************"
echo "** **"
echo "** Firewall configurada **"
echo "*******************************************************"
}
parar(){
iptables -F
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
}
case "$1" in
"start") iniciar ;;
"stop") parar ;;
"restart") parar; iniciar ;;
*) echo "Use os parâmetros 'start' 'stop' ou 'restart' \n Ex:# firewall.sh start"
esac
#sleep 120
#./cleanfirewall.sh
exit 0
Para habilitar o script utilize da maneira que melhor se adapte, seguem exemplos.
Começamos por installar o nosso secript como um serviço:
# install -o root -g root -m 755 firewall /etc/rc.d/init.d
Adicionamos e inicializamos o serviço:
# chkconfig --add firewall
# service firewall start
# chkconfig firewall on
Podemos verificar que o serviço está activo com o comando:
# ntsysv
chkconfig -level 35 "meuscript" on
ou
# ntsysv -level 35
Executando e analisando:
# service firewall start
Iniciando o Serviço ###TESTE###: [ OK ]
Copiando Arquivo [ OK ]
# service firewall stop
Parando o Serviço ###TESTE###: [ OK ]
# service firewall restart
Parando o Serviço ###TESTE###: [ OK ]
Iniciando o Serviço ###TESTE###: [ OK ]
Copiando Arquivo [ OK ]
Você poderá inserir quantos comandos quiser, tanto no start quanto no stop.
Um Erro clássico: service XYZ does not support chkconfig
Você faz um script shell, e ao tentar colocar ele na lista dos serviços de start e stop do servidor, recebe a mensagem do título deste post, veja como resolver, de forma simples.
Construindo scripts compatíveis com o SYSV:
1 - O script precisa começar (primeira linha) com
#!/bin/bash
ou
#!/bin/sh
2 - O script precisa ter a seguinte linha
# chkconfig: 2345 85 15
Essa linha significa:
chkconfig --> aplicação que vai adicionar o script no SYSV 2345 --> níveis (diretórios) aonde o link para o script vai ser adicionado para start
85 --> sequência de "start"
15 --> sequência de "stop"
Vale lembrar que os níveis que não forem adicionados para start (S) serão automaticamente marcados para stop (K), no nosso caso será 016 (0,1 e 6).
3 - O script precisa ter uma descrição
# description: Aqui você coloca a descrição do seu script
4 - O script pode executar o script de funções do sistema
"/etc/rc.d/init.d/functions" para poder mostrar as mensagens de "OK", "FAILED" e "PASSED", existem outras funções que podem ser utilizadas, recomendo uma breve "fuçada" nesse script.
Lembre-se que isso é opcional, mas o seu uso é recomendado.
4- O script precisa ter sessões de "start" e "stop" (outras são opcionais).
OBS: Todas as linhas que tem sustenido (#) no início precisam realmente estar comentadas.
0 comentários :
Enviar um comentário