Anda di halaman 1dari 5

Servidor Linux com Firewall/Proxy autenticado com Iptables/Squid

1ª. Parte – Montando o Firewall

Esse é o primeiro artigo de vários que pretendo disponibilizar pra vocês, onde contarei
um pouco da minha experiência com Linux e também publicarei documentações de outros
colegas que me ajudaram ao longo desses anos trabalhando com Linux.

Nesse artigo, tentarei mostrar como construir um firewall Linux com filtro de conteúdo
autenticado, levando em consideração que o Linux já esteja instalado no micro. A distribuição
a ser utilizada fica a critério do leitor, pois sabemos as particularidades que cada uma tem e
deixo-os bem a vontade para escolherem a que mais lhe agradarem, porém, utilizarei como
base para a instalação dos pacotes o apt-get, pois é o utilizado no Debian e nas distros
baseadas nele, caso optem pelo Fedora ou compatíveis, podem perfeitamente substituir o apt-
get pelo yum.

Lembrando que nesse tutorial tentarei ser o mais didático possível, levando em
consideração que meus leitores são usuários ainda não totalmente familiarizados com o
ambiente LINUX optei pela simplicidade e por isso não explorarei os recursos mais avançados
dessas ferramentas, mas com certeza será um bom começo para todos.

==========++++++++++++======= O Firewall ===+++========+++++++++====++++====

Um Firewall é um programa possui autonomia para tratar de forma linear todo tipo de
tráfego que passa por um host ou por uma rede inteira. Por isso é muito importante que o
administrador saiba exatamente o que quer proteger e de que forma isso será feito.

No Linux o firewall faz parte da própria arquitetura do kernel, o que sem dúvida o
coloca na frente dos seus concorrentes, pois todo que passa por um host, já é processado no
kernel independente do SO, mas o Linux inclui em sua estrutura um Netfilter que controla o
fluxo dos pacotes especificamente.

Por isso, tudo que você vai precisar para iniciar o seu firewall já está pronto no Linux,
que é o famoso front-end conhecido como Iptables. É fato que existem muitas outras
funcionalidades do iptables que podem ser implementadas via compilação de kernel como
bloqueio de aplicativos em Layer 7, etc... mas esse não é nosso foco, pois estamos iniciando
nesse mundo, certo?

Então vamos colocar a mão na massa:

1º. Fazendo a verificação dos pacotes instalados e criando o arquivo firewall.sh

Já no console do seu servidor e com acesso de root apenas digite o comando : iptables
Agora, no diretório /etc use o seu editor de textos preferido para criar o arquivo
firewall.sh onde colocaremos nossas regras de firewall (copie o script abaixo e cole em seu
arquivo):

Uma vez preparado o arquivo, vamos tornalo executável:

#chmod +x /etc/firewall.sh

#agora digite: ./firewall.sh e realize seus testes e vá ajustando suas regras até chegar
ao ponto certo.

Alguns conceitos importantes:

Tabela Filter:

As chains fundamentais do Firewall:

INPUT: Tudo que entra no host

FORWARD: Tudo que chega ao host mas deve ser redirecionamento a um host secundário ou
outra interface de rede

OUTPUT: Tudo que sai do host

Tabela Filter:

PREROUTING: Utilizada para alterar pacotes antes de serem roteados.

POSTROUTING: Utilizada para alterar pacotes depois de serem roteados.

Eu adaptei um script do nosso colega Ricardo Jacomel no site vivaolinux.com.br que


me atende bem, mas fiquem a vontade para personalizar ao seu modo e ajustá-lo a sua
necessidade:

O bacana nesse script é que ele logo praticamente tudo que o faz, e todos sabemos
que nada melhor do que um bom log para reconhecermos nossos inimigos.

###### SCRIPT DE FIREWALL ####


###### Versao: 1.0a ##########
#!/bin/sh
# Variáveis
# -------------------------------------------------------
iptables=/sbin/iptables
IF_EXTERNA=eth0
IF_INTERNA=eth1
# Ativa módulos
# -------------------------------------------------------
/sbin/modprobe iptable_nat
/sbin/modprobe ip_conntrack
/sbin/modprobe ip_conntrack_ftp
/sbin/modprobe ip_nat_ftp
/sbin/modprobe ipt_LOG
/sbin/modprobe ipt_REJECT
/sbin/modprobe ipt_MASQUERADE

# Ativa roteamento no kernel


# -------------------------------------------------------
echo "1" > /proc/sys/net/ipv4/ip_forward

# Proteção contra IP spoofing


# -------------------------------------------------------
echo "1" > /proc/sys/net/ipv4/conf/all/rp_filter

# Zera regras
# -------------------------------------------------------
$iptables –F
$iptables –X
$iptables -F -t nat
$iptables -X -t nat
$iptables -F -t mangle
$iptables -X -t mangle

# Determina a política padrão


# -------------------------------------------------------
$iptables -P INPUT DROP
$iptables -P FORWARD DROP

#################################################
# Tabela FILTER
#################################################
# Dropa pacotes TCP indesejáveis
# -------------------------------------------------------
$iptables -A FORWARD -p tcp ! --syn -m state --state NEW -j LOG --log-level 6 --log-prefix
"FIREWALL: NEW sem syn: " $iptables -A FORWARD -p tcp ! --syn -m state --state NEW -j DROP

# Dropa pacotes mal formados


# -------------------------------------------------------
$iptables -A INPUT -i $IF_EXTERNA -m unclean -j LOG --log-level 6 --log-prefix "FIREWALL:
pacote mal formado: " $iptables -A INPUT -i $IF_EXTERNA -m unclean -j DROP

# Aceita os pacotes que realmente devem entrar


# -------------------------------------------------------
$iptables -A INPUT -i ! $IF_EXTERNA -j ACCEPT
$iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$iptables -A OUTPUT -m state --state ESTABLISHED,RELATED,NEW -j ACCEPT
$iptables -A FORWARD -m state --state ESTABLISHED,RELATED,NEW -j ACCEPT
# Proteção contra trinoo
# -------------------------------------------------------
$iptables -N TRINOO
$iptables -A TRINOO -m limit --limit 15/m -j LOG --log-level 6 --log-prefix "FIREWALL: trinoo: "
$iptables -A TRINOO -j DROP
$iptables -A INPUT -p TCP -i $IF_EXTERNA --dport 27444 -j TRINOO
$iptables -A INPUT -p TCP -i $IF_EXTERNA --dport 27665 -j TRINOO
$iptables -A INPUT -p TCP -i $IF_EXTERNA --dport 31335 -j TRINOO
$iptables -A INPUT -p TCP -i $IF_EXTERNA --dport 34555 -j TRINOO
$iptables -A INPUT -p TCP -i $IF_EXTERNA --dport 35555 -j TRINOO

# Proteção contra tronjans


# -------------------------------------------------------
$iptables -N TROJAN
$iptables -A TROJAN -m limit --limit 15/m -j LOG --log-level 6 --log-prefix "FIREWALL: trojan: "
$iptables -A TROJAN -j DROP
$iptables -A INPUT -p TCP -i $IF_EXTERNA --dport 666 -j TROJAN
$iptables -A INPUT -p TCP -i $IF_EXTERNA --dport 666 -j TROJAN
$iptables -A INPUT -p TCP -i $IF_EXTERNA --dport 4000 -j TROJAN
$iptables -A INPUT -p TCP -i $IF_EXTERNA --dport 6000 -j TROJAN
$iptables -A INPUT -p TCP -i $IF_EXTERNA --dport 6006 -j TROJAN
$iptables -A INPUT -p TCP -i $IF_EXTERNA --dport 16660 -j TROJAN

# Proteção contra worms


# -------------------------------------------------------
$iptables -A FORWARD -p tcp --dport 135 -i $IF_INTERNA -j REJECT

# Proteção contra syn-flood


# -------------------------------------------------------
$iptables -A FORWARD -p tcp --syn -m limit --limit 2/s -j ACCEPT

# Proteção contra ping da morte


# -------------------------------------------------------
$iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT

# Proteção contra port scanners


# -------------------------------------------------------
$iptables -N SCANNER
$iptables -A SCANNER -m limit --limit 15/m -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 $IF_EXTERNA -j SCANNER
$iptables -A INPUT -p tcp --tcp-flags ALL NONE -i $IF_EXTERNA -j SCANNER
$iptables -A INPUT -p tcp --tcp-flags ALL ALL -i $IF_EXTERNA -j SCANNER
$iptables -A INPUT -p tcp --tcp-flags ALL FIN,SYN -i $IF_EXTERNA -j SCANNER
$iptables -A INPUT -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -i $IF_EXTERNA -j SCANNER
$iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -i $IF_EXTERNA -j SCANNER
$iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -i $IF_EXTERNA -j SCANNER

# Loga tentativa de acesso a determinadas portas


# -------------------------------------------------------
$iptables -A INPUT -p tcp --dport 21 -i $IF_EXTERNA -j LOG --log-level 6 --log-prefix
"FIREWALL:ftp: "
$iptables -A INPUT -p tcp --dport 23 -i $IF_EXTERNA -j LOG --log-level 6 --log-prefix "FIREWALL:
telnet: "
$iptables -A INPUT -p tcp --dport 25 -i $IF_EXTERNA -j LOG --log-level 6 --log-prefix "FIREWALL:
smtp: "
$iptables -A INPUT -p tcp --dport 80 -i $IF_EXTERNA -j LOG --log-level 6 --log-prefix "FIREWALL:
http: "
$iptables -A INPUT -p tcp --dport 110 -i $IF_EXTERNA -j LOG --log-level 6 --log-prefix
"FIREWALL: pop3: "
$iptables -A INPUT -p udp --dport 111 -i $IF_EXTERNA -j LOG --log-level 6 --log-prefix
"FIREWALL: rpc: "
$iptables -A INPUT -p tcp --dport 113 -i $IF_EXTERNA -j LOG --log-level 6 --log-prefix
"FIREWALL: identd: "
$iptables -A INPUT -p tcp --dport 137:139 -i $IF_EXTERNA -j LOG --log-level 6 --log-prefix
"FIREWALL: samba: "
$iptables -A INPUT -p udp --dport 137:139 -i $IF_EXTERNA -j LOG --log-level 6 --log-prefix
"FIREWALL: samba: "
$iptables -A INPUT -p tcp --dport 161:162 -i $IF_EXTERNA -j LOG --log-level 6 --log-prefix
"FIREWALL: snmp: "
$iptables -A INPUT -p tcp --dport 6667:6668 -i $IF_EXTERNA -j LOG --log-level 6 --log-prefix
"FIREWALL: irc: "
$iptables -A INPUT -p tcp --dport 3128 -i $IF_EXTERNA -j LOG --log-level 6 --log-prefix
"FIREWALL: squid: "

# Libera acesso externo a determinadas portas


# -------------------------------------------------------
$iptables -A INPUT -p tcp --dport 22 -i $IF_EXTERNA -j ACCEPT

# Libera acesso de smtp para fora apenas para o IP XXX.XXX.XXX.XXX


# -------------------------------------------------------
#$iptables -A FORWARD -p tcp -d ! XXX.XXX.XXX.XXX --dport 25 -j LOG --log-level 6 --log-prefix
"FIREWALL: SMTP proibido: "
#$iptables -A FORWARD -p tcp -d ! XXX.XXX.XXX.XXX --dport 25 -j REJECT

#################################################
# Tabela NAT
#################################################

# Ativa mascaramento de saída


# -------------------------------------------------------
$iptables -A POSTROUTING -t nat -o $IF_EXTERNA -j MASQUERADE

# Proxy transparente
# -------------------------------------------------------
#$iptables -t nat -A PREROUTING -i $IF_INTERNA -p tcp --dport 80 -j REDIRECT --to-port 3128

# Redireciona portas para outros servidores


# -------------------------------------------------------
#$iptables -t nat -A PREROUTING -d 192.168.200.1 -p tcp --dport 22 -j DNAT --to-destination
10.0.0.1

Anda mungkin juga menyukai