Macetes para iptables

Publicado por Junior Rocha em 01/06/2009

[ Hits: 11.508 ]

 


Macetes para iptables



Olá Pessoal, tudo certo?

Esta dica é bem objetiva e prática, contendo alguns "macetezinhos" para o iptables, tais como redirecionamento de portas, logs etc. Lembrando que as políticas de regras padrão são INPUT, FORWARD e DROP. Use e abuse. =)

1 - Se eu quero fazer o log de uma porta, como posso fazer?

Bom, suponhamos que você queira logar toda tentativa de conexão no seu SSH e por descuido acabou deixando a porta como padrão (22). Utilize a seguinte linha:

iptables -A INPUT -p tcp --dport 22 -i eth0 -j LOG --log-level 6 --log-prefix "LOG DE ACESSO NO SSH (22): "

Explicação: Observe o "eth0" na linha. O eth0 equivale a interface de rede externa do seu firewall, ou seja, o link direto com a internet. Você pode logar outras portas, tais como RDP (3389), Sybase (1498, 1499) e tantas outras portas. Basta alterar a linha conforme necessário.

2 - Tenho uma máquina na minha rede que possui acesso de Terminal Server. Quais regras posso utilizar para acessar minha máquina internamente e externamente?

Bom, nesta parte consideraremos que você tem uma máquina já configurada, bonitinha, com o IP 192.198.0.10 tendo acesso ao TS.

Suponhamos que você tem um IP fixo ou utiliza o DDNS para fazer DNS dinâmico e lá do seu trabalho quer acessar a sua máquina de casa para acessar algum arquivo. Se você utiliza modem ADSL roteador, configure o modem para utilizar DMZ com o endereço da interface EXTERNA do seu firewall. Se você utiliza conexões a rádio ou com IPs fixos diretos, não são necessárias tais configurações.

#iptables -t nat -A PREROUTING -p tcp --dport 3389 -j DNAT --to 192.168.0.10
iptables -t nat -A PREROUTING -p tcp --sport 3389 -s 192.168.0.10/24 -j ACCEPT
iptables -A FORWARD -p tcp --dport 3389 -s 0/0 -d 192.168.0.10/24 -j ACCEPT
iptables -A FORWARD -p tcp --sport 3389 -s 192.168.0.10/24 -j ACCEPT
#iptables -t nat -A PREROUTING -p udp --dport 3389 -j DNAT --to 192.168.0.10
iptables -t nat -A PREROUTING -p udp --sport 3389 -s 192.168.0.10/24 -j ACCEPT
iptables -A FORWARD -p udp --dport 3389 -s 0/0 -d 192.168.0.10/24 -j ACCEPT
iptables -A FORWARD -p udp --sport 3389 -s 192.168.0.10/24 -j ACCEPT
iptables -t nat -A PREROUTING -p tcp --dport 3389 -s 192.168.0.0 -j ACCEPT
iptables -t nat -A PREROUTING -p tcp --dport 3389 -j DNAT --to 192.168.0.10
iptables -A FORWARD -p tcp --dport 3389 -j ACCEPT

Explicação: Observe as linhas que contém o "#" na frente (o que quer dizer uma linha comentada, que não será aplicada). Estas duas linhas não deixam com que usuários da sua rede interna façam conexões RDP para servidores externos. Ou seja, toda tentativa de conexão interna > externa de Terminal Server acabará caindo na sua máquina 192.168.0.10, provedora de TS. Se você quiser que as regras sejam aplicadas, remova o indicador de comentário (tirando o "#" do início da linha). Ah, sim, agora você pode conectar tanto internamente quanto externamente na sua máquina com o TS.

3 - Já que eu sei fazer log de portas do SSH, como liberar o acesso ao SSH da minha máquina?

É simples:

# [ SSH Interno ]
iptables -t nat -A PREROUTING -p tcp --dport 22 -s 192.168.0.0 -j ACCEPT
iptables -t nat -A PREROUTING -p udp --dport 22 -s 192.168.0.0-j ACCEPT
iptables -A INPUT -p tcp --dport 22 -s 192.168.0.0 -j ACCEPT
iptables -A INPUT -p udp --dport 22 -s 192.168.0.0 -j ACCEPT

# [ SSH Externo ]
iptables -t nat -A PREROUTING -p tcp --dport 22 -j ACCEPT
iptables -t nat -A PREROUTING -p udp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p udp --dport 22 -j ACCEPT

4 - Tenho um sistema na minha rede com banco de dados Sybase e uma filial de minha empresa precisa acessar o banco de dados que está no meu servidor aqui na matriz, como proceder?

Nos casos que eu tive contato, as portas a serem utilizadas eram 1498 e 1499, tanto UDP quanto TCP. Porém, nos logs, apenas detectei conexões na porta 1498 protocolo TCP. Claro que por prudência deixaremos todas as portas configuradas.

Considerando que o seu banco de dados seja também o IP 192.168.0.10:

iptables -t nat -A PREROUTING -p tcp --dport 1498:1499 -j DNAT --to 192.168.0.10
iptables -t nat -A PREROUTING -p udp --dport 1498:1499 -j DNAT --to 192.168.0.10
iptables -t nat -A PREROUTING -p tcp --sport 1498:1499-s 192.168.0.10/24 -j ACCEPT
iptables -t nat -A PREROUTING -p udp --sport 1498:1499 -s 192.168.1.2/24 -j ACCEPT
iptables -A FORWARD -p tcp --dport 1498:1499 -s 0/0 -d 192.168.0.10/24 -j ACCEPT
iptables -A FORWARD -p udp ¿dport 1498:1499 -s 0/0 -d 192.168.0.10/24 -j ACCEPT
iptables -A FORWARD -p tcp --sport 1498:1499 -s 192.168.0.10/24 -j ACCEPT
iptables -A FORWARD -p udp --sport 1498:1499 -s 192.168.0.10/24 -j ACCEPT

5 - E contra Syn Flood, como faço?

Fácil, fácil! Duas linhas resolvem o problema:

iptables -A FORWARD -p tcp --syn -m limit --limit 5/s -j ACCEPT
iptables -A FORWARD -p tcp --syn -j DROP

OPS!!! Engano meu caro, estas regras NÃO bloqueiam ataques SYN de maneira efetiva! Quer estender um pouco mais sua leitura sobre IPTABLES e ataques de SYN FLOOD? Leia: Iptables protege contra SYN FLOOD - Viva o Linux

Bom pessoal, são apenas dicas simples e que muitas vezes precisamos aplicar. Não coloquei aqui liberação de POP, SMTP, consulta DNS, Skype e afins porque acho que configurações de e-mail, redirecionamento para Squid e DNS são básicos, caso necessário posso contribuir com outra dica.

Até a próxima e bom trabalho!

Um abraço!

Outras dicas deste autor

Firefox não salva as suas configurações?! Resolva de maneira simples!

Softwarelivre.org: uma comunidade de amigos livres!

O TouchPad do seu notebook não funciona no Ubuntu 10.04? Não funcionava!

Leitura recomendada

Detectando sniffers

Layer 7 + Slackware Linux 12 + Kernel 2.6.25 + IPTables 1.4 (passo a passo)

PwnTooth - pen testing em dispositivos bluetooth

Restringindo o poder do super usuário

Login automático no SSH com chave criptográfica mais segura

  

Comentários
[1] Comentário enviado por linus black em 09/08/2009 - 15:33h

amigo o que vc diz sobre este script
por muito eu testei varios scripts mas este me parece rassoavel
deme sua opinião

#!/bin/sh
#
# rc.firewall
#
#
#
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
modprobe ip_gre
#
#Limpa as Regras
iptables -F
iptables -X
iptables -F -t nat
iptables -X -t nat
iptables -F -t mangle
iptables -X -t mangle
#
echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
echo 1 > /proc/sys/net/ipv4/conf/all/accept_source_route
echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects
echo 0 > /proc/sys/net/ipv4/conf/all/log_martians
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout
echo 1800 > /proc/sys/net/ipv4/tcp_keepalive_intvl
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
echo 1 > /proc/sys/net/ipv4/tcp_ecn
echo 1 > /proc/sys/net/ipv4/tcp_timestamps
echo "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::"
echo "=========================================================|"
echo "|:INICIANDO A CONFIGURAÇÃO DO FIREWALL NETFILTER ATRAVÉS:|"
echo "|: DO IPTABLES :|"
echo "=========================================================|"
echo "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::"
#Politicas Padrao
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
#
### Ativando Protecoes Contra Ataques ###
# 1 - Protecao contra Trinoo
iptables -N TRINOO
iptables -A TRINOO -m limit --limit 1/s -j LOG --log-level 6 --log-prefix "FIREWALL(Prot. Trinoo): "
iptables -A TRINOO -j DROP
iptables -A INPUT -p tcp -i eth0 --dport 27444 -j TRINOO
iptables -A INPUT -p tcp -i eth0 --dport 27665 -j TRINOO
iptables -A INPUT -p tcp -i eth0 --dport 31335 -j TRINOO
iptables -A INPUT -p tcp -i eth0 --dport 34555 -j TRINOO
iptables -A INPUT -p tcp -i eth0 --dport 35555 -j TRINOO
echo "ativado o bloqueio a tentativa de ataque do tipo Trinoo"
echo "ON .................................................[ OK ]"
# 2 - Protecao contra Trojans
iptables -N TROJAN
iptables -A TROJAN -m limit --limit 1/s -j LOG --log-level 6 --log-prefix "FIREWALL(Prot. Trojan): "
iptables -A TROJAN -j DROP
iptables -A INPUT -p tcp -i eth0 --dport 666 -j TROJAN
iptables -A INPUT -p tcp -i eth0 --dport 666 -j TROJAN
iptables -A INPUT -p tcp -i eth0 --dport 4000 -j TROJAN
iptables -A INPUT -p tcp -i eth0 --dport 6000 -j TROJAN
iptables -A INPUT -p tcp -i eth0 --dport 6006 -j TROJAN
iptables -A INPUT -p tcp -i eth0 --dport 16660 -j TROJAN
echo "ativado o bloqueio a tentativa de ataque do tipo Trojan"
echo "ON .................................................[ OK ]"
# 3 - Protecao contra Worms
iptables -A FORWARD -p tcp --dport 135 -i eth0 -j REJECT
echo "ativado o bloqueio a tentativa de ataque do tipo Worms"
echo "ON .................................................[ OK ]"
# 4 - Protecao contra Syn-Flood
iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT
echo "ativado o bloqueio a tentativa de ataque do tipo Syn-Flood"
echo "ON .................................................[ OK ]"
# 5 - Protecao contra Ping da Morte
iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
echo "ativado o bloqueio a tentativa de ataque do tipo ping "
echo "ON .................................................[ OK ]"
# 6 - Protecao contra Port Scanners
iptables -N SCANNER
iptables -A SCANNER -m limit --limit 1/s -j LOG --log-level 6 --log-prefix "FIREWALL(Port Scanner): "
iptables -A SCANNER -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -i eth0 -j SCANNER
iptables -A INPUT -p tcp --tcp-flags ALL NONE -i eth0 -j SCANNER
iptables -A INPUT -p tcp --tcp-flags ALL ALL -i eth0 -j SCANNER
iptables -A INPUT -p tcp --tcp-flags ALL FIN,SYN -i eth0 -j SCANNER
iptables -A INPUT -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -i eth0 -j SCANNER
iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -i eth0 -j SCANNER
iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -i eth0 -j SCANNER
iptables -A INPUT -p udp -s 0/0 -i eth0 --dport 33435:33525 -j REJECT
iptables -A INPUT -m state --state INVALID -j REJECT
echo "ativado o bloqueio a tentativa de ataque do tipo Scanners"
echo "ON .................................................[ OK ]"
#
#Rotiamento e redirecionamento
#iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 3128
iptables -t nat -A POSTROUTING -s 192.168.0.0/16 -j MASQUERADE
echo "1" > /proc/sys/net/ipv4/ip_forward
echo "ativado o Rotiamento"
echo "ON .................................................[ OK ]"
#Liberando rrede interna
iptables -A INPUT -s 192.168.0.0/16 -p udp --dport 53 -j ACCEPT
iptables -A INPUT -s 192.168.0.0/16 -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -s 192.168.0.0/16 -p tcp --dport 22 -j ACCEPT
#Mantendo a coneo
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#
iptables -t filter -A INPUT -i lo -j ACCEPT
#
# BLOQUEA O QUE NAO SE ENCAIXA NAS REGRAS ACIMA
iptables -A INPUT -p tcp --syn -j DROP
iptables -P FORWARD DROP

echo "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::"
echo "=========================================================|"
echo "|: CARREGAMENTO BEM SUSSEDIDO :|"
echo "|: DO IPTABLES :|"
echo "=========================================================|"
echo "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::"


[2] Comentário enviado por junior em 21/09/2009 - 15:02h

Olá amigo, depende da sua necessidade.
O script acima parece ser seguro. Porém somente em ambiente de produção que eu poderia ter certeza.
Caso você tenha dúvidas, aqui mesmo no VOL tem muitos exemplos de configuração de IPTABLES que podem satisfazer as necessidades de sua empresa.

Um abraço.



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts