Configurando script de inicialização no openSUSE
Dica publicada em Linux / Configuração
Configurando script de inicialização no openSUSE
Para quem vem de distribuições baseadas em Debian para uma baseada em Red Hat como o openSUSE, vão sentir falta do arquivo /etc/rc.local, para configurar algum script na inicialização do sistema. Seja um script de firewall, ou outro de manutenção do sistema.
No exemplo abaixo, há um script de firewall que deve ser carregado na inicialização do openSUSE.
Atente bem à estrutura do script, em especial ao cabeçalho, que deve conter as informações usadas nos runlevels, bem como na estrutura case.
Feito o script, atribua permissão de execução:
# chmod +x rc.firewall
Utilizando o comando chkconfig, configure o script para início com o boot do sistema:
# chkconfig --add rc.firewall
# chkconfig rc.firewall on
Pronto! Para iniciar, parar ou dar restart no script basta utilizar:
# systemctl start rc.firewall.service
# systemctl restart rc.firewall.service
# systemctl stop rc.firewall.service
Reinicie a sua máquina e com o comando iptables -nL, veja se as configurações foram carregadas.
No exemplo abaixo, há um script de firewall que deve ser carregado na inicialização do openSUSE.
#!/bin/bash
#
# firewall Start iptables firewall
#
# chkconfig: 2345 08 92
# description: Starts, stops and saves iptables firewall
#
# Source function library.
. /etc/init.d/functions
iniciar(){
#------------- [ Configurações Gerais ] -------------
# Definição das configurações de rede
WAN=enp0s3
LAN=enp0s8
REDE="192.168.10.0"
MASK="255.255.255.0"
# Carregamento de módulos
modprobe ip_tables
modprobe ip_conntrack
modprobe iptable_filter
modprobe iptable_mangle
modprobe iptable_nat
modprobe ipt_LOG
modprobe ipt_limit
modprobe ipt_state
modprobe ipt_REDIRECT
modprobe ipt_owner
modprobe ipt_REJECT
modprobe ipt_MASQUERADE
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
echo "--> Carregamento de módulos [ OK ]"
# Limpa as regras
iptables -X
iptables -Z
iptables -F INPUT
iptables -F OUTPUT
iptables -F FORWARD
iptables -F -t nat
iptables -F -t mangle
echo "--> Limpando as chains [ OK ]"
# Politicas padrão
iptables -t filter -P INPUT DROP
iptables -t filter -P OUTPUT DROP
iptables -t filter -P FORWARD DROP
echo "--> Definicao das policies [ OK ]"
# Compartilhar a internet
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o $WAN -j MASQUERADE
echo "--> Compartilhamento da internet [ OK ]"
#---------------------- [ FIM ] ----------------------
#------------------- [ Liberações ] ------------------
# Liberando a conexão loopbak
iptables -t filter -A INPUT -i lo -j ACCEPT
iptables -t filter -A OUTPUT -o lo -j ACCEPT
echo "--> Liberando a interface de loopback [ OK ]"
# Permitindo acesso SSH
iptables -t filter -A INPUT -p tcp --dport 22 -j LOG --log-level 6 --log-prefix "SSH: "
iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --sport 22 -j ACCEPT
echo "--> Permitindo acesso SSH [ OK ]"
# Liberar acesso do servidor a internet
iptables -t filter -A INPUT -m multiport -p tcp --sport 80,443,53,20,21 -j ACCEPT
iptables -t filter -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -t filter -A INPUT -p udp --sport 53 -j ACCEPT
iptables -t filter -A OUTPUT -p udp --dport 53 -j ACCEPT
echo "--> Liberando a internet para o servidor [ OK ]"
# Liberar o servidor DHCP
iptables -t filter -A INPUT -m multiport -p tcp --dport 67,68 -j ACCEPT
iptables -t filter -A INPUT -m multiport -p udp --dport 67,68 -j ACCEPT
# Liberação de portas TCP para a rede local
PORTAS_LIBERADAS="20 21 25 53 80 81 110 443 465 587 995 993"
for i in $PORTAS_LIBERADAS
do
iptables -t filter -A FORWARD -s $REDE/$MASK -p tcp --dport $i -j ACCEPT
iptables -t filter -A FORWARD -d $REDE/$MASK -p tcp --sport $i -j ACCEPT
done
# Liberação de portas UDP para a rede local
PORTAS_LIBERADAS="20 21 53 587 993 465"
for i in $PORTAS_LIBERADAS
do
iptables -t filter -A FORWARD -s $REDE/$MASK -p udp --dport $i -j ACCEPT
iptables -t filter -A FORWARD -d $REDE/$MASK -p udp --sport $i -j ACCEPT
done
echo "--> Liberando portas TCP/UDP para a LAN [ OK ]"
# Liberando ICMP para o servidor e a rede local
iptables -t filter -I INPUT -p icmp --icmp-type echo-reply -j ACCEPT
iptables -t filter -I FORWARD -p icmp --icmp-type echo-reply -j ACCEPT
echo "--> Liberando o ICMP [ OK ]"
#---------------------- [ FIM ] ----------------------
#-------------- [ Regras de Proteção ] --------------
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
echo 1 > /proc/sys/net/ipv4/conf/default/rp_filter
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
iptables -t filter -A INPUT -m state --state INVALID -j DROP
iptables -t filter -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
iptables -t filter -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
iptables -t filter -A FORWARD -m state -p icmp --state INVALID -j DROP
# Impedindo ataque Port Scanners na rede e no Firewall
iptables -t filter -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
iptables -t filter -I INPUT -p udp --dport 33435:33525 -j LOG --log-level info --log-prefix 'SCANNERS DROPADO>'
iptables -t filter -A INPUT -p udp --dport 33435:33525 -j DROP
iptables -t filter -I FORWARD -p udp --dport 33435:33525 -j LOG --log-level info --log-prefix 'SCANNERS DROPADO NA REDE>'
iptables -t filter -A FORWARD -p udp --dport 33435:33525 -j DROP
# Bloquear NetBus na rede
iptables -t filter -I INPUT -p tcp --dport 12345 -j LOG --log-level info --log-prefix 'NETBUS >'
iptables -t filter -A INPUT -p tcp --dport 12345 -j DROP
iptables -t filter -I INPUT -p udp --dport 12345 -j LOG --log-level info --log-prefix 'NETBUS UDP>'
iptables -t filter -A INPUT -p udp --dport 12345 -j DROP
iptables -t filter -I FORWARD -p tcp --dport 12345 -j LOG --log-level info --log-prefix 'NETBUS NA REDE>'
iptables -t filter -A FORWARD -p tcp --dport 12345 -j DROP
iptables -t filter -I FORWARD -p udp --dport 12345 -j LOG --log-level info --log-prefix 'NETBUS UDP>'
iptables -t filter -A FORWARD -p udp --dport 12345 -j DROP
echo "--> Aplicando regras de segurança [ OK ]"
#---------------------- [ FIM ] ----------------------
}
parar(){
iptables -F
iptables -t nat -F
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
echo 0 > /proc/sys/net/ipv4/ip_forward
echo "Regras de firewall e compartilhamento desativados"
}
case "$1" in
"start") iniciar ;;
"stop") parar ;;
"restart") parar; iniciar ;;
*) echo "Use os parâtros start ou stop"
esac
Atente bem à estrutura do script, em especial ao cabeçalho, que deve conter as informações usadas nos runlevels, bem como na estrutura case.
Feito o script, atribua permissão de execução:
# chmod +x rc.firewall
Utilizando o comando chkconfig, configure o script para início com o boot do sistema:
# chkconfig --add rc.firewall
# chkconfig rc.firewall on
Pronto! Para iniciar, parar ou dar restart no script basta utilizar:
# systemctl start rc.firewall.service
# systemctl restart rc.firewall.service
# systemctl stop rc.firewall.service
Reinicie a sua máquina e com o comando iptables -nL, veja se as configurações foram carregadas.
Prezados, o arquivo rc.firewall da dica ou qualquer outro que vocês desejarem incluir na inicialização do sistema, deve estar dentro do diretório /etc/init.d/
_________________________
Wagner F. de Souza
Técnico/Instrutor de Informática
"GNU/Linux for human beings."
LPI ID: LPI000297782