Nós sabemos que nos dias de hoje é
essencial o Firewall em servidores corporativos como servidores
de web, e-mail e gateways, devido a demanda de hackers e lammers.
Mas sabemos que assim mesmo não basta montar um Firewall
e por em mente que nunca vai ser invadido.
Lembre-se de que é primordial verificar
os Updates, Advisores, Bug e falhas de sistema. Tenha em mente,
além de configurar um sistema de firewall, que é
necessário também administratar por Logs e IDS,
e que precisa administratar os Logs para verificar possíveis
erros e de uma forma fácil e ágil, e IDS para verificar
a Dequitação de Intrusos.
Softwares de Firewall para o Linux
O Linux, por ser um software livre, onde uma comunidade
de desenvolvedores contribuem quase que diariamente para seu desenvolvimento
e melhorias, se fala em desenvolvimento e melhorias do Kernel
e existe uma preocupação com firewalls e segurança.
Conheça os Firewalls conforme a versão
do kernel
a) Ipfwadm – O IP
Firewall Administration, ou simplesmente ipfwadmin foi a ferramenta
padrão para construção de regras de firewall,
para o Kernel anterior à versão 2.2.0. Dizem que
o Ipfwadm era extremamente complexo.
b) Ipchains – O ipchains
foi a solução, ou melhor, a atualização,
feita para o kernel 2.2 do ipfwadm. A idéia do ipchains
foi ter o poder do ipfwadm, mas com uma simplicidade e facilidade
no que diz respeito à criação de regras.
Além de prover sua facilidades, é criar uma compatibilidade
com o ipfwadm através do utilitário ipfwadm-wrapper.
c) Iptables e o Netfilter
– A nova geração de ferramentas de firewall para
o Kernel 2.4 do Linux. Além de possuir as facilidade do
ipchains, e implementar a facilidade do NAT e filtragem de pacotes
mais flexíveis que o IPchains. Para saber mais informações
do Iptables acessem http://www.netfilter.org/
O que precisamos saber?
Na configuração do Firewall com o
iptables, é preciso saber quais são as regras a
serem utilizadas para rodar o Firewall:
Regras do Firewall
– INPUT: È
utilizada quando o destino final é a própria máquina
firewall.
– OUTPUT: Qualquer
pacote gerado pela máquina firewall e que deva sair para
a rede será tratado pela regra OUTPUT.
– FORWARD: Qualquer
pacote que atravessa o firewall, de uma máquina e direcionado
à outra, será tratado pela chain FORWARD.
Basicamente o IPTABLES tem as seguintes políticas:
– DROP: Nega pacote
e não manda um pacote de volta para o emitente.
– ACCEPT: Aceita o
pacote
– REJECT: Nega pacote
e manda um pacote de volta do tipo host-unreachable (Host Inalcançável)
Comandos Principais do IPtables
a) -A – Este comando
acrescenta uma regra às existentes no sistema, ou seja,
permite atualizar regras já existentes na estrutura do
firewall.
b) -I – Este comando
insere uma nova regra dentro das existentes no firewall.
c) -D – Este comando
exclui uma regra específica no firewall.
d) -P – Este comando
define a regra padrão do firewall.
e) -L – Este comando
lista as regras existentes no firewall.
f) -F – Este comando
ZERA todas as regras criadas no Firewall (o chamado flush).
g) -h – Este comando
mostrará o help, ajuda de comando.
h) -R – Este comando
substitui um regra no firewall.
i) -C – Este comando
basicamente checa as regras.
j) -Z – Este comando
zera uma regra específica.
k) -N – Este comando
cria uma nova regra com um nome.
l) -X – Este comando
exclui uma regra específica por seu nome.
Os parâmetros padrão do iptables
são os seguintes:
a) -p! (protocolo) –
Define qual o protocolo TCP/IP deverá ser tratado. São
eles: TCP, UDP e ICMP
b) -s! (origem)/ -d! (destino)
– Define qual o endereço de origem (-S) e de destino
(-D) que a regra atuará. Este comando possui dois argumentos:
endereço/máscara e porta. Ex.: -S 10.0.0.1/24 80,.
c) -i! (interface) –
Define o nome da interface de rede onde trafegará os pacotes
de entrada e saída do firewall. Muito utilizado em mascaramento
e
técnicas de NAT. Exemplo: -W eth1.
d) -j! (ir para) –
Serve para redirecionar uma ação desde que as regras
sejam similares.
e) -f!(fragmento) –
Trata datagrama fragmentados.
Os comandos e os parâmetros são exatamente
iguais aos do ipchains, sem tirar nem pôr.
Extensões
Novidade do iptables que facilita as regras.
-sport[!] [port:port] -dport[!]
[port:port] – Normalmente estas extensões são
utilizadas com o comando -m do iptables. Trata-se de um direcionamento
de porta(s) origem (-sport), para porta(s) destino (-dport). Pode-se
inclusive definir um número padrão de portas para
o acesso (port:port). Este comando pode ser utilizado tanto para
portas TCP ou UDP.
-mac-source[!] endereço
– Especifica qual a placa de rede, através de seu
endereço MAC, que irá transmitir pacotes através
do firewall, limitado pela política do mesmo.
-icmp-type[1] tipo –
Especifica quais os tipos de pacotes ICMP pode passar ou não
pelo firewall. São eles:
Mensagem |
Tipo |
Código |
Echo-request |
8 |
0 |
Echo-reply |
3 |
0 |
Source-quench |
4 |
0 |
Time-exceed |
11 |
0 |
Destination-unreachable |
3 |
0 |
Network-unreachable |
3 |
0 |
Host-unreachable |
3 |
1 |
Protocol-unreachable |
3 |
2 |
Port-unreachable |
3 |
3 |
Com isto podemos bloquear alguns ataques do tipo
ping flood, bloquear ping e etc
[!] — syn – Especifica
o uso dos bits ACK e FIN em requisições SYN TCP.
Especificamente, a opção `-m state’
aceita uma opção adicional `–state’, que é
uma lista de estados de ativação separados por vírgula.
(a flag ‘!’ não indica a ativação desses
estados). Esses estados são:
NEW Um pacote que cria uma nova conexão.
ESTABLISHED Um pacote que pertence a uma
conexão existente (isto é, um pacote de resposta).
RELATED Um pacote que está relacionado
com (mas não faz parte de) uma conexão existente,
como um ICMP error, ou (com o módulo FTP inserido),um pacote
que estabelecido por uma conexão de dados ftp.
INVALID Um pacote que não poderia
ser identificado por alguma razão: isto inclui execução
fora da memória e erros de ICMP que não correspondam
a
nenhuma conexão existente. Geralmente estes pacotes devem
ser barrados (drop).
Exemplos do Firewall
#iptables -A INPUT -p icmp
-j DROP – Esta regra nega todos os pacotes ICMP vindos
do servidor, em que se encontra o firewall.
#iptables -D INPUT -p icmp
-j DROP – Esta regra exclui a regra criar acima.
#iptables -A INPUT -s 192.168.1.0/24
-j DROP – Esta regra acima faz com que todos os pacotes
vindo de qualquer endereço da classe de ip 192.168.1.1
á 192.168.1.255 nega os pacotes.
#iptables -A OUTPUT -p icmp
-d ! 192.168.1.0/24 -j ACCEPT – Esta regra acima faz com
que todos os pacotes vindo de qualquer endereço da classe
de ip 192.168.1.1 á 192.168.1.255 aceita os pacotes.
#echo 1 > /proc/sys/net/ipv4/ip_forward
– Habilitando o recurso de IP forwarding
Configurando o Firewall contra ataque
Proteção contra Syn-floods
# iptables -A FORWARD -p tcp –syn -m limit
–limit 1/s -j ACCEPT
Port scanners ocultos
# iptables -A FORWARD -p tcp –tcp-flags
SYN,ACK,FIN,RST RST -m limit –limit 1/s -j ACCEPT
Ping da morte
# iptables -A FORWARD -p icmp –icmp-type
echo-request -m limit –limit 1/s -j ACCEPT
Proteção Contra IP Spoofing
# iptables -A INPUT -s 10.0.0.0/8 -i Interface
da NET -j DROP
# iptables -A INPUT -s 172.16.0.0/16 -i Interface da NET -j DROP
# iptables -A INPUT -s 192.168.0.0/24 -i Interface da NET -j DROP
Obs.: Interface da NET pode ser ppp0, ethX e etc.
Log a portas proibidas e alguns backdoors
Porta FTP
# iptables -A INPUT -p tcp –dport 21 -j
LOG –log-prefix "Serviço: FTP"
Porta Wincrash
# iptables -A INPUT -p tcp –dport 5042
-j LOG –log-prefix "Serviço: Wincrash"
Portas BackOrifice
# iptables -A INPUT -p tcp –dport 12345
-j LOG –log-prefix "Serviço: BackOrifice"
# iptables -A INPUT -p tcp –dport 123456 -j LOG –log-prefix
"Serviço: BackOrifice"
Redirecionamento de Portas (Usado em DMZ)
Redirecionar Porta SMTP
# iptables -t nat -A PREROUTING -i ethx
-p tcp –dport 25 -j DNAT –to 192.168.1.1
Redirecionar Porta POP
# iptables -t nat -A PREROUTING -i ethx
-p tcp –dport 110 -j DNAT –to 192.168.1.1
OBS.:Sendo que ethx é sua interface de entrada
da WAN.
Bloqueando Kazaa Lite
Para ativar o módulo String match support
(EXPERIMENTAL) tem que aplicar o patch e logo depois compilar
o kernel.
# iptables -m string –string
"X-Kazaa-Username:" -j DROP
# iptables -m string –string "X-Kazaa-Network:" -j
DROP
# iptables -m string –string "X-Kazaa-IP:" -j DROP
# iptables -m string –string "X-Kazaa-SupernodeIP:"
-j DROP
Bloqueando cmd.exe
Neste caso, você precisa ter atrás
do seu firewall Linux um servidor de web IIS da Microsoft, e desejar
evitar worms com código arbitrários que usam o comando
cmd.exe:
Bloqueando em Silêncio
# iptables -I INPUT -j DROP
-p tcp -s 0.0.0.0/0 -m string –string "cmd.exe"
Bloqueando e reportando por uma hora
# iptables -I INPUT -j LOG
-p tcp -s 0.0.0.0/0 -m string –string "cmd.exe" -m
limit –limit 1/hour
Scripts Cases
Ruleset
1 | Ruleset
2 | Ruleset
3 | Ruleset
4 | Ruleset
5 | Ruleset
6
Referência:
Netfilter
| Linux
Guru
| Securityfocus