Procedimento hardening de Ubuntu: mudanças entre as edições
Ir para navegação
Ir para pesquisar
Sem resumo de edição |
Sem resumo de edição |
||
| Linha 127: | Linha 127: | ||
'''Passo 4:''' Executar o script <pre>./hardening_ubuntu24.sh </pre> | '''Passo 4:''' Executar o script <pre>./hardening_ubuntu24.sh </pre> | ||
*TODO: | |||
== Firewall == | |||
*EM DESENVOLVIMENTO. | |||
*TODO: Adicionar no script /hardening_ubuntu24.sh firewall. | |||
* firewallv4 | |||
<pre> | |||
#!/bin/sh | |||
### BEGIN INIT INFO | |||
# Provides: firewall | |||
# Required-Start: $local_fs $network $syslog | |||
# Required-Stop: $local_fs $network $syslog | |||
# Default-Start: 2 3 4 5 | |||
# Default-Stop: 0 1 6 | |||
# Short-Description: starts iptables rules | |||
# Description: starts iptables rules - start-stop-daemon | |||
### END INIT INFO | |||
iptables=/sbin/iptables | |||
case "$1" in | |||
start) | |||
echo "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::" | |||
echo "| Script de Firewall IPv4 - IPTABLES" | |||
echo "| Criado por: CSIRT UNESP" | |||
echo "| security@unesp.br" | |||
echo "| Uso: /etc/init.d/firewall start|stop|restart" | |||
echo "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::" | |||
echo "" | |||
echo "Iniciando Firewall [ OK ]" | |||
iflo="lo" | |||
ifext="< INTERFACE ex:eth0>" | |||
ip="<IP ex:192.168.0.1>" | |||
#monitor="< ZABBIX>" | |||
ntp="200.145.255.25" | |||
echo "Definindo variaveis [ OK ]" | |||
/sbin/modprobe ip_tables | |||
/sbin/modprobe ip_conntrack | |||
/sbin/modprobe iptable_filter | |||
/sbin/modprobe ipt_LOG | |||
/sbin/modprobe ipt_limit | |||
/sbin/modprobe ipt_state | |||
/sbin/modprobe ipt_REJECT | |||
/sbin/modprobe ip_conntrack_tftp | |||
echo "Carregamento de Modulos [ OK ]" | |||
$iptables -Z | |||
$iptables -F | |||
$iptables -X | |||
$iptables -F -t nat | |||
$iptables -X -t nat | |||
$iptables -F -t mangle | |||
$iptables -X -t mangle | |||
echo "Zerando regras e tabelas [ OK ]" | |||
$iptables -I INPUT -d $ip -s 200.145.6.254 -j ACCEPT | |||
$iptables -I OUTPUT -s $ip -d 200.145.6.254 -j ACCEPT | |||
$iptables -P INPUT DROP | |||
$iptables -P FORWARD DROP | |||
$iptables -P OUTPUT DROP | |||
$iptables -N valid-src | |||
$iptables -N valid-dst | |||
$iptables -N ssh-rules | |||
$iptables -I INPUT -i $ifext -j valid-src | |||
$iptables -I OUTPUT -o $ifext -j valid-dst | |||
echo "Criando Politicas Padrao [ OK ]" | |||
#Regras de Seguranca | |||
# Source and Destination Address Sanity Checks | |||
# Drop packets from networks covered in RFC 1918 (private nets) | |||
iptables -A valid-src -s 10.0.0.0/8 -j DROP | |||
iptables -A valid-src -s 172.16.0.0/12 -j DROP | |||
iptables -A valid-src -s 192.168.0.0/16 -j DROP | |||
iptables -A valid-src -s 224.0.0.0/4 -j DROP | |||
iptables -A valid-src -s 240.0.0.0/5 -j DROP | |||
iptables -A valid-src -s 127.0.0.0/8 -j DROP | |||
iptables -A valid-src -s 0.0.0.0/8 -j DROP | |||
iptables -A valid-src -d 255.255.255.255 -j DROP | |||
iptables -A valid-src -s 169.254.0.0/16 -j DROP | |||
iptables -A valid-src -s $ip -j DROP | |||
iptables -A valid-dst -d 224.0.0.0/4 -j DROP | |||
echo "BLOQUEIO DE IPs INVALIDOS [ OK ]" | |||
# Protecoes na pilha TCP/IP do Kernel | |||
echo "BLOQUEIO DE ICMP BROADCAST [ OK ]" | |||
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts | |||
echo "PROTECAO CONTRA IP SPOOFING [ OK ]" | |||
echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter | |||
echo "BLOQUEIO DE REDIRECIONAMENTO ICMP [ OK ]" | |||
for f in /proc/sys/net/ipv4/conf/*/accept_redirects; do | |||
echo 0 >$f | |||
done | |||
echo "PROTECAO CONTRA SYNFLOOD [ OK ]" | |||
echo "1" > /proc/sys/net/ipv4/tcp_syncookies | |||
echo "PROTECAO CONTRA RESPONSE BOGUS [ OK ]" | |||
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses | |||
echo "HABILITANDO SECURE REDIRECTS [ OK ]" | |||
echo "1" > /proc/sys/net/ipv4/conf/all/secure_redirects | |||
echo "PROTECAO CONTRA REDIRECIONAMENTOS DE ROTA [ OK ]" | |||
echo "0" > /proc/sys/net/ipv4/conf/all/accept_redirects | |||
echo 1 > /proc/sys/net/ipv4/tcp_syncookies | |||
echo "SYN - FLOOD [ OK ]" | |||
$iptables -A INPUT -p icmp -d $ip --icmp-type echo-request -m limit --limit 1/s -j ACCEPT | |||
$iptables -A INPUT -p icmp -d $ip --icmp-type echo-reply -m limit --limit 1/s -j ACCEPT | |||
$iptables -A OUTPUT -p icmp -s $ip --icmp-type echo-request -m limit --limit 1/s -j ACCEPT | |||
$iptables -A OUTPUT -p icmp -s $ip --icmp-type echo-reply -m limit --limit 1/s -j ACCEPT | |||
echo "Aplicando limites ICMP [ OK ]" | |||
echo "Regras de Segurança Aplicadas [ OK ]" | |||
#Regras de INPUT | |||
$iptables -A INPUT -p ALL -m state --state ESTABLISHED,RELATED -j ACCEPT | |||
$iptables -A INPUT -p tcp -d $ip --dport 22 -j ssh-rules | |||
#Regras de OUTPUT | |||
$iptables -A OUTPUT -p ALL -m state --state ESTABLISHED,RELATED -j ACCEPT | |||
$iptables -A OUTPUT -s $ip -d $ntp -p udp --dport 123 -j ACCEPT | |||
$iptables -A OUTPUT -p tcp -s $ip --dport 53 -j ACCEPT | |||
$iptables -A OUTPUT -p udp -s $ip --dport 53 -j ACCEPT | |||
$iptables -A OUTPUT -p tcp -s $ip -m multiport --dport 80,443 -j ACCEPT | |||
echo "Regras básicas de INPUT/FORWARD [ OK ]" | |||
$iptables -A INPUT -p ALL -i $iflo -j ACCEPT | |||
$iptables -A OUTPUT -p ALL -o $iflo -j ACCEPT | |||
echo "Habilitando Conexões Locais [ OK ]" | |||
# SSH - Liberações | |||
$iptables -A ssh-rules -p tcp -d $ip -s <IP Acesso SSH ex: 200.145.dti.dti> --dport 22 -j ACCEPT | |||
$iptables -A ssh-rules -p tcp -d $ip --dport 22 -j DROP | |||
echo "Acesso SSH Restrito [ OK ]" | |||
#$iptables -A INPUT -p tcp -i $ifext -d $ip -s $monitor --dport 10050 -j ACCEPT | |||
#echo "Acesso Zabbix [ OK ]" | |||
# Descomentar abaixo para serviço WEB | |||
#$iptables -A INPUT -p tcp -s <IP para acessar sua pág> -d $ip -m multiport --dport 443,3000 -j ACCEPT | |||
#echo "HTTPS [ OK ]" | |||
# Descomentar abaixo para serviço MYSQL | |||
#$iptables -A INPUT -p tcp -d $ip --dport 3306 -j ACCEPT | |||
#echo "MYSQL [ OK ]" | |||
# Descomentar abaixo para serviço POSTGRE | |||
#$iptables -A INPUT -p tcp -d $ip --dport 5432 -j ACCEPT | |||
#echo "POSTGRE [ OK ]" | |||
# Descomentar abaixo para serviço de backup - Bacula | |||
#$iptables -A INPUT -p udp -i $ifext -s <IP do bacula> -d $ip -m multiport --dport 9101:9103 -j ACCEPT | |||
#$iptables -A INPUT -p tcp -i $ifext -s <IP do bacula> -d $ip -m multiport --dport 9101:9103 -j ACCEPT | |||
#echo "Servidor Bacula [ OK ]" | |||
#service fail2ban restart | |||
#echo "Restarting fail2ban service [ OK ]" | |||
echo "----------------------------------------------" | |||
echo "" | |||
echo "" | |||
echo "Firewall Ativado" | |||
echo "" | |||
echo "" | |||
;; | |||
stop) | |||
echo "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::" | |||
echo "| Script de Firewall IPv4 - IPTABLES" | |||
echo "| Criado por: CSIRT UNESP" | |||
echo "| security@unesp.br" | |||
echo "| Uso: /etc/init.d/firewall start|stop|restart" | |||
echo "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::" | |||
echo "" | |||
echo "Parando Firewall [ OK ]" | |||
$iptables -P INPUT ACCEPT | |||
$iptables -P FORWARD ACCEPT | |||
$iptables -P OUTPUT ACCEPT | |||
echo "Criando Politicas Padrao(ACCEPT) [ OK ]" | |||
$iptables -Z | |||
$iptables -F | |||
$iptables -X | |||
$iptables -F -t nat | |||
$iptables -X -t nat | |||
$iptables -F -t mangle | |||
$iptables -X -t mangle | |||
echo "Zerando regras e tabelas [ OK ]" | |||
echo "" | |||
;; | |||
restart) | |||
$0 stop | |||
sleep 2 | |||
$0 start | |||
#service fail2ban restart | |||
;; | |||
status) | |||
# The 'status' option should return one of the LSB-defined return-codes, | |||
# in particular, return-code 3 should mean that the service is not | |||
# currently running. This is particularly important for Ansible's 'service' | |||
# module, as without this behaviour it won't know if a service is up or down. | |||
RETVAL=0 | |||
;; | |||
*) | |||
echo " Usage: {start|stop|restart}" | |||
;; | |||
esac | |||
</pre> | |||
* firewallv6 | |||
<pre> | |||
#!/bin/sh | |||
### BEGIN INIT INFO | |||
# Provides: firewallv6 | |||
# Required-Start: $local_fs $network $syslog | |||
# Required-Stop: $local_fs $network $syslog | |||
# Default-Start: 2 3 4 5 | |||
# Default-Stop: 0 1 6 | |||
# Short-Description: starts ip6tables rules | |||
# Description: starts ip6tables rules - start-stop-daemon | |||
### END INIT INFO | |||
iptables=/sbin/ip6tables | |||
case "$1" in | |||
start) | |||
echo "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::" | |||
echo "| Script de Firewall IPv6 - IPTABLES" | |||
echo "| Criado por: CSIRT UNESP" | |||
echo "| security@unesp.br" | |||
echo "| Uso: /etc/init.d/firewall start|stop|restart" | |||
echo "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::" | |||
echo "" | |||
echo "Iniciando Firewall [ OK ]" | |||
iflo="lo" | |||
ifext="< INTERFACE ex:eth0>" | |||
ip="<IP ex2801:88:1000:bf::25> " | |||
#netapp="" | |||
#monitor="< ZABBIX>" | |||
ntp="2801:88:ffff:b0b0::255" | |||
echo "Definindo variaveis [ OK ]" | |||
/sbin/modprobe ip_tables | |||
/sbin/modprobe ip_conntrack | |||
/sbin/modprobe iptable_filter | |||
/sbin/modprobe ipt_LOG | |||
/sbin/modprobe ipt_limit | |||
/sbin/modprobe ipt_state | |||
/sbin/modprobe ipt_REJECT | |||
/sbin/modprobe ip_conntrack_tftp | |||
echo "Carregamento de Modulos [ OK ]" | |||
$iptables -Z | |||
$iptables -F | |||
$iptables -X | |||
$iptables -F -t nat | |||
$iptables -X -t nat | |||
$iptables -F -t mangle | |||
$iptables -X -t mangle | |||
echo "Zerando regras e tabelas [ OK ]" | |||
$iptables -P INPUT DROP | |||
$iptables -P FORWARD DROP | |||
$iptables -P OUTPUT DROP | |||
$iptables -N valid-src | |||
$iptables -N valid-dst | |||
$iptables -N ssh-rules | |||
$iptables -I INPUT -i $ifext -j valid-src | |||
$iptables -I OUTPUT -o $ifext -j valid-dst | |||
echo "Criando Politicas Padrao [ OK ]" | |||
#Regras de Seguranca | |||
echo 1 > /proc/sys/net/ipv4/tcp_syncookies | |||
echo "SYN - FLOOD [ OK ]" | |||
echo "----------------------------------------------" | |||
echo "Seguranca [ OK ]" | |||
#Regras de INPUT | |||
$iptables -A INPUT -p ALL -m state --state ESTABLISHED,RELATED -j ACCEPT | |||
$iptables -A INPUT -p ipv6-icmp -j ACCEPT | |||
$iptables -A INPUT -p tcp -d $ip --dport 22 -j ssh-rules | |||
#Regras de OUTPUT | |||
$iptables -A OUTPUT -p ALL -m state --state ESTABLISHED,RELATED -j ACCEPT | |||
$iptables -A OUTPUT -p ipv6-icmp -j ACCEPT | |||
$iptables -A OUTPUT -s $ip -d $ntp -p udp --dport 123 -j ACCEPT | |||
$iptables -A OUTPUT -p tcp -m state --state NEW -s $ip --dport 53 -j ACCEPT | |||
$iptables -A OUTPUT -s $ip -p udp --dport 53 -j ACCEPT | |||
$iptables -A OUTPUT -p tcp -m state --state NEW -s $ip --dport 80 -j ACCEPT | |||
$iptables -A OUTPUT -p tcp -m state --state NEW -s $ip --dport 443 -j ACCEPT | |||
echo "Regras de INPUT/FORWARD [ OK ]" | |||
$iptables -A INPUT -p ALL -i $iflo -j ACCEPT | |||
$iptables -A OUTPUT -p ALL -o $iflo -j ACCEPT | |||
echo "Habilitando Conexões Locais [ OK ]" | |||
$iptables -A ssh-rules -p tcp -m state --state NEW -d $ip -s <IP> --dport 22 -j ACCEPT | |||
echo "Acesso SSH Restrito [ OK ]" | |||
#$iptables -A INPUT -p tcp -i $ifext -d $ip -s $monitor --dport 10050 -j ACCEPT | |||
#$iptables -A OUTPUT -p tcp -o $ifext -s $ip -d $monitor --dport 10051 -j ACCEPT | |||
#echo "Acesso Zabbix [ OK ]" | |||
# Descomente abaixo para servidor WEB | |||
#$iptables -A INPUT -p tcp -i $ifext -d $ip -m multiport --dport 80,443 -j ACCEPT | |||
#echo "HTTP" | |||
#$iptables -A INPUT -p udp -i $ifext -s XXXXXXXXXXXXX -d $ip -m multiport --dport 9101:9103 -j ACCEPT | |||
#$iptables -A INPUT -p tcp -i $ifext -s XXXXXXXXXXXXX -d $ip -m multiport --dport 9101:9103 -j ACCEPT | |||
#echo "Servidor Bacula [ OK ]" | |||
echo "----------------------------------------------" | |||
echo "" | |||
echo "" | |||
echo "Firewall Ativado" | |||
echo "" | |||
echo "" | |||
;; | |||
stop) | |||
echo "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::" | |||
echo "| Script de Firewall IPv6 - IPTABLES" | |||
echo "| Criado por: CSIRT UNESP" | |||
echo "| security@unesp.br" | |||
echo "| Uso: /etc/init.d/firewall start|stop|restart" | |||
echo "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::" | |||
echo "" | |||
echo "Parando Firewall [ OK ]" | |||
iptables=/sbin/ip6tables | |||
$iptables -P INPUT ACCEPT | |||
$iptables -P FORWARD ACCEPT | |||
$iptables -P OUTPUT ACCEPT | |||
echo "Criando Politicas Padrao(ACCEPT) [ OK ]" | |||
$iptables -Z | |||
$iptables -F | |||
$iptables -X | |||
$iptables -F -t nat | |||
$iptables -X -t nat | |||
$iptables -F -t mangle | |||
$iptables -X -t mangle | |||
echo "Zerando regras e tabelas [ OK ]" | |||
echo "" | |||
;; | |||
restart) | |||
$0 stop | |||
sleep 2 | |||
$0 start | |||
service fail2ban restart | |||
;; | |||
*) | |||
echo " Usage: {start|stop|restart}" | |||
;; | |||
esac | |||
</pre> | |||
== Referências == | == Referências == | ||
[https://downloads.cisecurity.org/#/ Cis controls] | [https://downloads.cisecurity.org/#/ Cis controls] | ||
Edição das 19h05min de 20 de maio de 2025
hardening
Versão: 1.0
Data: 30/04/2025
Autor: reginaldo.lopes@unesp.br
Política: Art. 42-VIII-D, Art. 32 Política de Segurança Cibernética
O que é
Hardening é o processo de reforçar a segurança de sistemas, servidores, aplicações e redes, reduzindo a superfície de ataque por meio da eliminação de vulnerabilidades, configurações padrão inseguras e serviços desnecessários.
Por que usar?
- Reduzir o risco de invasões e vazamentos.
- Cumprir normas e requisitos de compliance (CIS Controls, ISO 27001, etc).
- Minimizar o impacto de falhas zero-day.
- Aumentar a resiliência do ambiente contra ataques automatizados e direcionados
Uso
Passo 1: Criar um arquivo
touch hardening_ubuntu24.sh
Passo 2: Permissão de execução
chmod +x hardening_ubuntu24.sh
Passo 3: Copiar o código a baixo e colar no arquivo criado.
#!/bin/sh ### BEGIN INFO # Reginaldo.lopes 30/04/2025 # Versão 1.0 ### END INFO case "$1" in up) echo "Iniciando ... [ OK ]" # Verifica se é Ubuntu 24.04 LSB_SR=$(lsb_release -sr) ; LSB_SI=$(lsb_release -si) if [ "$LSB_SR" = "24.04" ] && [ "$LSB_SI" = "Ubuntu" ] ; then VER="U24" else echo "" echo "Versao de sistema operacional invalido para este script" echo "" echo "Script homologado para Ubuntu 24.04 LTS" echo "" echo "Versao detectada:" echo "=================" echo "" lsb_release -a echo "" echo "Saindo do programa" exit 1 fi # Atualizar pacotes do sistema echo "Atualizando pacotes do sistema..." sudo apt update && sudo apt upgrade -y # SSH echo "Aplicando hardening no SSH..." # Desativar encaminhamento X11, Rodar aplicações gráficas, ex: gedit sudo sed -i 's/#X11Forwarding yes/X11Forwarding no/' /etc/ssh/sshd_config # Desativar senhas vazias sudo sed -i 's/#PermitEmptyPasswords yes/PermitEmptyPasswords no/' /etc/ssh/sshd_config # Desativar encaminhamento TCP echo "AllowTcpForwarding no" | sudo tee -a /etc/ssh/sshd_config # Limitar tentativas de login SSH para mitigar ataques de força bruta echo "MaxAuthTries 3" | sudo tee -a /etc/ssh/sshd_config # Desativa completamente o login via SSH com o usuário root, mesmo com chave SSH. # sudo sed -i 's/^#\?PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config echo "Criando banner" # Banner no ssh # Adiciona o comando para chamar o banner echo "Banner /etc/issue.net" | sudo tee -a /etc/ssh/sshd_config # Adiciona o banner no arquivo issue.net cat << EOF > /etc/issue.net ***************************************************** * UNESP - UNIVERSIDADE ESTADUAL PAULISTA * * * * ACESSO RESTRITO SOMENTE A PESSOAS AUTORIZADAS ! * * * * Qualquer acesso nao autorizado podera resultar * * em severas penalidades civis e criminais. * * * * Equipe CSIRT Unesp * * security@unesp.br * * * ***************************************************** EOF ######## sudo systemctl restart ssh ;; *) echo " " echo "Description: \e[1;32m \e[0m" echo "Script para adicionar camadas de segurança no ubuntu 24.04" echo " " echo "Options: " echo " " echo "\e[0;32m Hardening: \e[0m" echo " - up Iniciar o Hardening" echo " " echo "Example: " echo "./hardening_ubuntu24.sh up" echo "./hardening_ubuntu24.sh siem" echo "./hardening_ubuntu24.sh firewall" echo " " ;; esac
Passo 4: Executar o script
./hardening_ubuntu24.sh
- TODO:
Firewall
- EM DESENVOLVIMENTO.
- TODO: Adicionar no script /hardening_ubuntu24.sh firewall.
- firewallv4
#!/bin/sh
### BEGIN INIT INFO
# Provides: firewall
# Required-Start: $local_fs $network $syslog
# Required-Stop: $local_fs $network $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: starts iptables rules
# Description: starts iptables rules - start-stop-daemon
### END INIT INFO
iptables=/sbin/iptables
case "$1" in
start)
echo "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::"
echo "| Script de Firewall IPv4 - IPTABLES"
echo "| Criado por: CSIRT UNESP"
echo "| security@unesp.br"
echo "| Uso: /etc/init.d/firewall start|stop|restart"
echo "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::"
echo ""
echo "Iniciando Firewall [ OK ]"
iflo="lo"
ifext="< INTERFACE ex:eth0>"
ip="<IP ex:192.168.0.1>"
#monitor="< ZABBIX>"
ntp="200.145.255.25"
echo "Definindo variaveis [ OK ]"
/sbin/modprobe ip_tables
/sbin/modprobe ip_conntrack
/sbin/modprobe iptable_filter
/sbin/modprobe ipt_LOG
/sbin/modprobe ipt_limit
/sbin/modprobe ipt_state
/sbin/modprobe ipt_REJECT
/sbin/modprobe ip_conntrack_tftp
echo "Carregamento de Modulos [ OK ]"
$iptables -Z
$iptables -F
$iptables -X
$iptables -F -t nat
$iptables -X -t nat
$iptables -F -t mangle
$iptables -X -t mangle
echo "Zerando regras e tabelas [ OK ]"
$iptables -I INPUT -d $ip -s 200.145.6.254 -j ACCEPT
$iptables -I OUTPUT -s $ip -d 200.145.6.254 -j ACCEPT
$iptables -P INPUT DROP
$iptables -P FORWARD DROP
$iptables -P OUTPUT DROP
$iptables -N valid-src
$iptables -N valid-dst
$iptables -N ssh-rules
$iptables -I INPUT -i $ifext -j valid-src
$iptables -I OUTPUT -o $ifext -j valid-dst
echo "Criando Politicas Padrao [ OK ]"
#Regras de Seguranca
# Source and Destination Address Sanity Checks
# Drop packets from networks covered in RFC 1918 (private nets)
iptables -A valid-src -s 10.0.0.0/8 -j DROP
iptables -A valid-src -s 172.16.0.0/12 -j DROP
iptables -A valid-src -s 192.168.0.0/16 -j DROP
iptables -A valid-src -s 224.0.0.0/4 -j DROP
iptables -A valid-src -s 240.0.0.0/5 -j DROP
iptables -A valid-src -s 127.0.0.0/8 -j DROP
iptables -A valid-src -s 0.0.0.0/8 -j DROP
iptables -A valid-src -d 255.255.255.255 -j DROP
iptables -A valid-src -s 169.254.0.0/16 -j DROP
iptables -A valid-src -s $ip -j DROP
iptables -A valid-dst -d 224.0.0.0/4 -j DROP
echo "BLOQUEIO DE IPs INVALIDOS [ OK ]"
# Protecoes na pilha TCP/IP do Kernel
echo "BLOQUEIO DE ICMP BROADCAST [ OK ]"
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
echo "PROTECAO CONTRA IP SPOOFING [ OK ]"
echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
echo "BLOQUEIO DE REDIRECIONAMENTO ICMP [ OK ]"
for f in /proc/sys/net/ipv4/conf/*/accept_redirects; do
echo 0 >$f
done
echo "PROTECAO CONTRA SYNFLOOD [ OK ]"
echo "1" > /proc/sys/net/ipv4/tcp_syncookies
echo "PROTECAO CONTRA RESPONSE BOGUS [ OK ]"
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
echo "HABILITANDO SECURE REDIRECTS [ OK ]"
echo "1" > /proc/sys/net/ipv4/conf/all/secure_redirects
echo "PROTECAO CONTRA REDIRECIONAMENTOS DE ROTA [ OK ]"
echo "0" > /proc/sys/net/ipv4/conf/all/accept_redirects
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
echo "SYN - FLOOD [ OK ]"
$iptables -A INPUT -p icmp -d $ip --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
$iptables -A INPUT -p icmp -d $ip --icmp-type echo-reply -m limit --limit 1/s -j ACCEPT
$iptables -A OUTPUT -p icmp -s $ip --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
$iptables -A OUTPUT -p icmp -s $ip --icmp-type echo-reply -m limit --limit 1/s -j ACCEPT
echo "Aplicando limites ICMP [ OK ]"
echo "Regras de Segurança Aplicadas [ OK ]"
#Regras de INPUT
$iptables -A INPUT -p ALL -m state --state ESTABLISHED,RELATED -j ACCEPT
$iptables -A INPUT -p tcp -d $ip --dport 22 -j ssh-rules
#Regras de OUTPUT
$iptables -A OUTPUT -p ALL -m state --state ESTABLISHED,RELATED -j ACCEPT
$iptables -A OUTPUT -s $ip -d $ntp -p udp --dport 123 -j ACCEPT
$iptables -A OUTPUT -p tcp -s $ip --dport 53 -j ACCEPT
$iptables -A OUTPUT -p udp -s $ip --dport 53 -j ACCEPT
$iptables -A OUTPUT -p tcp -s $ip -m multiport --dport 80,443 -j ACCEPT
echo "Regras básicas de INPUT/FORWARD [ OK ]"
$iptables -A INPUT -p ALL -i $iflo -j ACCEPT
$iptables -A OUTPUT -p ALL -o $iflo -j ACCEPT
echo "Habilitando Conexões Locais [ OK ]"
# SSH - Liberações
$iptables -A ssh-rules -p tcp -d $ip -s <IP Acesso SSH ex: 200.145.dti.dti> --dport 22 -j ACCEPT
$iptables -A ssh-rules -p tcp -d $ip --dport 22 -j DROP
echo "Acesso SSH Restrito [ OK ]"
#$iptables -A INPUT -p tcp -i $ifext -d $ip -s $monitor --dport 10050 -j ACCEPT
#echo "Acesso Zabbix [ OK ]"
# Descomentar abaixo para serviço WEB
#$iptables -A INPUT -p tcp -s <IP para acessar sua pág> -d $ip -m multiport --dport 443,3000 -j ACCEPT
#echo "HTTPS [ OK ]"
# Descomentar abaixo para serviço MYSQL
#$iptables -A INPUT -p tcp -d $ip --dport 3306 -j ACCEPT
#echo "MYSQL [ OK ]"
# Descomentar abaixo para serviço POSTGRE
#$iptables -A INPUT -p tcp -d $ip --dport 5432 -j ACCEPT
#echo "POSTGRE [ OK ]"
# Descomentar abaixo para serviço de backup - Bacula
#$iptables -A INPUT -p udp -i $ifext -s <IP do bacula> -d $ip -m multiport --dport 9101:9103 -j ACCEPT
#$iptables -A INPUT -p tcp -i $ifext -s <IP do bacula> -d $ip -m multiport --dport 9101:9103 -j ACCEPT
#echo "Servidor Bacula [ OK ]"
#service fail2ban restart
#echo "Restarting fail2ban service [ OK ]"
echo "----------------------------------------------"
echo ""
echo ""
echo "Firewall Ativado"
echo ""
echo ""
;;
stop)
echo "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::"
echo "| Script de Firewall IPv4 - IPTABLES"
echo "| Criado por: CSIRT UNESP"
echo "| security@unesp.br"
echo "| Uso: /etc/init.d/firewall start|stop|restart"
echo "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::"
echo ""
echo "Parando Firewall [ OK ]"
$iptables -P INPUT ACCEPT
$iptables -P FORWARD ACCEPT
$iptables -P OUTPUT ACCEPT
echo "Criando Politicas Padrao(ACCEPT) [ OK ]"
$iptables -Z
$iptables -F
$iptables -X
$iptables -F -t nat
$iptables -X -t nat
$iptables -F -t mangle
$iptables -X -t mangle
echo "Zerando regras e tabelas [ OK ]"
echo ""
;;
restart)
$0 stop
sleep 2
$0 start
#service fail2ban restart
;;
status)
# The 'status' option should return one of the LSB-defined return-codes,
# in particular, return-code 3 should mean that the service is not
# currently running. This is particularly important for Ansible's 'service'
# module, as without this behaviour it won't know if a service is up or down.
RETVAL=0
;;
*)
echo " Usage: {start|stop|restart}"
;;
esac
- firewallv6
#!/bin/sh
### BEGIN INIT INFO
# Provides: firewallv6
# Required-Start: $local_fs $network $syslog
# Required-Stop: $local_fs $network $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: starts ip6tables rules
# Description: starts ip6tables rules - start-stop-daemon
### END INIT INFO
iptables=/sbin/ip6tables
case "$1" in
start)
echo "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::"
echo "| Script de Firewall IPv6 - IPTABLES"
echo "| Criado por: CSIRT UNESP"
echo "| security@unesp.br"
echo "| Uso: /etc/init.d/firewall start|stop|restart"
echo "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::"
echo ""
echo "Iniciando Firewall [ OK ]"
iflo="lo"
ifext="< INTERFACE ex:eth0>"
ip="<IP ex2801:88:1000:bf::25> "
#netapp=""
#monitor="< ZABBIX>"
ntp="2801:88:ffff:b0b0::255"
echo "Definindo variaveis [ OK ]"
/sbin/modprobe ip_tables
/sbin/modprobe ip_conntrack
/sbin/modprobe iptable_filter
/sbin/modprobe ipt_LOG
/sbin/modprobe ipt_limit
/sbin/modprobe ipt_state
/sbin/modprobe ipt_REJECT
/sbin/modprobe ip_conntrack_tftp
echo "Carregamento de Modulos [ OK ]"
$iptables -Z
$iptables -F
$iptables -X
$iptables -F -t nat
$iptables -X -t nat
$iptables -F -t mangle
$iptables -X -t mangle
echo "Zerando regras e tabelas [ OK ]"
$iptables -P INPUT DROP
$iptables -P FORWARD DROP
$iptables -P OUTPUT DROP
$iptables -N valid-src
$iptables -N valid-dst
$iptables -N ssh-rules
$iptables -I INPUT -i $ifext -j valid-src
$iptables -I OUTPUT -o $ifext -j valid-dst
echo "Criando Politicas Padrao [ OK ]"
#Regras de Seguranca
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
echo "SYN - FLOOD [ OK ]"
echo "----------------------------------------------"
echo "Seguranca [ OK ]"
#Regras de INPUT
$iptables -A INPUT -p ALL -m state --state ESTABLISHED,RELATED -j ACCEPT
$iptables -A INPUT -p ipv6-icmp -j ACCEPT
$iptables -A INPUT -p tcp -d $ip --dport 22 -j ssh-rules
#Regras de OUTPUT
$iptables -A OUTPUT -p ALL -m state --state ESTABLISHED,RELATED -j ACCEPT
$iptables -A OUTPUT -p ipv6-icmp -j ACCEPT
$iptables -A OUTPUT -s $ip -d $ntp -p udp --dport 123 -j ACCEPT
$iptables -A OUTPUT -p tcp -m state --state NEW -s $ip --dport 53 -j ACCEPT
$iptables -A OUTPUT -s $ip -p udp --dport 53 -j ACCEPT
$iptables -A OUTPUT -p tcp -m state --state NEW -s $ip --dport 80 -j ACCEPT
$iptables -A OUTPUT -p tcp -m state --state NEW -s $ip --dport 443 -j ACCEPT
echo "Regras de INPUT/FORWARD [ OK ]"
$iptables -A INPUT -p ALL -i $iflo -j ACCEPT
$iptables -A OUTPUT -p ALL -o $iflo -j ACCEPT
echo "Habilitando Conexões Locais [ OK ]"
$iptables -A ssh-rules -p tcp -m state --state NEW -d $ip -s <IP> --dport 22 -j ACCEPT
echo "Acesso SSH Restrito [ OK ]"
#$iptables -A INPUT -p tcp -i $ifext -d $ip -s $monitor --dport 10050 -j ACCEPT
#$iptables -A OUTPUT -p tcp -o $ifext -s $ip -d $monitor --dport 10051 -j ACCEPT
#echo "Acesso Zabbix [ OK ]"
# Descomente abaixo para servidor WEB
#$iptables -A INPUT -p tcp -i $ifext -d $ip -m multiport --dport 80,443 -j ACCEPT
#echo "HTTP"
#$iptables -A INPUT -p udp -i $ifext -s XXXXXXXXXXXXX -d $ip -m multiport --dport 9101:9103 -j ACCEPT
#$iptables -A INPUT -p tcp -i $ifext -s XXXXXXXXXXXXX -d $ip -m multiport --dport 9101:9103 -j ACCEPT
#echo "Servidor Bacula [ OK ]"
echo "----------------------------------------------"
echo ""
echo ""
echo "Firewall Ativado"
echo ""
echo ""
;;
stop)
echo "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::"
echo "| Script de Firewall IPv6 - IPTABLES"
echo "| Criado por: CSIRT UNESP"
echo "| security@unesp.br"
echo "| Uso: /etc/init.d/firewall start|stop|restart"
echo "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::"
echo ""
echo "Parando Firewall [ OK ]"
iptables=/sbin/ip6tables
$iptables -P INPUT ACCEPT
$iptables -P FORWARD ACCEPT
$iptables -P OUTPUT ACCEPT
echo "Criando Politicas Padrao(ACCEPT) [ OK ]"
$iptables -Z
$iptables -F
$iptables -X
$iptables -F -t nat
$iptables -X -t nat
$iptables -F -t mangle
$iptables -X -t mangle
echo "Zerando regras e tabelas [ OK ]"
echo ""
;;
restart)
$0 stop
sleep 2
$0 start
service fail2ban restart
;;
*)
echo " Usage: {start|stop|restart}"
;;
esac