Servidor Firewall Seguro

13 13UTC Outubro 13UTC 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 10UTC Outubro 10UTC 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/

Instalando um servidor de Internet Básico

22 22UTC Dezembro 22UTC 2008

Instalando e configurando um servidor de Internet Simples

Bom dia, após vários meses sem postar artigos e dicas, devido a alguns problemas de conexão e até mesmo de mudanças de cidade, agora estou de volta, postando alguns novos artigos para facilitar a vida dos usuários de linux.
Neste artigo iremos instalar um servidor de Internet Simples, utilizando Debian GNU/Linux ou qualquer outra distro baseada em Debian como o Ubuntu, iremos utilizar os seguinte softwares para este servidor:
-> Iptables (Firewall)
-> Squid (Proxy)

Vamos começar a instalação….

Abra o shell e logue como root

Instalando os programas necessários

apt-get -y install squid sarg apache2

após o termino da instalação iremos fazer as configurações necessárias no servidor.

iremos editar o arquivo de configuração do Squid:

vi /etc/squid/squid.conf

na linha http_port 3128 adicione na frente a palavra transparent

http_port 3128 transparent

abaixo da linha no_cache deny QUERY adicione o seguinte comando:

error_directory /usr/share/squid/errors/Portuguese

esse comando faz com que os erros que o squid vai apresentar seja em portugues

na linha acl all src 0.0.0.0/0.0.0.0 você tera que por a faixa de IP que o proxy irá trabalhar, caso você deixe todos como default qualquer faixa de IP que usar o servidor como proxy irá funcionar

exemplos: 192.168.1.0/255.255.255.0

após essas linhas deixe irá mostrar todas as portas que o SQUID estará aceitando para navegação, não iremos mexer nelas, pois por padrão já esta todas as portas necessárias para navegação, após a linha
acl CONNECT method CONNECT apague tudo que iremos fazer algunas configurações diferentes……..

Adicionas seguintes linhas:

#Arquivo com extensões bloqueadas
acl extentions url_regex “/etc/squid/extentions”
#Arquivo com URLS bloqueadas (exemplo computa)
acl urls url_regex “/etc/squid/urls”

http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports

http_access deny all extentions
http_access deny all urls

Após estas linhas adicione a linha com o nome do seu servidor que será visivel para os usuários, visible_hostname servidor no meu caso eu coloquei o nome dele como servidor, mas pode ser trocado por qualquer outro nome.

Feito isso o nosso squid já esta praticamente pronto, para sair e salver pressione a tecla ESC depois :wq! e pressione ENTER, feito isso vamos criar 2 arquivos que irão conter as extensões e URL’s que serão bloqueados:

extentions (Neste arquivo iremos bloquear download de arquivos por estensões, basta coloca-las aqui que automaticamente o proxy irá bloquear)
urls (adicone as urls dos sites que não poderão ser abertos, adicione sem o www. pois assim o proxy irá bloquear qualquer site que tem o texto no link. Ex.: orkut.com)

feito isso teremos que configurar algumas regras de iptables para que o firewall redirecione as conexões para os cliente, para isso teremos que ter 2 placas de rede, eth0 e eth1, neste caso a minha conexão com a internet
sera feita pela eth0 e a conexão local sera feita pela eth1, teremos que criar 1 arquivo chemado firewall.sh

vi /opt/firewall.sh

adicione as seguintes linhas dentro desses arquivos:

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE
iptables -t nat -A PREROUTING -i eth1 -p tcp –dport 80 -j REDIRECT –to-port 3128
echo “1″ >/proc/sys/net/ipv4/ip_forward

feche e salve o arquivo e feche, agora teremos que adicionar esta script do firewall automaticamente todas as vezes que o servidor for iniciado, para isso devemos editar o arquivo /etc/rc.local

vi /etc/rc.local

agora adicine a seguinte linha:

cd /opt
./firewall.sh

salve e feche o arquivo, agora temos que dar permissão de execução para o arquivo com o seguinte comando:

chmod +x /opt/firewall.sh

feito isso reinicie o servidor com algum dos seguintes comandos:

init 6 ou shutdown -r now

qualquer um dos 2 comandos irá funcinar, use o que você axar conveniente, após o servidor ser reiniciado, basta configurar os IPS nos clientes, colocando o IP da eth1 do servidor como GATEWAY nos clientes,
não esquecendo que será necessário colocar o DNS primario nos cliente para que os terminais naveguem normalmente, caso não coloque o DNS os clientes não irão navegar.
O DNS varia de acordo com o seu provedor, portanto você tera que entrar em contato como seu provedor para pegar o DNS dele.

Para testar, entre em algum site bloqueado e tente fazer download de algum arquivo com a estenção bloqueada.

Comandos do Shell

24 24UTC Fevereiro 24UTC 2008

Embora hoje em dia haja os gerenciadores de janelas para Linux, ele ainda é muito forte e muito utilizado em modo texto, ou Shell. Normalmente esse uso é feito por pessoas que ja ultilizavam esse tipo de recurso ou para montagens de servidores, por exigir muito pouco do computador.
O que você faria com um Pentium de 100 MHz, 8MB de RAM, 1GB de HD, um teclado e um monitor???Se você pensou “NADA” você pensou completamente errado, com um computador deste porte, seria possivel montar um Servidor Linux de pequeno porte, rodando praticamente qualquer distribuição Linux em modo texto. Isso que é interessante, pois mesmo com todos os avanços visuais que o linux possui como Compiz-fusion, XGL……., ele ainda mantém suas raizes.

Este artigo tem o intuito de apresentar alguns comandos nativos do Shell Bash e mostrar que trabalhar em modo texto não é tão assustador como se parece.

Vamos lá…….

cd => serve para acessar diretórios (cd /var => acessa o diretório var)

cd/ => volta ao diretório raiz

cd .. => volta do diretório anterior (se vc esta no diretório /home/william/teste e der o comando cd .. vc irá voltar um diretório atrás, ou seja, irá para o doretório /home/william)

startx => abre a interface gráfica

ls => serve para listar o conteúdo de um diretório

man => abreviação de Manual, ele comando mostra uma explicação de um determinado comando, exibindo suas sintaxe, opções entre outros recursos. Sintaxe: man <comando>

info => abraviação de Informação, esse comando mostra informações mais detalhadas sobre um determinado comando, mas a grande diferença entre o man e o info é que o segundo traz essas informações em uma linguagem mais clara, simples e aborda as opções mais comuns. Sintaxe: info <comando>

| => o Pipe direciona a saída de um comando para o outro, Sintaxe: <comando> | <comando>

more => esse comando pausa a saída de algum outro comando, ou seja, se vc usar por exemplo ls, ele irá listas o conteúdo de um diretório completo, de uma só vez, impedindo você de ler, se vc user o more ele irá exibir esse conteúdo pausadamente. Sintaxe: <comando> | more

cp => esse comando copia um arquivo ou diretório para algum loca no HD, disco removível….. Sintaxe: cp <arquivo/diretório> <destino>

mv => este comando possui duas funções, a primeira delas é mover um arquivo/diretório de seu local de origem para o seu local de destino como para renomear um arquivo/dirtório. Sintaxe: mv /home/william/Documento.odt /home/william/textos/ (aqui ele irá mover o arquivo Documento.odt para a pasta textos), mv foto1.png Amigos.png (aqui ele renomeia o arquivo foto1.png para Amigos.png).

rm => este comando deleta arquivos, para deletar diretórios é necessário que vc use a opção -r logo após o comando. Sintaxe: rm <arquivo> (apaga um arquivo qualquer>, rm -r <diretório> (apaga um diretório, se esse diretório possuir arquivos dentro, será necessário que se confirme a exclusão de cada um desses arquivos), rm -rf <diretŕoio> (esse comando apaga o diretório sem a necessidade de se confirmar a exclusão do mesmo). Obs.: SÓ USE ESSE COMANDO SE VOCÊ TIVER CERTEZA DO QUE ESTA FAZENDO

Bom, esses são alguns dos comandos mais utilizados no Shell, ainda existam muuuuuuitos outros, espero que esses possam ser muito úteis para vocês.

Obs.: Não esqueçam que o Linux é case sensitive, ou seja, ele diferência letras MAIÚSCULAS de minúsculas, sendo assim Ls é diferente de ls, isso é um dos principais motivos que as pessoas acham que Linux é dificil!!!!
Obrigado pela visita!!!!!

Estrutura de Diretórios no Linux

19 19UTC Fevereiro 19UTC 2008

A primeira diferença que um usuário que esta migrando do Windows para o Linux nota é uma grande diferença na estrutura de diretórios. Normalmente no Windows os arquivos de configuração do sistema e arquivos de configuração da maioria dos programas ficam localizados em 2 pastas, são elas: Windows e Arquivos de Programas, com isso vc pode cirar e organizar as suas pastas da meneira que quiser, no Windos os dispositivos de armazenamento e dispositivos ópticos são organizados em letras, A:, C:, D:, essas letras vão mudando conforme o número de unidades que o computador possui. No Linux, a história é um pouco diferente, a começar que as unidades de armazenamento não aparecem identificadas com letras, mas sim em pastas, que vão mudar o nome de acordo com o hardware, isso será mostrado a seguir:

Diretório Descrição
—————————————————————-
/bin Armazena executáveis de programas e comandos básicos do prompt;

/usr Lê-se USER, este é o diretório com o maior número de arquivos em qualquer distribuição Linux, onde é armazenado os executáveis e as bibliotecas dos principais programas;

/usr/bin bin significa binário, essa pasta armazena a maioria dos programas que estão instalados no seu S.O., em uma instalação padrão, o programa será instalado nessa pasta;

/usr/lib Aqui é armazenado as bibliotecas dos programas, essas bibliotecas tem função parecidas com os arquivos .DLL do Windows;

/boot Esta pasta armazena o Kernel e os arquivos usados pelo gerenciodor de boot (normalmente o LILO ou GRUB), esses arquivos são carregados na fase inicial do boot;

/dev dev eh a abreviação de devices, todos os seus arquivos não são armazenados em HD, mas sim links para dispositivos de hardware que o seu computador contém. Por exemplo, arquivos que são grvados em /dev/dsp são reproduzidos pela placa de som, /dev/ttyS0 são informações enviadas pelo mouse. Este tipo de organização facilita a vida de programadores, que não precisam de nenhum comando para enviar informações do seus software para qualquer hardware do computador, basta coloca-l no dispositivo desejado;

/etc Armazena os arquivos de configuração do sistema, esses arquivos são organizados de forma que se possa edita-los manualmente, ao contrário dos registros do Windows, que não se sabe o que está acontecendo em cada um deles. Os nomes desses arquivos é formado pelo nome do programa seguido normalmente da extensão .conf, por exemblo, o arquivo de configuração do servidor de dados Samba, esta localizado em /etc/samba/smb.conf;

/mnt
mnt é a abreviação de mount, ele recebe esse nome por servir de ponto de montagem dos dispositivos de armazenamento do computador;

/media Esta pasta em algumas distribuições como Ubuntu, Debian, Kurumin….. é utilizada de ponto de montagem temporário dos dispositivos de armazenamento, lembrando que pode se montar os dispositivos em qualquer pasta, desde que você tenha permissão para acessa-las e para montar esse dispositivo;

/opt Esta pasta é utilizada normalmente para instalar programas que o usuário instala “manualmente”, ou seja, quando se deseja instalar um programa com a extensão .bin, ele é copiado para esta pasta e é executado, ficando armazenado nela;

/home Local onde fica armazenada as pastas dos usuários, cada pasta que se encontra dentro desse diretório é um usuário que esta cadastrado no sistema, lembrando que se um novo usuário for criado, e a sua pasta não for criada dentro do diretório /home, ele vai ser impedido de fazer login;

Bom, essa é uma breve descrição da estrutura de diretórios do Linux, lembrando que um usuário comum só tem permissão de gravação e “exclusão” dentro da sua pasta Home, fora dela ele só terá acesso as pasta que o root (administrador do sistema) permitir, lembrando que o root tem acesso total a qualquer pasta do sistema, lembrando também que p Linux é case sensitive, ou seja, ele faz desntinção entre letras maiúsculas e minúsculas, sendo ls diferente de Ls, isso causa uma grande confusão nos novos usuários.

Sejam bem vindos

15 15UTC Fevereiro 15UTC 2008

Sejam muito bem vindos ao mais novo Blog sobre Linux e Java. Este Blog tem o intuito de disponibilizar dicas, tutoriais, artigos e notícias sobre Linux, Java e todo o tipo de Software Livre.Espero que este blog seja útil como muitos outros que tratam deste assunto.Desde já agradeço a visita!!!


——————————————————————————————

www.ubuntu-br.org

www.ubuntu-br.com/comece

www.ubuntu-br.org/comunidade

——————————————————————————————

java.sun.com

www.java.net

www.javanoroeste.com.br

www.guj.com.br

——————————————————————————————