Andrerazak
(usa Ubuntu)
Enviado em 13/03/2019 - 15:27h
A ideia é proteger um servidor Debian 9 com os seguintes serviços:
Samba
Mysql
Webmim
SSH
Montei este script que é meio que um "Frankenstein" pois peguei partes de vários lugares e ajustei conforme entendo que preciso.
Gostaria da ajuda para encontrar erros e sugestões de melhorias.
#!/bin/bash
# Limpar regras anteriores
iptables -X
iptables -F
iptables -t nat -X
iptables -t nat -F
# Mudar regra de entrada padrão para negado.
iptables -P INPUT DROP
################# Regras Basicas #############################
#Libera todo o acesso a interface loopback
iptables -t filter -A INPUT -j ACCEPT -i lo
#Conexões estabelecidas e relacionadas.
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
################ Regras de segurança Basicas #########################
# Proteção contra IP Spoofing
for i in /proc/sys/net/ipv4/conf/*/rp_filter; do
echo 1 >$i
done
# Bloqueio de ICMP.
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
#Desabilitando qualquer tipo de redirecionamento.
for i in /proc/sys/net/ipv4/conf/*
do
echo 0 > ${i}/accept_redirects
echo 0 > ${i}/accept_source_route
echo 0 > ${i}/secure_redirects
done
#Protecao contra ping da morte
iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
#Descarta pacotes malformados, protegendo contra-ataques diversos:
iptables -A INPUT -m state --state INVALID -j DROP
#Protecao contra port scanners ocultos.
iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
#Bloquear Network Flood sobre o servidor web que esteja escutando na porta 80 http
iptables -A INPUT -p tcp --dport 80 -m limit --limit 100/minute --limit-burst 200 -j ACCEPT
#Bloquear Network Flood sobre o servidor webmin que esteja escutando na porta 443 https
iptables -A INPUT -p tcp --dport 443 -m limit --limit 100/minute --limit-burst 200 -j ACCEPT
# Proteções diversas contra portscanners, ping of death, ataques DoS, etc.
iptables -A FORWARD -p tcp -m limit --limit 1/s -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD --protocol tcp --tcp-flags ALL SYN,ACK -j DROP
# DNS,DNS-UDP
iptables -A INPUT -p udp --dport 53 -j ACCEPT
iptables -A INPUT -p tcp --dport 53 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
# TLS/SSL (NNTPS) tcp,udp
iptables -A INPUT -p tcp --dport 563 -j ACCEPT
iptables -A INPUT -p udp --dport 563 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 563 -j ACCEPT
iptables -A OUTPUT -p udp --dport 563 -j ACCEPT
####################### Regras dos serviços ####################
# Permite acesso SSH somente da rede 2.0/24 na porta 44333
iptables -A INPUT -p tcp -m state --state NEW --source 192.168.2.0/24 --dport 44333 -j ACCEPT
# Liberar a porta usada pelo https
iptables -A INPUT -m state --state NEW -p tcp --dport 443 -j ACCEPT
# Liberar a porta usada pelo servidor webmim
iptables -A INPUT -m state --state NEW -p tcp --dport 10000 -j ACCEPT
# Acesso ao banco de dados. PS: Sei que deveria criar algum filtro e já estou pesquisando sobre isso e
# que alem do acesso interno precisa do externo para suporte de um sistema que fica hospedado no servidor.
iptables -I INPUT 1 -p tcp --destination-port 3306 -j ACCEPT
## Acesso aberto ao servidor de arquivos Samba somente para usuários da lan ##
iptables -A INPUT -s 192.168.2.0/24 -m state --state NEW -p udp --dport 137 -j ACCEPT
iptables -A INPUT -s 192.168.2.0/24 -m state --state NEW -p udp --dport 138 -j ACCEPT
iptables -A INPUT -s 192.168.2.0/24 -m state --state NEW -p tcp --dport 139 -j ACCEPT
iptables -A INPUT -s 192.168.2.0/24 -m state --state NEW -p tcp --dport 445 -j ACCEPT
######### Registro e bloqueio de TROJAN_PORTS e outros #########
TROJAN_PORTS="12345 31336 31337 31338 3024 4092 5714 5742 2583 8787 5556 5557 22"
iptables -t filter -N trojans-in
for PORTA in ${TROJAN_PORTS};do
iptables -A trojans-in -p tcp --sport=1024: --dport=${PORTA} -j LOG \
--log-prefix "FIREWALL: Trojan ${PORTA} "
iptables -A trojans-in -p tcp --sport=1024: --dport=${PORTA} -j DROP
done
iptables -t filter -A INPUT -i enp3s0 -j trojans-in
###################################################################