Você está na página 1de 15

19.4.

COMO CONFIGURAR UM FIREWALL USANDO


IPTABLES?

###CL70 kernel 2.4.5###

A ferramenta iptables insere e retira regras da tabela de filtragem de pacotes do kernel. Para
que as regras não se percam no "reboot" da máquina, faz-se uso de scripts que são lidos a
cada reinicialização e atualizados durante a utilização da ferramenta, não havendo a
necessidade de reconfiguração da tabela de regras manualmente a cada vez que a máquina é
ligada.

Obs: um filtro de pacotes de uma rede não deve ser reinicializado constantemente,
principalmente em se tratando de Linux.

Iptables é, portanto, um substituto para as ferramentas ipfwadm e ipchains, com substanciais


recursos adicionados.

Para minimizar as restrições ao processo de migração por quem já utilizava os antigos pacotes
de filtragem, existem módulos de suporte a essas ferramentas no novo kernel.

Configurando Tabelas de Regras Permanentes

Como a configuração do firewall está armazenada no kernel e pode ser perdida em um reboot,
é necessária a criação de arquivos (scripts) como iptables-save e iptables-restore e
incorporados à inicialização da máquina (scripts de inicialização) para automatizar o processo
de inicialização do filtro de pacotes.

Implementação de filtro em conexão discada

Em uma conexão simples (PPP) para acesso à Internet, é possível impedir que algo "entre" em
sua rede ou máquina pessoal, durante a conexão utilizando um script baseado em
Netfilter/Iptables do tipo:

## Se você compilou como modulo o connection-tracking, descomente as linhas abaixo

# insmod ip_conntrack
# insmod ip_conntrack_ftp

## Crie a 'chain' block para bloquear acessos de estranhos

iptables -N block
iptables -A block -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A block -m state --state NEW -i ! ppp0 -j ACCEPT
iptables -A block -j DROP

## Direcione (jump) as 'chains' INPUT e FORWARD para sua chain block.

iptables -A INPUT -j block


iptables -A FORWARD -j block

Funcionamento Interno

O kernel inicia com três listas de regras chamadas firewall, sendo elas: INPUT, OUTPUT e
FORWARD, que funcionam de forma diferente das ferramentas que utilizavam versões 2.0 e
2.2 do kernel.

Incoming / \ Outgoing
-->[Routing ]--->|FORWARD|------->
[Decision] \_____/ ^
| |
| |
v ____
___ / \
/ \ |OUTPUT|
|INPUT| \____/
\___/ ^
| |
----> Local Process ----

No esquema acima, são representadas as três 'chains'. Quando um pacote atinge uma das
chains, esta examina o seu cabeçalho e, baseada em sua tabela de regras, decide o que fazer
com o pacote. Se a chain determina que seja bloqueado, o pacote é descartado neste
momento, caso contrário (ACCEPT) o pacote segue conforme o diagrama.

Usando iptables

O iptables é similar ao ipchais, só que com várias características incorporadas. As três 'chains'
padrão permanecem (INPUT, OUTPUT e FORWARD). Estas chains não podem ser apagadas,
embora, como no iptables, novas chains podem ser criadas e apagadas.

As principais operações de manipulação de chains do iptables são :

-N Cria uma nova chain

-X Deleta uma chain (vazia)

-P Muda as regras para uma chain padrão


-L Lista as regras de uma chain

-F "Flush" as regras fora da chain

-Z Zera os pacotes e 'byte counters' de todas as regras de uma chain

Existem muitos meios de manipular regras dentro de uma chain:

-A Acrescenta uma nova regra a uma chain

-I Insere uma nova regra em alguma posição em uma chain

-R Substitui uma regra em alguma posição em uma chain

-D Apaga uma regra em alguma posição em uma chain

-D Apaga a primeira regra que comparar em uma chain

O iptables na inicialização da Máquina

O iptables pode ser um módulo, chamado ('iptable_filter.o'), que poderia ser carregado
automaticamente na primeira vez em que é rodado o iptables, ou também pode estar dentro
do kernel permanentemente (compilado junto com o kernel).

Antes de qualquer comando do iptables ser acionado (supondo que não esteja sendo
inicializado através dos scripts de inicialização da distribuição), não há regras em qualquer
chain. Todas as chains têm a política de aceitação (ACCEPT). Você pode alterar a política
default da chain FORWARD para prover a opção 'forward=0' para o módulo iptable_filter.

Manipulando Regras com Simplicidade

Cada regra especifica que condições o pacote precisa satisfazer, e para onde ele deve seguir.

Por exemplo, pode-se barrar todos os pacotes ICMP vindos do endereço IP 127.0.0.1:

Condições :
protocolo = ICMP;
endereço IP de origem = 127.0.0.1
protocolo = ICMP;
endereço IP de origem = 127.0.0.1
Alvo (target) = 'DROP'

(127.0.0.1 é a interface 'loopback' (localhost)utilizada como exemplo.


Para testar utilize o 'ping' para gerar os pacotes (O ping simplesmente envia pacotes ICMP
tipo 8 [echo request] aguardando como resposta um pacote ICMP tipo 0 [echo reply]).

[root@localhost /root]# ping -c 1 127.0.0.1


PING 127.0.0.1 (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.2 ms
--- 127.0.0.1 ping statistics ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 0.2/0.2/0.2 ms

Aplicando a regra :

#iptables -A INPUT -s 127.0.0.1 -p icmp -j DROP

Tem-se então como resposta :

[root@localhost /root]# ping -c 1 127.0.0.1 PING 127.0.0.1 (127.0.0.1): 56 data bytes

--- 127.0.0.1 ping statistics ---


1 packets transmitted, 0 packets received, 100% packet loss
[root@localhost /root]#

Antes de aplicarmos a regra do iptables, o ping (com o parâmetro -c 1, que se refere ao envio
de somente um pacote) foi bem sucedido, obtendo o echo reply. Quando foi adicionado o -A à
chain INPUT, a regra especificou que para pacotes vindos de 127.0.0.1 (-s 127.0.0.1) com
protoloco ICMP (-p icmp) deveriam saltar para o DROP (-j DROP).

Ao testar essa regra usando novamente o ping, há uma pausa (a solicitação espera por uma
resposta que nunca vem) e em seguida a mensagem de que o pacote foi perdido (100%
packet loss).

Essa regra pode ser apagada de duas maneiras. Ou deletando diretamente pelo número da
regra na chain INPUT:

# iptables -D INPUT 1

Ou substituindo o comando -A por -D na linha de inserção da regra :

# iptables -D INPUT -s 127.0.0.1 -p icmp -j DROP

A sintaxe do -D tem exatamente as mesmas opções dos comandos -A, -I ou -R. Se existirem
muitas regras idênticas na mesma chain, somente a primeira será apagada.

Especificando a Filtragem
Há ainda outras opções que podem ser usadas para especificar características de uma regra
de filtragem de pacotes:

* Origem (source)
-s
--source
--src

* Destino (destination)
-d
--destination
--dst

A origem ou o destino podem ser especificadas de quatro formas:

full name : como `localhost' ou `www.linuxhq.com'

Endereço IP : como `127.0.0.1'

Grupo de endereços IP : do tipo `199.95.207.0/24' ou `199.95.207.0/255.255.255.0'

Os dígitos após a barra '/' são a máscara de rede utilizada para definir os IP's que estão
englobados no grupo. '/32' ou '/255.255.255.255' representam o padrão. Para especificar
algum endereço IP entre todos, podemos usar '/0'.

[ OBS: `-s 0/0' é redundante aqui. ]

# iptables -A INPUT -s 0/0 -j DROP

Especificando uma Inversão (!)

Muitas flags, inclusive a -s e -d podem ter seus argumentos precedidos por (!) (pronucia-se
'not') para se referir a endereços diferentes (NOT equal) dos apresentados. Por exemplo:

'-s ! localhost' -> refere-se a todos os pacotes não vindos de localhost.

Especificando o Protocolo

O protocolo pode ser especificado com a flag `-p' (ou `--protocol'). O protocolo pode ser um
número (se você sabe o valor numérico do protocolo por IP), ou um nome para os casos
especiais de `TCP', `UDP' ou `ICMP'. O nome do protocolo também pode (como as flags
descritas acima) serem prefixados por um (!) , para invertê-lo. Por exemplo `-p ! TCP' para
especificar pacotes não TCP.
Especificando uma Interface

Interface de Entrada `-i' (ou `--in-interface')

Interface de Saída `-o' (ou `--out-interface')

Obs.: Pacotes atravessando a chain INPUT não passam por uma interface de saída (output),
assim, qualquer regra usando -o nesta chain é inútil.

Obs2.: Igualmente, pacotes que atravessam a chain OUTPUT não passam por uma inteface de
entrada (input), assim, qualquer regra usando -i nesta chain é inútil.

Obs3.: Somente pacotes que atravessam a chain FORWARD passam por ambas as interfaces
(input e output).

Especificando Fragmentos

Algumas vezes um pacote é muito grande para ser enviado todo de uma vez. Quando isso
acontece, o pacote é dividido em fragmentos e enviados como múltiplos pacotes. No destino,
estes fragmentos são montados, reconstruindo o pacote original. O problema com fragmentos
é que o primeiro deles tem a informação completa do campo de cabeçalho (IP + TCP, UDP e
ICMP) para serem examinados, mas os pacotes seguintes somente tem uma parte do
cabeçalho (IP sem o campo de protocolo adicional).

Quando isso não acontece, as regras de filtragem procuram por informações sobre o pacote e
não encontram. Isso acontece porque o primeiro fragmento (com as informações completas) é
tratado como um pacote qualquer, já os demais fragmentos não. Nesses casos a regra -p TCP
--sport www especifica a porta de origem do 'www', o oposto desta regra seria -p TCP
--sport ! www.

De outra torma, você pode especificar uma regra especificamente para fragmentos
posteriores, usando a flag `-f' (ou `--fragment'). Isto também é usado para inserir uma regra
que não se aplica aos fragmentos posteriores, usando a inversão '!' precedendo a flag '-f'

Como exemplo, veja uma regra para barrar (drop) fragmentos vindos de 192.168.1.1:

# iptables -A OUTPUT -f -d 192.168.1.1 -j DROP

Extensões ao iptables: Novas combinações

O pacote iptables é extensível, ou seja, os recursos incorporados ao kernel juntamente com a


ferramenta iptables, podem ser combinados para prover novas características.
Algumas destas extensões são triviais, e outras bem "exóticas". Extensões podem ser feitas
por outras pessoas e distribuídas separadamente para outros usuários.

As extensões do kernel normalmente estão situadas no subdiretório de módulos do kernel,


como em /lib/ modules/2.4.0/net. Estas extensões destão disponíveis para leitura se o
kernel foi compilado com o parâmetro CONFIG_KMOD marcado, para não precisar inserí-lo
manualmente.

Já as extensões do programa iptables são bibliotecas normalmente localizadas em


/usr/local/lib/iptables/, dependendo da distribuição, também poderiam estar em
/lib/iptables ou /usr/lib/iptables.

As extensões podem ser de dois tipos: novos alvos (targets) ou novas combinações
(matches). Alguns protocolos oferecem automaticamente novos testes que podem ser
implementados na linha de comando após a opção '-p', para ler a extensão equivalente ao
novo teste explicitado, com a opção '-m' responsável pela leitura da extensão.

Para visualizar o help de uma extensão, use a opção para lê-la (`-p', `-j' ou `-m') seguida de
`-h' ou `--help', por exemplo:

# iptables -p tcp --help

Extensões TCP

As extensões TCP são automaticamente carregadas se a opção `-p tcp' é especificada. Em


seguida, então, pode-se adicionar as opções desejadas, detalhadas a seguir:

--tcp-flags Utilizada para filtrar flags específicas, (ou não, em caso de precedida de). A
primeira string de flags é a máscara lista de flags para examinar)e a segunda string sinaliza
qual(is) flags serão selecionadas, por exemplo :

# iptables -A INPUT --protocol tcp --tcp-flags ALL SYN,ACK


-j DENY

# iptables -A INPUT --protocol tcp --tcp-flags ALL SYN,ACK


-j DENY

Isto indica que todas as flags serão examinadas ('ALL' é equivalente a informar
'SYN,ACK,FIN,RST, URG,PSH'), mas somente SYN e ACK serão selecionadas. Existe também o
argumento 'NONE' para indicar nenhuma flag.
--syn Opcionalmente precedida por um '!', esta opção é a abreviação para `--tcp-flags
SYN,RST,ACK SYN'.

--source-port (ou -sport)

Opcionalmente precedida por um '!', utilizada para indicar uma porta TCP, ou uma lista de
portas. As portas podem ser indicadas por nomes, (indicadas em /etc/services , ou por
seus números equivalentes). A lista de portas deve ter seus nomes (ou números) separados
por um ':'

--destination-port (ou -dport) De utilização semelhante ao anterior, só que especifica a(s)


porta(s) de destino ao invés de origem.

--tcp-option Precedido opcionalmente por um '!', e um número, compara um pacote com uma
opção TCP igual a um número. Um pacote que não tenha um cabeçalho TCP completo é
barrado (drop) automaticamente se esta opção estiver formulada para examinar esta
situação.

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
Este módulo ajuda a localizar várias características do criador de pacotes
gerados internamente. Esta opção somente é válida para a chain OUTPUT, e
owner
detecta quando alguns pacotes (como respostas a ping's ICMP) não possuem
dono, e consequentemente nunca chegarão ao destino.
--uid-owner Ativa a regra se o pacote foi criado por um processo concebido efetivamente
userid pelo (número) user id.
--uid-owner Ativa a regra se o pacote foi criado por um processo concebido efetivamente
groupid pelo (número) group id.
--pid-owner Ativa a regra se o pacote foi criado por um processo concebido efetivamente
processid pelo (número) process id
--sid-owner Ativa a regra se o pacote foi criado por um processo concebido pelo session
processid group.
Este módulo experimental pode ser explicitamente especificado com a opção
`-m unclean ou `--match unclean'. Ele realiza várias checagens aleatórias em
unclean
pacotes. Este módulo não foi auditado, e não poderia ser usado como um
mecanismo de segurança (ainda pode conter bugs internos).

O Estado "Match"

A utilização mais conveniente para a opção 'match' é fornecida pela extensão 'state', que
interpreta a e analisa a conexão do módulo `ip_conntrack'. Ela é altamente recomendada.

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 deses estados).
Esses estados são:

NEW Um pacote que cria uma nova conexão.


Um pacote que pertence a uma conexão existente (isto é, um pacote de
ESTABLISHED
resposta).
Um pacote que está relacionado com (mas não faz parte de) uma
RELATED 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.
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
INVALID
nenhuma conexão existente. Geralmente estes pacotes devem ser
barrados (drop).

Especificações de Alvos (TARGET's)

Após examinar um pacote, é necessário indicar um destino para o mesmo, caso seja ativada
alguma das regras. Isto é chamado de regra de alvo (rule's target). Os dois alvos mais
comumente utilizados em um filtro de pacotes são o DROP (para barrar o pacote) e o ACCEPT
(para aceitá-lo). Se uma regra é ativada e o alvo é um destes dois, nenhuma regra mais é
consultada.

Chains definidas pelo usuário

Uma das funções que o iptables herdou do ipchains é a possibilidade do usuário criar novas
chains, complementando as três chains padrão (INPUT, FORWARD and OUTPUT). Por
convenção, as chains definidas pelo usuários são compostas por letras minúsculas para
distingui-las. Mais adiante, as chains definidas pelo usuários serão mais detalhadas.
Quando um pacote ativa uma regra cujo alvo é uma chain definida pelo usuário, o pacote
segue atravessando a regra da chain definida pelo usuário. Se a chain não decide o destino do
pacote, então o pacote passará para a próxima regra da chain corrente.

Veja o exemplo gráfico a seguir. Consedere duas chains bem simples: INPUT (a chain padrão)
e test (uma chain definida pelo usuário)

`INPUT' `test'
-----------------------------
----------------------------
| Regra1: -p ICMP -j DROP | | Regra1: -s
192.168.1.1

|---------------------------|
|---------------------------|
| Regra2: -p TCP -j test | | Regra2: -d
192.168.1.|

|---------------------------|
----------------------------
| Regra3: -p UDP -j DROP |
-----------------------------

Extensões para iptables

Um outro tipo de alvo é uma extensão. Um alvo extensão consiste em um módulo do kernel,
uma extensão opcional para o iptables para prover novas opções de linhas de comando. Há
muitas extensões na distribuição padrão do netfilter:

LOG Este módulo provê o log (logging) a nível de kernel de pacotes que ativem regras de
filtragem. Existem algumas opções adicionais:

--log-level Seguido por um número de nível (level number) ou nome. Os nomes válidos são
(em minúsculas): `debug', `info', `notice', `warning', `err', `crit', `alert' e `emerg',
correspondendo aos números de 7 a 0. Veja a página de manual (man page) do syslog.conf
para um melhor detalhamento desses níveis.

--log-prefix Seguido por uma string de até 30 caracteres, esta mensagem é "impressa" no
início da mensagem de log, (para facilitar a identificação de mensagens emitidas pelo iptables
por parte de programas de tratamento de log, sem confundí-las com as de outros serviços
logados pelo syslog). Este módulo é muito usado após um alvo limite, porém, cuidado para
não inundar ("floodar") seus logs.

REJECT
Este módulo tem o mesmo efeito que o 'DROP', exceto pelo fato de que ele envia uma
mensagem de erro à origem do pacote (ICMP 'port unreachable').

OBS: A mensagem de ICMP error não será enviada se (mais detalhes na RFC 1122) :

- O pacote que está sendo filtrado contiver uma mensagem de erro ICMP no início, ou algum
tipo de ICMP desconhecido (unknown ICMP type);

- O pacote que está sendo filtrado for um fragmento que não pertence ao cabeçalho;

- Foram enviados muitos pacotes com mensagens de erro ICMP para este destino
recentemente.

REJECT também possui o argumento opcional `--reject-with' que altera a resposta ao pacote
(veja a página de manual para mais detalhes)

Alvos padrão Especiais

Existem 2 alvos padrão especiais:

RETURN tem o mesmo efeito de não-ativação ao final de uma chain: para uma regra de com
uma chain padrão, a política da chain é executada. Para uma regra definida pelo usuário,
retorna à chain anterior, obedecendo às regras após o alvo que implicou no salto para a regra
em questão.

QUEUE é um alvo especial, que enfileira (QUEUE) o pacote para um "userspace processing".
Para implementar isto, 2 componentes adicionais são requeridos:

- Uma "queue handler", que trabalhe conjuntamente com o atual mecanismo de passagem de
pacotes entre o kernel e o o "userspace" ; e

- Uma aplicação "userspace" para receber, (possivelmente manipular), e emitir um veredicto


sobre o pacote.

O modelo de "queue handler" para IPv4 iptables é o módulo ip_queue, que é distribuído com o
kernel e marcado como experimental (até a presente versão em desenvolvimento).

O status do ip_queue pode ser checado via:

/proc/net/ip_queue
O valor padrão para o comprimento máximo do queue é 1024. Sempre que este limite for
ultrapassado, novos pacotes serão barrados após o comprimento da queue atingir o seu limite.
Alguns protocolos como o TCP interpreta a barragem de pacotes como congestionamento, e
aguardará a queue retornar. Outras vezes, ele pode experimentar determinar um
comprimento máximo ideal da queue para uma próxima situação se o valor padrão form muito
pequeno.

Criando uma nova chain

Chamaremos nossa primeira chain de test. Para criá-la podemos utilizar a opção `-N' ou `--
new-chain':

# iptables -N test
# iptables -N test

Pronto. Basta agora definir os detalhes da nova chain e as regras que irão utilizá-la.

** Para deletar uma chain podemos utilizar a opção `-X' ou `--delete-chain'

# iptables -X test

Há um par de restrições para deletar chains: Não pode haver regras ativas que contenham
estas chains; e As chains não podem ser alvos de nenhuma regra.

OBS1: Você não pode deletar as 3 chains padrão.

OBS2: Se não for especificada a chain a deletar, todas as chains definidas pelo usuário serão
deletadas (se possível)

** Existe um simples caminho para descarregar todas as regras para fora de uma chain,
usando o comando `-F' (ou `--flush').

# iptables -F forward

Se não for especificada uma chain, todas as chains serão descarregadas.

** É possível listar todas as regras de uma chain usando o comando `-L' (ou `--list').

A `refcnt' listada por cada chain definida pelo usuário é o número de regras que têm esta
chain como alvo. Ela deve ter valor zero (e a chain estar vazia) antes desta chain ser
deletada. Se o nome da chain for omitido, todas as chains serão listadas, inclusive as vazias.
Existem 3 opções que podem acompanhar `-L':
** A opção (numérica) `-n' é muito usado para tentar fazer o iptables examinar o reverso do
endereço IP, que (se você estiver usando o DNS como muitas pessoas) causará longas
esperas (delays) se seu DNS não estiver configurado adequadamente, ou se houverem regras
de filtragem de saídas de requisições DNS. Isto também faz com que as portas TCP e UDP
sejam impressas como números antes dos nomes.

# iptables -N test

** A opção '-v' exibe todos detalhes das regras, assim como os pacotes e os 'byte counters',
as comparações TOS, e as interfaces. Em alguns casos estes valores são omitidos. Os pacotes
e 'byte counters' são exibidos usando os sufixos `K', `M' ou `G' para abreviar 1.000,
1.000.000 e 1.000.000.000 respectivamente.

Mesclando NAT e Filtragem de Pacotes

É muito comum utilizar em um firewall recursos de NAT (Network Address Translation)


juntamente com filtragem de pacotes. O iptables realiza esta tarefa extremamente bem, sem
a necessidade de pacotes adicionais.

É possível implemenar a filtragem de pacotes ignorando completamente qualquer NAT, se


você desejar. As origens e destinos "enxergadas" pelos pacotes serão as origens e destinos
"reais".

Por exemplo, se você fez DNAT para enviar conexões direcionadas para o IP 1.2.3.4 porta 80
através do IP 10.1.1.1 porta 8080, o filtro de pacotes poderia enxergar os pacotes indo para
10.1.1.1 porta 8080 (o destino real) e não para 1.2.3.4 porta 80.

Você pode utilizar a extensão 'state' sem trabalhar com o filtro de pacotes, desde que o NAT
solicite conexão de qualquer modo. A seguir, um exemplo simples de mascaramento utilizando
NAT para desabilitar qualquer nova conexão vindo da interface ppp0:

* Mascarando a saída pela interface ppp0

iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

* Desabilitando solicitações novas (NEW) e inválidas (INVALID) ou pacotes enviados da


interface ppp0.

iptables -A INPUT -i ppp0 -m state --state NEW,INVALID -j


DROP
iptables -A FORWARD -i ppp0 0 -m state --state NEW,INVALID
-j DROP
# Habilitando o recurso de IP forwarding

echo 1 > /proc/sys/net/ipv4/ip_forward

Diferenças entre iptables e ipchains

Primeiramente, a escrita dos nomes das chains padrão foram modificados de maiúsculas para
minúsculas, isso porque no novo pacote, as chains INPUT e OUTPUT somente são utilizadas
para destinos locais e pacotes gerados localmente, para visualizar todos os pacotes que
chegam e que saem respectivamente.

A flag '-i' agora indica a interface de entrada, e somente deve ser utilizada nas chains INPUT e
FORWARD. Regras das chains FORWARD (para saída) e OUTPUT que utilizavam '-i' devem
agora utilizar '-o'.

As portas TCP e UDP agora precisam ser descritas com as opções --source-port ou --sport (ou
--destination-port/--dport), e podem ser posicionadas após as opções `-p tcp' ou `-p udp' que
carregam as extensões TCP ou UDP respectivamente.

* A flag TCP -y é agora --syn, e deve vir após a opção `-p tcp'.

* A flag TCP -y é agora --syn, e deve vir após a opção `-p tcp'.

* O alvo (target) DENY é agora DROP.

* REJECT e LOG são agora alvos extendidos, entendidos como módulos


do kernel
separados.

* Os nomes das chains podem ter até 31 caracteres.

* MASQ é agora MASQUERADE e utiliza uma sintaxe diferente. REDIRECT,


embora
tenha mantido o mesmo nome, também sofreu modificações de sintaxe.

* A opção -o não é mais utilizada para direcionar pacotes para


dispositivos
'userspace'. Pacotes são agora enviados ao userspace via alvo
QUEUE.

Conselhos sobre Implementação de Filtragem de Pacotes

A prática comum na filtragem de pacotes é o bloqueio de todos os serviços, e a abertura de


regras ncessárias. Este procedimento é o mais recomendável para obter um nível de
segurança maior. Não rode nenhum serviço que você não precisa rodar, se você não sabe pra
que serve, bloqueie o acesso a ele. Se você está criando um firewall dedicado, inicie sem rodar
nada, e bloqueie todos os pacotes, então adicione os serviços necessários. Outra
recomendação do texto-original é combinar tcp-wrappers, proxies, verificação de rotas e
filtragem de pacotes. Barrar, por exemplo, pacotes com endereços de origem internos vindos
de sua interface externa. Isto pode ser habilitado para uma interface (ppp0) como em:

# echo 1 > /proc/sys/net/ipv4/conf/ppp0/rp_filter

Existem 3 sites oficiais tratando do assunto Netfilter/Iptables :

Filewatcher http://netfilter.filewatcher.org

The Samba Team and SGI http://www.samba.org/netfilter

Jim Pick http://netfilter.kernelnotes.org

Para a lista de discussão oficial sobre o assunto, veja informações em :

Samba's Listserver http://lists.samba.org

Você também pode gostar