Introdução:Acho que todos que estão aqui nesse fórum sabem o que é um Firewall, mas acho que nem todos conhecem firewall de Linux.
Os kerneis até versão 2.2 usam o IPChains, e apartir do kernel 2.4 o Firewall usado é o IPTables. Como o IPChains não é mais muito usado, vou falar sobre o IPTables.
O IPTables é um firewall SPF (Statefull Packet Filter, ou ainda, Filtro de Pacote por Estado), é um dos mais poderosos tipos de firewall, pois ele segue regras dadas pelo Admin, e ainda verifica o estado (Ex: Vê se o pacote foi solicitado).
O IPTables possue três tabelas, a primeira é a "filter", ela é a tabela defaut, controla o tráfego de dados sem ocorrencia de NAT. Aceita as Chains INPUT, OUTOUT e FOWARD. A segunda é a NAT, ela é utilizado quando se tem NAT (Ex: Um pacote sai da rede interna pra interet), aceita as Chains PREROUTING, OUTPOST e POSTROUTING. A terceira, última, e menos usada é a Mangle, ela trabalha basicamente com marcação de pacotes QoS.
Vou explicar aqui as chains:
QuoteINPUT: Verifica os pacotes que entram na rede pelo Firewall.
OUTPUT: Verifica os pacotes que saem da rede, e passando pelo Firewall.
FORWARD: Verifica pacotes que entram entram e saem do firewall na rede interna.
PREROUTING: Verifica pacotes que estão entrando através de NAT. Faz ações de NAT com o endereço de destino DNAT.
POSTROUTING: Verifica os pacotes que estão saindo através de NAT. Faz ações de NAT com o endereço DNAT.
Agora vamos ver um pouco de regras de filtragem.
Regras de Filtragem:As regras (rules) de fitragem, geralmente, são compostas assim:
#iptables [-t tabela] [opção] [chain] [dados] -j [ação]
Exemplo:
#iptables -A FORWARD -d 192.168.1.1 -j DROP
A linha acima determina que todos os pacotes destinados à máquina 192.168.1.1 devem ser descartados. No caso:
tabela: filter (é a default)
opção: -A
chain: FORWARD
dados: -d 192.168.1.1
ação: DROP
Existem outras possibilidades que fogem à sintaxe mostrada anteriormente. É o caso do comando #iptables -L, que mostra as regras em vigor.
Opções:As principais opções são:
-P --> Policy (política). Altera a política da chain. A política inicial de cada chain é ACCEPT. Isso faz com que o filtro, inicialmente, aceite qualquer INPUT, OUTPUT ou FORWARD. A política pode ser alterada para DROP, que irá negar o serviço da chain, até que uma opção -A entre em vigor. O -P não aceita REJECT ou LOG. Exemplos:
#iptables -P FORWARD DROP
#iptables -P INPUT ACCEPT
-A --> Append (anexar). Acresce uma nova regra à chain. Tem prioridade sobre o -P. Geralmente, como buscamos segurança máxima, colocamos todas as chains em política DROP, com o -P e, depois, abrimos o que é necessário com o -A. Exemplos:
#iptables -A OUTPUT -d 172.20.5.10 -j ACCEPT
#iptables -A FORWARD -s 10.0.0.1 -j DROP
#iptables -A FORWARD -d www.chat.com.br (http://www.chat.com.br) -j DROP
-D --> Delete (apagar). Apaga uma regra. A regra deve ser escrita novamente, trocando-se a opção para -D. Exemplos:
Para apagar as regras anteriores, usa-se:
#iptables -D OUTPUT -d 172.20.5.10 -j ACCEPT
#iptables -D FORWARD -s 10.0.0.1 -j DROP
#iptables -D FORWARD -d www.chat.com.br (http://www.chat.com.br) -j DROP
Também é possível apagar a regra pelo seu número de ordem. Pode-se utilizar o -L para verificar o número de ordem. Verificado esse número, basta citar a chain e o número de ordem. Exemplo:
#iptables -D FORWARD 4
Isso deleta a regra número 4 de forward.
-L --> List (listar). Lista as regras existentes. Exemplos:
#iptables -L
#iptables -L FORWARD
-F --> Flush (esvaziar). Remove todas as regras existentes. No entanto, não altera a política (-P). Exemplos:
#iptables -F
#iptables -F FORWARD
Dados:Os elementos mais comuns para se gerar dados são os seguintes:
-s --> Source (origem). Estabelece a origem do pacote. Geralmente é uma combinação do endereço IP com a máscara de sub-rede, separados por uma barra. Exemplo:
-s 172.20.0.0/255.255.0.0
No caso, vimos a sub-rede 172.20.0.0. Para hosts, a máscara sempre será 255.255.255.255. Exemplo:
-s 172.20.5.10/255.255.255.255
Agora vimos o host 172.20.5.10. Ainda no caso de hosts, a máscara pode ser omitida. Caso isso ocorra, o iptables considera a máscara como 255.255.255.255. Exemplo:
-s 172.20.5.10
Isso corresponde ao host 172.20.5.10. Há um recurso para simplificar a utilização da máscara de sub-rede. Basta utilizar a quantidade de bits 1 existentes na máscara. Assim, a máscara 255.255.0.0 vira 16. A utilização fica assim:
-s 172.20.0.0/16
Outra possibilidade é a designação de hosts pelo nome. Exemplo:
-s www.chat.com.br (http://www.chat.com.br)
Para especificar qualquer origem, utilize a rota default, ou seja, 0.0.0.0/0.0.0.0, também admitindo 0/0.
-d --> Destination (destino). Estabelece o destino do pacote. Funciona exatamente como o -s, incluindo a sintaxe.
-p --> Protocol (protocolo). Especifica o protocolo a ser filtrado. O protocolo IP pode ser especificado pelo seu número (vide /etc/protocols) ou pelo nome. Os protocolos mais utilizados são udp, tcp e icmp. Exemplo:
-p icmp
-i --> In-Interface (interface de entrada). Especifica a interface de entrada. As interfaces existentes podem ser vistas com o comando #ifconfig. O -i não pode ser utilizado com a chain OUTPUT. Exemplo:
-i ppp0
O sinal + pode ser utilizado para simbolizar várias interfaces. Exemplo:
-i eth+
eth+ refere-se à eth0, eth1, eth2 etc.
-o --> Out-Interface (interface de saída). Especifica a interface de saída. Similar a -i, inclusive nas flexibilidades. O -o não pode ser utilizado com a chain INPUT.
! --> Exclusão. Utilizado com -s, -d, -p, -i, -o e outros, para excluir o argumento. Exemplo:
-s ! 10.0.0.1
Isso refere-se a qualquer endereço de entrada, exceto o 10.0.0.1.
-p ! tcp
Todos os protocolos, exceto o TCP.
--sport --> Source Port. Porta de origem. Só funciona com as opções -p udp e -p tcp. Exemplo:
-p tcp --sport 80
Refere-se à porta 80 sobre protocolo TCP.
--dport --> Destination Port. Porta de destino. Só funciona com as opções -p udp e -p tcp. Similar a --sport.
Ações:As principais ações são:
ACCEPT --> Aceitar. Permite a passagem do pacote.
DROP --> Abandonar. Não permite a passagem do pacote, descartando-o. Não avisa a origem sobre o ocorrido.
REJECT --> Igual ao DROP, mas avisa a origem sobre o ocorrido (envia pacote icmp unreachable).
LOG --> Cria um log referente à regra, em /var/log/messages. Usar antes de outras ações.
Conclusão:Não adianta nada vc ter um filtro de pacotes que proteja sua rede mas que não se proteja. Então o firewall deve ser protegido para que a rede seja protegida. Então siga as "diquinhas" que eu vou lhes dar:
Quote- Feche a máquina com Iptables, de modo que todas os pacotes destinados diretamente a ela sejam descartados (#iptables -P INPUT DROP), e vá abrindo aos poucos quando necessário.
- Prefira topologia de filtro isolado combinado com filtro incorporado;
- Atualize sempre o Iptables e o kernel;
- NUNCA rode qualquer serviço, principalmente os remotos, como telnet e ftp, nas máquinas firewall. Mas...
- ...Se tiver que administrar remotamente uma máquina firewall, utilize ssh. Nesse caso, o ssh não deverá permitir o login como root;
- Nunca cadastre qualquer usuário na máquina Iptables, caso se trate de filtro isolado, a não ser os que irão administrar por ssh;
- Utilize TCP Wrappers totalmente fechado (ALL:ALL em /etc/hosts.deny) em filtros isolados. Abra o ssh (em /etc/hosts.allow) apenas para os clientes que forem fazer administração remota;
- Anule as respostas a ICMP 8 (echo reply) no filtro isolado, para evitar ataques de Ping of Death.
- Não insira referências ao sistema de firewall no DNS;
- Não deixe as máquinas firewall isolado com cara de firewall. Utilize nomes descaracterizados;
- Faça log de ações suspeitas que estiverem ocorrendo na rede.
Então é isso, acho que deu pra vcs captarem. Agora é só seguir as "instruções" e com certeza sua rede vai ficar mais segura. Mas vcs não devem se restringir a um firewall, instalem IDS, IPS, Anti-Rootkit's, HoneyPots e HoneyNets (Mas muito cuidado com isso, pois podem fácilmente ser usados contra vc), e o mais importante, use a mente hacker.
Opinem!

...by Cloudy
Hey cara, ageita ai as tags, porque o smf não deve ter ou aceitar assim...
Mas ótimo tuto cara, curti mesmo =]
só glow mesmo...
vou testar aqui:
Morte137: The Heart Collector
e usei assim:
Morte137: The Heart Collector