anúncios

segunda-feira, 14 de maio de 2012

Regras IPFW do Firewall para FreeBSD

Para quem não conhece o funcionamento de um firewall, então sugiro uma leitura em: Entendendo o funcionamento de um firewall
O IPFW é o firewall padrão do FreeBSD
Visualizar regras ipfw
Para visualizar as regras em uso pelo firewall basta utilizar o parâmetro show
Ex.:ipfw show
65000 27503703 16411153839 allow ip from any to any
65535 0 0 allow ip from any to any
Adicionar regras
Para adicionar um bloqueio de acesso a um determinado ip basta utilizar
ipfw add NUMERO_REGRA deny all from any to IP_DO_USUARIO
Remover regras
Para remover a regra utilize
ipfw delete NUMERO_REGRA
Para mais detalhes em Documentação FreeBSD
e Handbook FreeBSD Firewall IPFW
Configurando as interfaces e caminho do script firewal
#ee /etc/rc.conf
natd_enable="YES"
natd_interface="em0"
firewall_enable="YES"
firewall_type="/etc/rc.firewall"
Para o correto funcionamento do script abaixo segue: Configurando Gateway e serviço DHCP no FreeBSD

Script Firewall IPFW - FreeBSD
#!/bin/csh
#DECLARACAO DE VARIAVEIS
IFWAN="em0"
IFLAN="em1"
LAN="192.168.1.0/24"
#RESETA O FIREWALL
sleep 60
ipfw -f flush
ipfw add 20 allow ip from any to any
#Checa primeiro as regras dinâmicas ipfw add 1 check-state
# LOOPBACK
ipfw add 100 pass all from any to any via lo0
ipfw add 110 deny all from 127.0.0.0/8 to any
ipfw add 120 deny all from any to 127.0.0.0/8
#FINGERPRINT
ipfw add 130 deny tcp from any to any tcpflags fin,urg,psh in recv $IFLAN
ipfw add 140 deny tcp from any to any tcpflags fin,urg,psh in recv $IFWAN
ipfw add 150 deny tcp from any to any tcpflags
!fin,!syn,!ack,!urg,!psh,!rst in recv $IFLAN
ipfw add 160 deny tcp from any to any tcpflags
!fin,!syn,!ack,!urg,!psh,!rst in recv $IFWAN
ipfw add 170 deny tcp from any to any tcpflags syn,fin,rst,ack in recv $IFLAN
ipfw add 180 deny tcp from any to any tcpflags syn,fin,rst,ack in recv $IFWAN
ipfw add 190 deny tcp from any to any tcpflags fin,!syn,!rst,!ack in recv $IFLAN
ipfw add 200 deny tcp from any to any tcpflags fin,!syn,!rst,!ack in recv $IFWAN
ipfw add 210 deny tcp from any to any tcpflags syn,fin,!rst,!ack in recv $IFLAN
ipfw add 220 deny tcp from any to any tcpflags syn,fin,!rst,!ack in recv $IFWAN
ipfw add 230 deny tcp from any to any tcpflags urg,!syn,!fin,!rst,!ack in recv $IFLAN
ipfw add 240 deny tcp from any to any tcpflags urg,!syn,!fin,!rst,!ack in recv $IFWAN
# BLOQUEIO PARA PORTAS P2P
# ipfw add 250 deny tcp from any 4661-4672,6881-6889,1214,1455,5662,6346,6347,6699,6257,2234,2235,5555,4242,2323 to any in
ipfw add 260 deny udp from any 4661-4672,6881-6889,1214,1455,5662,6346,6347,6699,6257,2234,2235,5555,4242,2323 to any in
ipfw add 270 deny tcp from any to any 4661-4672,6881-6889,1214,1455,5662,6346,6347,6699,6 257,2234,2235,5555,4242,2323 in
ipfw add 280 deny udp from any to any 4661-4672,6881-6889,1214,1455,5662,6346,6347,6699,6 257,2234,2235,5555,4242,2323 in
ipfw add 290 deny tcp from any 8000-8050,1755,554 to any
# VIRUS & WORM ipfw add 300 deny tcp from any to any 135-139,445,593,1024-1030,1080,1363,27665,31335,345 55 in via any
ipfw add 310 deny tcp from any to any 1364,1368,1377,1433,1434,2745,2283,2535,35555,27444 in via any
ipfw add 320 deny tcp from any to any 2745,3127,3128,3410,4444,5554,27374,666,4000,6000,6 006 in via any
ipfw add 330 deny tcp from any to any 8866,9898,10000,10080,12345,17300,65506,16660 in via any
ipfw add 340 deny udp from any to any 135-139,445,4444 in via any
# NATD PARA REDE INTERNA #Não precisa pois no rc.conf esta sendo feito
ipfw add 350 divert 8668 all from any to any via $IFWAN
# CONECTIVIDADE SOCIAL
ipfw add 355 allow tcp from $LAN 1024-65535 to 200.198.194.27 80
ipfw add 356 allow tcp from $LAN 1024-65535 to 200.198.194.19 80
ipfw add 357 allow tcp from $LAN 1024-65535 to 200.201.174.0/24 80
#REDIRECT PARA O SQUID #
ipfw add 360 fwd 127.0.0.1,3128 tcp from $LAN to any 80 via $IFLAN keep-state
#Bloqueia tudo que vem da WAN
ipfw add 380 deny tcp from any to $LAN in via $IFWAN
ipfw add 380 deny udp from any to $LAN in via $IFWAN
#Libera acesso a saida de determinadas portas
#SSH
ipfw add 390 allow tcp from $LAN to any 22 in via $IFLAN keep-state
#CONTROLE DE BANDA
ipfw pipe 600 config bw 160kbit/s
ipfw add 601 pipe 600 all from any to $LAN in via $IFWAN
ipfw add 602 pipe 600 tcp from any to me in via $IFLAN
Feito!

quinta-feira, 10 de maio de 2012

Entendendo o funcionamento de um firewall e regras IPtables

Introdução

O Firewall tem o objetivo proteger o servidor e a rede local contra acessos indesejados, tráfego indesejado, proteger serviços que estejam rodando no servidor e bloquear a passagem de coisas que você não deseja receber (como conexões vindas da Internet para sua rede local, evitando acesso aos dados corporativos de uma empresa ou a seus dados pessoais). A implementação de um bom firewall dependerá da experiência, conhecimentos de redes (protocolos, roteamento, interfaces, endereçamento, masquerade, etc), da rede local, e sistema em geral do Administrador de redes, a segurança de sua rede e seus dados dependem da escolha do profissional correto, que entenda a fundo o TCP/IP, roteamento, protocolos, serviços e outros assuntos ligados a rede. No kernel do Linux 2.4, foi introduzido o programa IPtables (também chamado de Netfilter) que substitui o ipchains dos kernels da série 2.2. Este novo programa tem como vantagem ser muito estável (assim como o ipchains e ipfwadm), confiável, permite muita flexibilidade na programação de regras pelo administrador do sistema, mais opções disponíveis ao administrador para controle de tráfego, controle independente do tráfego da rede local/entre redes/interfaces devido a nova organização das etapas de roteamento de pacotes.

O IPtables é um firewall em nível de pacotes e funciona baseado no endereço/porta de origem/destino do pacote, prioridade, etc. Ele funciona através da comparação de regras para saber se um pacote tem ou não permissão para passar. Em firewalls mais restritivos, o pacote é bloqueado e registrado para que o administrador do sistema tenha conhecimento sobre o que está acontecendo em seu servidor. Também pode ser usado para modificar e monitorar o tráfego da rede, fazer NAT (masquerading, source nat, destination nat), redirecionamento de pacotes, marcação de pacotes, modificar a prioridade de pacotes que chegam/saem do seu servidor, contagem de bytes, dividir tráfego entre máquinas, criar proteções anti-spoofing, contra syn flood, DoS, etc. O tráfego vindo de máquinas desconhecidas da rede pode também ser bloqueado/registrado através do uso de simples regras. As possibilidades oferecidas pelos recursos de filtragem iptables como todas as ferramentas UNIX maduras dependem de sua imaginação, pois ele garante uma grande flexibilidade na manipulação das regras de acesso ao sistema, precisando apenas conhecer quais interfaces o sistema possui, o que deseja bloquear, o que tem acesso garantido, quais serviços devem estar acessíveis para cada rede, e iniciar a construção de seu firewall.

Um firewall não funciona de forma automática (instalando e esperar que ele faça as coisas por você), é necessário pelo menos conhecimentos básicos de rede TCP/IP, roteamento e portas para criar as regras que farão a segurança de seu servidor. A segurança do servidor depende do controle das regras que serão criadas por você, as falhas humanas são garantia de mais de 95% de sucesso nas invasões.

Enfim o IPtables é um firewall que agradará tanto a pessoas que desejam uma segurança básica em sua rede, quanto administradores de sistemas/redes que querem ter um controle minucioso sobre o tráfego que passam entre suas interfaces de rede (controlando tudo o que pode passar de uma rede a outra), controlar o uso de tráfego, monitoração, etc.


Características do Netfilter/Iptables
Segue abaixo algumas características do Firewall Netfilter/IPtables
  • Especificação de portas/endereço de origem/destino
  • Suporte a protocolos TCP/UDP/ICMP (incluindo tipos de mensagens icmp)
  • Suporte a interfaces de origem/destino de pacotes
  • Manipula serviços de proxy na rede
  • Tratamento de tráfego dividido em chains para melhor controle do tráfego que entra/sai da máquina e tráfego redirecionado.
  • Permite um número ilimitado de regras por chain
  • Muito rápido, estável e seguro
  • Possui mecanismos internos para rejeitar automaticamente pacotes duvidosos ou mal formados.
  • Suporte a módulos externos para expansão das funcionalidades padrões oferecidas pelo código de firewall
  • Suporte completo a roteamento de pacotes, tratadas em uma área diferente de tráfegos padrões.
  • Suporte a especificação de tipo de serviço para priorizar o tráfego de determinados tipos de pacotes.
  • Permite especificar exceções para as regras ou parte das regras
  • Suporte a detecção de fragmentos
  • Permite enviar alertas personalizados ao syslog sobre o tráfego aceito/bloqueado.
  • Redirecionamento de portas
  • Masquerading
  • Suporte a SNAT (modificação do endereço de origem das máquinas para um único IP ou faixa de IP's).
  • Suporte a DNAT (modificação do endereço de destino das máquinas para um único IP ou fixa de IP's)
  • Contagem de pacotes que atravessaram uma interface/regra
  • Limitação de passagem de pacotes/conferência de regra (muito útil para criar proteções contra, syn flood, ping flood, DoS, etc).

Ficha técnica
Pacote: IPtables
  • iptables - Sistema de controle principal para protocolos ipv4
  • ip6tables - Sistema de controle principal para protocolos ipv6
  • iptables-save - Salva as regras atuais em um arquivo especificado como argumento. Este utilitário pode ser dispensado por um shell script contendo as regras executado na inicialização da máquina.
  • iptables-restore - Restaura regras salvas pelo utilitário iptables-save.

Entendendo as regras do IPtables
Agora iremos entender a estrutura das regras iptables:
Tabela FILTER
É a tabela responsável pelos filtros dos pacotes. Ela se divide em 3 chains padrão.
INPUT
A chain INPUT é responsável por filtrar todo o tráfego que entra no firewall.
FORWARD
A chain FORWARD é responsável por filtrar todo o tráfego que passará pelo firewall, ou seja, todos os pacotes onde o NAT será aplicado.
OUTPUT
A chain OUTPUT é responsável por filtrar todo o tráfego que sairá pelo firewall.
Tabela NAT
É a tabela responsável pelo redirecionamento de pacotes. Ela também se divide em 3 chains.
PREROUTING
A chain PREROUTING é utilizada para alterar pacotes antes que os mesmos sejam roteados.
POSTROUTING A chain POSTROUTING é utilizada pala alterar pacotes que já sofreram roteamento.
Tabela MANGLE
É a tabela responsável pela alteração de prioridade na entrada e saída de pacotes, baseando-se no tipo de serviço (TOS). É dividida em 2 chains.
Comandos e ações
Comandos
-I
Insere uma regra no início da lista.
-A
Adiciona uma regra no fim da lista.
-D
Apaga uma regra da lista.
-L
Lista as regras da lista.
-P
Altera a política padrão das Chains.
-F
Remove todas as regras da lista.
-R
Substitui uma regra da lista por outra.
-N
Cria uma nova chain na tabela especificada.
-E
Renomeia uma chain que foi criada com o comando -N.
-X
Apaga uma chain criada com o comando -N.
Ações
-p
Especifica o protocolo ao qual a regra se aplicará. Também podemos utilizar o valor numérico que referencia o protocolo em /etc/protocol. Ex: -p gre ; -p 47
-i
Especifica a interface de entrada utilizada pela regra. Pode ser utilizada apenas com as chains INPUT e FORWARD. EX: -i eth0 ou -i eth+ para especificar todas as entradas.
-o
Especifica a interface de saída utilizada pela regra. Pode ser utilizada apenas com as chains FORWARD e OUTPUT. EX: -o eth0
-s
Especifica o endereço ou a rede de origem utilizada pela regra. Se não especificarmos a máscara de rede, o iptables utiliza a máscara padrão da classe C 255.255.255.0. Também podemos utilizar nomes DNS. Ex: -s 192.168.1.2; -s 192.168.1.0/255.255.255.0 domínio: exemplo.com.br
-d
Especifica o endereço ou a rede de destino utilizado pela regra. Se utiliza da mesma maneira que a ação -s.
!
Utilizado para especificar exceções. Ex: -s ! 192.168.1.6 # A regra se aplicaria a todos os ips que tivessem origem diferente de 192.168.1.6
-j
Utilizado para aplicar um alvo a regra, os mesmos podem ser ACCEPT, DROP, REJECT e LOG. Ex: -j ACCEPT
--sport
Especifica a porta de origem utilizada. Só podemos aplicar a ação quando estivermos tratando dos protocolos tcp e udp. Ex: -p tcp --sport 25
--dport
Especifica a porta de destino utilizada. Funciona da mesma forma que a ação --sport. Ex: -p tcp --dport 25.
Alvos e módulos
Alvos
Quando temos um pacote que combinou com todas as opções da regra, necessitamos especificar um destino para o mesmo, como vimos anteriormente podemos especificar os seguintes alvos / destinos:
ACCEPT
Aceita a entrada ou passagem do pacote.
DROP
Descarta o pacote.

REJECT
Descarta o pacote, porém diferente de DROP, ele retorna uma mensagem ao emissor informando o que houve com o pacote.
LOG
Gera um log no sistema.
RETURN
Retorna o processamento da chain anterior.
QUEUE
Encarrega um programa de administrar o fluxo atribuído ao mesmo.
SNAT
Altera o endereço de origem do pacote.
DNAT
Altera o endereço de destino do pacote.
REDIRECT
Redireciona a porta do pacote juntamente com a opção --to-port.
TOS
Prioriza a entrada e saída de pacotes baseado em seu tipo de serviço.
Podemos especificar em TOS os seguintes valores:
16 ou 0x10 Espera mínima
8 ou 0x08 Máximo processamento
4 ou 0x04 Máxima confiança
2 ou 0x02 Custo mínimo
0 ou 0x00 Prioridade normal
Módulos
A utilização de módulos junto com o iptables é definida através da opção -m. Podemos utilizar os seguintes módulos:
limit Impõe um limite de vezes que a regra poderá ser executada.
state Utiliza o estado da conexão, que pode ser NEW, ESTABLISHED, RELATED, INVALID.
mac Permite a utilização do endereço mac nas regras.
multiport Permite a utilização de até 15 portas em uma única regra em conjunto com o --dport. string Verifica o conteúdo do pacote para aplicar a regra.
owner Verifica o usuário que criou o pacote.

Considerações finais
Para finalizar, temos que esclarecer algumas coisas sobre firewall do sistema GNU/Linux, que na realidade se chama Netfilter, e o IPtables são comandos interpretados pelo Netfilter no Kernel, por default já vem habilitado na maioria das distros.
Script Firewall com regras IPtables
rc.firewall.sh
Feito!

quarta-feira, 9 de maio de 2012

Acessando servidor via SSH no Firefox

Sim, com um add-ons desenvolvido pelo Mime Cuvalo, você pode acessar servidores Linux direto do navegador Firefox, a partir da versão 4.
O FireSSH foi escrito integralmente em JavaScript. Se quiser acompanhar os releases em: Add-ons.
Como adicionar add-ons no Firefox e usar?
Acesse: FireSSH
Depois de adicionado no navegador, basta digitar no browser: ssh://ip-servidor:porta
Após colocar o endereço IP ou nome de domínio do servidor, irá aparecer uma tela solicitando usuário e senha para autenticação.
Veja os screenshoot abaixo:
Acessando e tela de autenticação

Logado no servidor via SSH no Firefox
Feito!