Ver Feed RSS

The JEdi lair's

Netfilter/Iptables - Parte 2

Avalie este Post de Blog
Contiuando...
Já que a limitação de 10000 caracteres não permitiu tudo junto, vamos fazer separados... Só pra descontrair: por que "tudo junto" se escreve separado e "separado" se escreve tudo junto??? hehehe...

Obs importante: Os familiarizados com Netfilter/Iptables e estiverem sentindo falta dos target (-j) por favor não se incomodem. Estou fazendo dessa forma de modo a não atropelar conteúdos e facilitar a compreensão futura. Pra que serve uma regra sem target? Contabilidade! Regras sem targets não tomam decisões quanto ao pacotes mas geram estatísticas através dos contadores. Útil.

6 - Match Extensions
Como já citado, matchs adicionam funcionalidades a verificação dos pacotes além daquelas citadas acima na secção parâmetros. Para ativar uma match extension basta adicionar como parâmetro -m match porém algumas delas, como tcp e udp, são ativadas assim que você especifica -p proto como parâmetro. Falarei aqui das mais significativas na minha opnião.

tcp
As funcionalidades seguintes são ativadas quando se utiliza o parâmetro -p tcp.
--sport ou --source-port [!] portai[:portaf]
Verifica a porta ou range de portas de origem do pacote.

ex: iptables -A OUTPUT -p tcp --sport 22
|
\-> Essa regra irá conferir com pacotes saindo do filtro de pacotes através do protocolo tcp e porta de origem 22.

ex: iptables -t nat -A PREROUTING -p tcp --sport 1025:
|
\-> Essa regra irá conferir com pacotes chegando ao filtro utilizando o protocolo tcp e de porta de origem maior ou igual a 1025.

--dport ou --destination-port [!] portai[:portaf]
Verifica a porta de destino do pacote

ex: iptables -t nat -A POSTROUTING -p tcp --dport :1024
|
\-> Essa regra irá conferir com pacotes atravesando uma rede com destino a outra utilizando o protocolo TCP com porta de destino menor ou igual a 1024.

[!] --syn
Verifica a se a flag SYN está setada e se as flags ACK, RST e FIN estão destivadas. Basicamente confere com pacotes que estejam iniciando uma conexão.

ex: iptables -A INPUT -p tcp --dport 22 --syn
|
\-> Essa regra irá conferir com pacotes entrando no filtro de pacotes através do protocolo tcp com porta de destino 22 e iniciando uma conexão nessa porta.

--tcp-flags [!] flags cflags
Verifica as flags do pacote TCP. O primeiro argumento são as flags que deverão ser verificadas e o segundo argumento são as flags que deverão estar ativas. As flags podem ser SYN, ACK, FIN, RST, URG, PSH, ALL ou NONE. As flags devem ser listadas separadas por vírgulas.

ex: iptables -t nat -A PREROUTING -p tcp --tcp-flags ALL NONE
|
\-> Essa regra irá conferir com um pacote chegando ao filtro de pacotes através do protocolo TCP que, ao verificar-se todas as flags, nenhuma esteja ativa.

ex: iptables -t nat -A PREROUTING -p tcp --tcp-flags RST,ACK RST
|
\-> Essa regra irá conferir com um pacote chegando ao filtro de pacotes através do protocolo TCP que, ao verificar-se as flags RST e ACK, somente a RST esteja ativa.

Ficará a cargo do leitor pesquisar sobre --mss e --tcp-option.
udp
As seguintes funcionalidades são ativadas quando se utiliza os parâmetros -p udp
--sport ou --source-port port[:port]
Verifica a porta de origem de pacotes UDP. Possui as mesmas funcionalidades do --sport do protocolo TCP.

--dport ou --destination-port port[:port]
Verifica a porta de destino de pacotes UDP. Possui as mesmas funcionalidades do --dport do protocolo TCP.
icmp
Esta match é ativada quando é usado -p icmp como parâmetro. Ela adiciona as seguintes funcionalidades:
--icmp-type [!] tipo
Verifica se tipo é o tipo do pacote ICMP que está sendo analisado.

ex: iptables -t mangle -A PREROUTING -p icmp --icmp-type timestamp-request
|
\-> Essa regra irá conferir com pacotes chegando no filtro através do protocolo ICMP que sejam do tipo ICMP Timestamp-Request.
limit
Esta match confere um número limitado de vezes. Uma das suas principais utilizações é para limitar o taget LOG (targets serão explicados em breve). Para ativa-la utilize o parâmetro -m limit. As seguintes funcionalidades são ativadas:
[!] --limit taxa
A taxa máxima que a regra irá conferir. Os sufixos permitidos as taxas são /s, segundos, /m, minutos, /h, horas e /d, dias.

--limit-burst num
A tolerância inicial de pacotes.

ex: iptables -A INPUT -p tcp --syn -m limit --limit 5/s --limit-burst 3
|
\-> Essa regra irá conferir com pacotes TCP entrando no filtro de pacotes iniciando um conexão após o terceiro pacote limitando a regra a conferir apenas a cinco vezes por segundo.

obs: A regra acima, acressida do ! antes de --limit e combinada com o target DROP (que será explicada em breve) não deve ser usada para evitar flooding!!!
hashlimit
Essa match tem as mesmas funcionalidades da match limit, porém ele introduz a possibilidade de regras como "15 pacotes por segundo para o host 192.168.0.1 para a porta 22". Para ativa-la utilize o parâmetro -m hashlimit. As seguintes funcionalidades são adicionadas:
--hashlimit taxa
A taxa máxima que a regra irá conferir. Funciona igual ao --limit da match limit.

--hashlimit-burst num
A tolerância inicial de pacotes.

--hashlimit-mode objetos
A lista de objetos que devem ser levados em conta. Os objetos podem ser: dstip, srcip, dstport e srcport.

--hashlimit-name nome
Nome da tabela que será criada em /proc/net/ipt_hashlimit

--hashlimit-htable-max num
Número máximos de entradas no hash.

--hashlimit-htable-expire num
Quantidade em milisegundos até que uma entrada no hash seja descartada.

ex: iptables -A INPUT -p tcp --dport 22 --syn -m hashlimit --hashlimit-mode srcip --hashlimit 5/s --hashlimit-burst 3
|
\-> Essa regra irá conferir com pacotes entrando no filtro através do protocolo TCP iniciando uma nova conexão com destino a porta 22 e após o terceiro pacote de um mesmo endereço IP limitando a regra a conferir apenas 5 vezes por segundo.

obs: A regra acima também não deve ser usada como mecanismo de contenção de floods.
connmark
Essa match verifica o campo NFMARK associado a uma conexão (como setar o campo NFMARK do pacote será visto mais em breve nos targets). Para ativar esta match utilize como parâmetro -m connmark. As seguintes funcionalidades são adicionadas:
--mark valor[/mascara]
Verifica se valor está presente no NFMARK do pacote. Se máscara estiver especificada, o valor NFMARK é operado através de um AND Lógico e só após é verificado.

ex: iptables -t nat -A PREROUTING -p tcp -m connmark --mark 0x60
|
\-> Essa regra irá conferir se um pacote que está chegando no firewall através do protocolo TCP possuir seu campo NFMARK igual a 0x60.
mac
Verifica o MAC Address da interface de rede. Essa match só é útil em redes ethernet e nas chains PREROUTING, INPUT e FORWARD. É ativada através do parâmetro -m mac e possui somente a seguinte fucionalidade:
--mac-source mac
Verifica o MAC Address de origem do pacote. mac precisa estar na forma XX:XX:XX:XX:XX:XX.

ex: iptables -A INPUT -m mac --mac-source FF:FF:FF:00:00:01 -s 192.168.0.1
|
\-> Essa regra irá conferir com pacotes entrando no filtro que tenham como origem o endereço 192.168.0.1 com MAC Address da interface de rede igual a FF:FF:FF:00:00:01.
iprange
Verifica a origem e/ou destino dos pacotes em um range de endereços IP. Para ativar essa match, utilize como parâmetro -m iprange. Esse módulo adiciona as seguintes funcionalidades:
[!] --src-range ip-ip
Verifica se o endereço de origem do pacotes está entre o range especificado de maneira inclusiva.

[!] --dst-range ip-ip
Verifica se o endereço de destino do pacotes está entre o range especificado de maneira inclusiva.

ex: iptables -t nat -A PREROUTING -m iprange --dst-range 192.168.2.200-192.168.2.240 -p tcp --dport 80
|
\-> Essa regra irá conferir com pacotes chegando ao filtro através do protocolo TCP com destino a porta 80 que estejam entre o endereço 200 e 240 da rede 192.168.2.0.
physdev
Verifica a interface de entrada/saída de um pacote em interfaces relacionadas a uma bridge. Para ativa-lo deve-se pasar -m physdev como parâmetro. Ele adiciona as seguintes funcionalidades:
--physdev-in [!] interface
Verifica se a interface de entrada do pacote é interface. Para conferir, interface deve estar associada a uma bridge. Essa match só é válida nas chains INPUT, FORWARD e PREROUTING.

--physdev-out [!] interface
Verifiva se a interface de saída do pacote é interface. Para conferir, interface deve estar associada a uma bridge. Essa match só é válida nas chains OUTPUT, FORWARD e POSTROUTING.

[!] --physdev-is-in
Verifica se a interface de entrada do pacotes está em uma bridge.

[!] --physdev-is-out
Verifica se a interface de saída do pacote está em uma bridge.

[!] --physdev-is-bridged
Verifica se um pacote irá atravessar uma bridge.

ex: iptables -A FORWARD -m physdev --physdev-in eth+ --physdev-is-bridged
|
\-> Essa regra irá conferir com qualquer pacote relacionado as interface eth associadas a uma bridge que não será roteado, ou seja, vai atravessar a a bridge.

ex: iptables -A FORWARD -i ppp0 -m physdev --physdev-is-out
|
\-> Essa regra irá conferir com pacotes entrando através da interface ppp0 e será encaminhado a uma porta relacionada a uma bridge.

Atualizado 09-03-2009 em 10:35 por PEdroArthurJEdi

Categorias
Não Categorizado

Comentários


+ Enviar Comentário