Sugestões de melhorias para script Iptables

1. Sugestões de melhorias para script Iptables

André Schmidt
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

###################################################################


  


2. Re: Sugestões de melhorias para script Iptables

eli Rodrigues
debian6

(usa Outra)

Enviado em 23/05/2019 - 22:44h

Cara eu colocaria nas regras basiccas de segurança assim abaiixo do antspoofing que tu já está colocando
# 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


_______________________________________________
Buscando rosas mais formosas encontrei espinhos maiores.

Buscando rosas mais formosas encontrei espinhos maiores.


3. Re: Sugestões de melhorias para script Iptables

eli Rodrigues
debian6

(usa Outra)

Enviado em 23/05/2019 - 22:47h

Andrerazak escreveu:

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

# Bloquear ping
iptables -A INPUT -p icmp -j DROP

#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

###################################################################



Para o samba basta liberar a porta 445 tcp vai funcionar de boa.
Buscando rosas mais formosas encontrei espinhos maiores.


4. Re: Sugestões de melhorias para script Iptables

André Schmidt
Andrerazak

(usa Ubuntu)

Enviado em 25/05/2019 - 23:49h

#!/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

# Bloquear ping
iptables -A INPUT -p icmp -j DROP

# 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 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

###################################################################


Ficaria assim então?
E desde já agradeço pela atenção.



Aqueles que não planejam um incidente de segurança estão planejando o fracasso.
Kevin Mitnick


5. Re: Sugestões de melhorias para script Iptables

eli Rodrigues
debian6

(usa Outra)

Enviado em 26/05/2019 - 22:30h

Isso,
mas remove essa
# Bloquear ping
iptables -A INPUT -p icmp -j DROP
Pra não ficar redundante.

Buscando rosas mais formosas encontrei espinhos maiores.


6. Re: Sugestões de melhorias para script Iptables

André Schmidt
Andrerazak

(usa Ubuntu)

Enviado em 28/05/2019 - 14:25h

Blz, já fiz a alteração. Mais uma vez obrigado.

Aqueles que não planejam um incidente de segurança estão planejando o fracasso.
Kevin Mitnick






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts