Servidor Firewall Seguro
13 de outubro de 2009
Firewall Iptables
O Firewall é um programa que como objetivo proteger a máquina contra acessos indesejados, tráfego indesejado, proteger serviços que estejam rodando na máquina e bloquear a passagem de coisas que você não deseja receber (como conexões vindas da Internet para sua segura rede local, evitando acesso aos dados corporativos de uma empresa ou a seus dados pessoais). No kernel do Linux 2.4, foi introduzido o firewall iptables (também chamado de netfilter) que substitui o ipchains dos kernels da série 2.2. Este novo firewall tem como vantagem ser muito estável (assim como o ipchains e ipfwadm), confiável, permitir 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 sistema.
Montando um firewall seguro
1 – Crie um arquivo chamado firewall.sh onde desejar, por padrão eu estou acostumado a criar em /opt
vi /opt/firewall.sh
2 – Insira as seguintes linhas no seu firewall:
#!/bin/bash
#Variáveis de Interfaces de rede
LAN=eth0
WAN=eth1
REDE=”192.168.0.0/24″
#Variáveis de Maquinas locais
DIRETOR_IP=192.168.0.126
DIRETOR_MAC=00:22:64:CB:1C:24
USUARIO_IP=192.168.0.5
USUARIO=00:14:2A:27:F9:CE
#Limpa as regras (Limpa todas as regras de iptables existentes no seu firewall)
iptables -F
iptables -F INPUT
iptables -F OUTPUT
iptables -F FORWARD
iptables -t mangle -F
iptables -t nat -F
iptables -X
#Define politica interna (Aqui ele define qual a política inicial do seu firewall, por padrão
#entrada de pacotes e comunicação entre as placas de rede são bloqueadas e saida do servidor liberado
#Embora a saira seja liberada os clientes deste servidor não poderão fazer nenhum tipo de navegação devido
#a comunicação entre as placas de rede estarem desablitadas
iptables -P INPUT DROP #Entrada
iptables -P OUTPUT ACCEPT #Saida
iptables -P FORWARD DROP #Comunitação entre placas
#Ativando Bloqueios
#Ativa bloqueio contra ping da morte
echo “0″ > /proc/sys/net/ipv4/icmp_echo_ignore_all
iptables -N PING-MORTE
iptables -A INPUT -p icmp –icmp-type echo-request -j PING-MORTE
iptables -A PING-MORTE -m limit –limit 1/s –limit-burst 4 -j RETURN
iptables -A PING-MORTE -j DROP
#Ativando bloqueio syn-flood
echo “0″ > /proc/sys/net/ipv4/tcp_syncookies
iptables -N syn-flood
iptables -A INPUT -i $WAN -p tcp –syn -j syn-flood
iptables -A syn-flood -m limit –limit 1/s –limit-burst 4 -j RETURN
iptables -A syn-flood -j DROP
#Ativando bloqueio SSH-Brut-Force
iptables -N SSH-BRUT-FORCE
iptables -A INPUT -i $WAN -p tcp –dport 22 -j SSH-BRUT-FORCE
iptables -A SSH-BRUT-FORCE -m limit –limit 1/s –limit-burst 4 -j RETURN
iptables -A SSH-BRUT-FORCE -j DROP
#Ativando bloqueio Anti-spoofings
for i in /proc/sys/net/ipv4/conf/*/rp_filter; do
echo 1 >$i
done
#Liberações
#Liberando acesso total a internet para o Diretor
iptables -A INPUT -s $DIRETOR_IP -m mac –mac-source $DIRETOR_MAC -j ACCEPT
iptables -A FORWARD -s $DIRETOR_IP -m mac –mac-source $DIRETOR_MAC -j ACCEPT
#Liberando acesso a internet via Proxy Squid
#Você pode liberar qualquer porta de acesso para esse usuário utilizando essas linhas
#podendo também liberar mais de uma porta nesta mesma linha, acrescentando o comando
#-m multport após a palavra tcp, e separando as portas por linhas
#Ex. iptables -A INPUT -p tcp -m multiport –dport 3128,5900 -s $USUARIO_IP -m mac –mac-source $USUARIO_MAC -j ACCEPT
iptables -A INPUT -p tcp –dport 3128 -s $USUARIO_IP -m mac –mac-source $USUARIO_MAC -j ACCEPT
iptables -A FORWARD -p tcp –dport 3128 -s $USUARIO_IP -m mac –mac-source $USUARIO_MAC -j ACCEPT
#Liberando DNS
#Essas linhas irão liberar o DNS tanto se o servidor for local ou remoto
iptables -A INPUT -p udp -s $REDE –dport 53 -j ACCEPT
iptables -A FORWARD -p udp -s $REDE –dport 53 -j ACCEPT
iptables -A INPUT -p tcp -s $REDE –dport 53 -j ACCEPT
iptables -A FORWARD -p tcp -s $REDE –dport 53 -j ACCEPT
#Liberando SAMBA, caso o samba for instalado no mesmo servidor de firewall
iptables -A INPUT -i $LAN -s $REDE -p tcp –dport 137:139 -j ACCEPT
iptables -A INPUT -i $LAN -s $REDE -p udp –dport 137:139 -j ACCEPT
#Liberando Acesso FTP, ser ser autenticado pelo squid
iptables -A INPUT -p tcp –dport 21 -s $REDE -d servidor.com.br -j ACCEPT
iptables -A FORWARD -p tcp –dport 21 -s $REDE -d servidor.com.br -j ACCEPT
#Liberando SSH para ser acessado de fora da empresa
iptables -A INPUT -p tcp –dport 22 -i $WAN -j ACCEPT
#Ativando ICMP para estabelecer conexao (PING)
iptables -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state –state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p icmp -o $WAN -j ACCEPT
iptables -A INPUT -p icmp -j ACCEPT
#Compartilhando internet
iptables -t nat -A POSTROUTING -o $WAN -j MASQUERADE
echo “1″ > /proc/sys/net/ipv4/ip_forward
3 – De permissão de execução para este arquivo
chmod +x /opt/firewall.sh
4 – Adicione a linha onde esse arquivo se encontra dentro do /etc/rc.local
echo “/opt/firewall.sh” >> /etc/rc.local
5 – Feito isso seu firewall já esta funcionando com as regras acima.
Obs.1: Lembrando que todos esses comandos precisam ser executados como ROOT ou como SUDO, caso contrário não irá funcionar
Obs.2: Você pode adicionar quantas variáveis quiser e utilizalas sempre que achar necessário.
Instalando o PostgreSQL no Ubuntu/Debian
10 de outubro de 2009
Um breve histórico
Hoje o PostgreSQL é o Banco de Dados de código aberto mais avançado do mundo, seu desenvolvimento teve início em 1986, mas sua primeira versão funcional foi lançada em 1988, sendo liberada para um pequeno grupo de usuarios, em junho de 1990 a versão 2 teve suas regras reescritas, na versão 3 liberada em 1991, o sistema de regras foi reescrito novamente, mas também foram adicionados suporte para múltiplos gerenciadores de armazenamento e um melhorado motor de consultas. Já em 1993, o Postgres havia crescido imensamente em popularidade e possuia uma grande demanda por suporte e por novas funcinalidades. Após a versão 4, a qual era uma simples versão de limpexa, o projeto foi oficialmente abandonado pela Universidade de Berkeley.
Entretando, devido ao fato do seu código fonte estar sob uma licença BSD, o seu desenvolvimento foi continuado. Em 1994, dois estudantes de Berkeley, Andrew Yu e Jolly Chen, adicionaram um interpretador SQL para substituir a linguagem QUEL, e o projeto foi renomeado para Postgres95. Com a divulgação do seu código fonte pela internet, Postgres95 iniciou uma nova vida como software open source.
A versão 8.0 foi lançada em janeiro de 2005 e entre outras novidades, foi a primeira a ter suporte nativo para Microsoft Windows (tradicionalmente, o PostgreSQL só rodava de forma nativa em sistemas Unix e, em sistemas Windows – através da biblioteca Cygwin). Dentre as muitas novidades da versão 8.x, pode-se destacar o suporte a tablespaces, savepoints, point-in-time recovery, roles e Two-Phase Commit (2PC). Em fevereiro de 2008 foi lançada a versão mais recente: 8.3.
Instalando
1 – Entre no Shell (Console) faça login como root (Debian) ou utilize o sudo (Ubuntu) e faça os comandos abaixo:
sudo apt-get install postgresql-8.3 postgresql-client-8.3 pgadmin3 pgadmin3-data postgresql-client-common postgresql-common postgresql-contrib-8.3
2 – Após instalado, temos que colocar uma senha para o usuário administrador do banco de dados, mas antes temos que editar um arquivo para fazer com que possamos logar sem senha, portanto faça:
sudo vi /etc/postgresql/8.3/main/pg_hba.conf
localize a linha
local all postgres ident sameuser
e a substitua a palavra ident sameuser por trust, feito isso salve o arquivo
3 – Reiniciando o banco de dados
sudo /etc/init.d/postgresql-8.3 restart
4 – digite o seguinte comando
sudo su postgres -c psql postgres
feito isso ele irá abrir o consele de administração do postgresql
5 – Digite o seguinte comando
ALTER USER postgres WITH PASSWORD ‘password’;
Substitua a palavra password pela senha do usuário, feito isso digite \q para voltar para o shell
6 – Reinicie o postgresql novamente (Passo 3)
7 – Após colocar a senha para o postgres, edite novamente o arquivo pg_hba.conf, localize a segiunte linha:
local all postgres trust
Substitua a palavra trust por ident sameuser reinicie o PostgreSQL, feito isso ele já está pronto para ser utilizado, lembrando que por default as configurações do postgresql só irão aceitar conexões vindas da própria máquina, no próximo Post iremos saber como configurar o PostgreSQL para aceitar conexões de outras máquinas.
Lembrando que, se você estiver utilizando Debian e estiver logado como root não é necessário colocar o comando sudo antes de cada linha local all postgres trust para local all postges ident sameuser
Fontes:
http://pt.wikipedia.org/wiki/PostgreSQL#Hist.C3.B3rico
http://marciojose.blogspot.com/2009/03/postgres-ubuntu-intrepid-ibex.html
http://jmmwrite.wordpress.com/2008/05/08/instalando-e-configurando-o-postgresql-83-no-ubuntu/