Manual do IPtables - Comentários e sugestões de regras

Tradução do manual do IPtables com alguns comentários, explicações e sugestões de algumas regras.

[ Hits: 97.643 ]

Por: Buckminster em 11/03/2013


Outras opções / Match Extensions



Outras opções

As seguintes opções adicionais podem ser especificadas:

-v, --verbose :: Saída detalhada. Esta opção faz com que o comando "-L" (list) mostre o nome da interface, as opções de regras (se houver) e as máscaras de ToS (Type of Service - Tipo de Serviço, RFC791).

Os contadores de pacotes e bytes serão listados com os sufixos 'K', 'M' ou 'G' para multiplicadores 1000, 1.000.000 e 1.000.000.000, respectivamente (veja a flag "-x" para mudar isso). Para APPEND, INSERT, DELETE e REPLACE, isso faz com que sejam mostradas informações detalhadas sobre a regra ou regras.

-n, --numeric :: Saída numérica. Endereços IP e números de porta serão mostrados em formato numérico. Por padrão, o programa vai tentar mostrá-los como nomes de host, nomes de rede, ou serviços (quando aplicável).

-x, --exact :: Expande números. Mostra o valor exato dos contadores de pacotes e bytes em vez de apenas o número arredondado em K (múltiplos de 1000), M (múltiplos de 1000K) ou G (múltiplos de 1000M). Esta opção só é relevante para o comando "-L".

--line-numbers :: Ao listar regras, este comando adiciona números de linhas para o início de cada regra, correspondendo à posição da regra na chain.

--modprobe=command :: Ao adicionar ou inserir regras em uma chain, use este comando para carregar os módulos necessários (targtes, match extensions, etc.)

Match Extensions

O iptables pode usar módulos correspondentes para pacotes grandes. Estes são carregados de duas maneiras: implicitamente, quando "-p" ou "-protocol" for especificado; ou com as opções "-m" ou "--match" seguidas pelo nome do módulo correspondente.

Após várias opções de linha de comando adicionais tornam-se disponíveis, dependendo do módulo especificado. Você pode especificar vários módulos em uma linha e você pode usar a opção "-h" ou "--help", ajuda, após o módulo especificado, para receber ajuda específica para o módulo.

Os módulos a seguir, estão incluídos no pacote de base e a maioria deles podem ser precedidos por um "!", para inverter o sentido da regra:

addrtype :: Este módulo combina pacotes baseado no address type. Tipos de endereços são utilizados dentro da pilha de rede do kernel e categorizam endereços em vários grupos. A definição exata desse grupo específico depende do protocolo de três camadas.

Os tipos de endereços possíveis são:
  • unspec :: Um endereço indeterminado (ou seja 0.0.0.0)
  • unicast :: Um endereço unicast
  • local :: Um endereço local
  • broadcast :: Um endereço de broadcast
  • anycast :: Um pacote de anycast
  • multicast :: Um endereço de multicast
  • blackhole :: Um endereço de blackhole
  • unreachable :: Um endereço inacessível
  • prohibit :: Um endereço proibido
  • throw fixme
  • nat fixme
  • xresolve
  • [!] --src-type type :: Combina se o endereço de origem é de determinado tipo
  • [!] --dst-type type :: Combina se o endereço de destino é de determinado tipo
  • --limit-iface-in :: A verificação do tipo de endereço pode ser limitada à interface do pacote que está entrando. Esta opção só é válida com prerouting, input e forward. Ela não pode ser especificada com a opção "--limit-iface-out".
  • --limit-iface-out :: A verificação do tipo de endereço pode ser limitada à interface do pacote que está saindo. Esta opção é válida apenas com postrouting, output e forward. Ela não pode ser especificada com a opção "--limite-iface-in".

ah :: Este módulo corresponde ao spis no cabeçalho de autenticação de pacotes ipsec. [!] --ahspi spi[:spi]

cluster :: Permite implantar gateway e back-end de carga de compartilhamento de grupos sem a necessidade de balanceadores de carga.

Requer que todos os nós enxerguem os mesmos pacotes. Assim, o grupo decide se o nó tem de lidar com um determinado pacote, seguindo as seguintes opções:

--cluster-total-nodes num :: Define o número de nós totais em cluster.
[!] --cluster-local-node num :: Define o número de identificação do nó local.
[!] --cluster-local-nodemask mask :: Define o número id da máscara do nó local. Você pode usar esta opção em vez de "--cluster-local-node".
--cluster-hash-seed value :: Define o valor do hash jenkins.

Exemplo:

# iptables -a prerouting -t mangle -i eth1 -m cluster --cluster-total-nodes 2 --cluster-local-node 1 --cluster-hash-seed 0xdeadbeef -j mark --set-mark 0xffff
# iptables -a prerouting -t mangle -i eth2 -m cluster --cluster-total-nodes 2 --cluster-local-node 1 --cluster-hash-seed 0xdeadbeef -j mark --set-mark 0xffff
# iptables -a prerouting -t mangle -i eth1 -m mark ! --mark 0xffff -j drop
# iptables -a prerouting -t mangle -i eth2 -m mark ! --mark 0xffff -j drop


E os seguintes comandos para fazer todos os nós verem os mesmos pacotes:

# ip maddr add 01:00:5e:00:01:01 dev eth1
# ip maddr add 01:00:5e:00:01:02 dev eth2
# arptables -a output -o eth1 --h-length 6 -j mangle --mangle-mac-s 01:00:5e:00:01:01
# arptables -a input -i eth1 --h-length 6 --destination-mac 01:00:5e:00:01:01 -j mangle --mangle-mac-d 00:zz:yy:xx:5a:27
# arptables -a output -o eth2 --h-length 6 -j mangle --mangle-mac-s 01:00:5e:00:01:02
# arptables -a input -i eth2 --h-length 6 --destination-mac 01:00:5e:00:01:02 -j mangle --mangle-mac-d 00:zz:yy:xx:5a:27


No caso de conexões TCP, a facilidade de captação (pickup facility) tem que ser desativada para evitar a marcação de pacotes TCP ACK que venham como resposta direta válida:

# echo 0 > /proc/sys/net/netfilter/nf_conntrack_tcp_loose

comment :: Permite adicionar comentários (até 256 caracteres) para qualquer regra:

--comment comment

Exemplo:

# iptables -a input -s 192.168.0.0/16 -m comment --comment "a privatized ip block"

connbytes :: Significa que o número de bytes, ou pacotes, de uma conexão (ou um dos dois fluxos que constituem a conexão) foi transferido para longe, ou por média de bytes por pacote.

Os contadores são de 64 bits e, portanto, espera-se que não dê overflow. ;)

O uso principal é detectar vida longa de downloads e marcá-los para serem agendados usando uma faixa de menor prioridade no controle de tráfego.

Os bytes transferidos por conexão também podem ser vistos através de "conntrack -l" e acessado via ctnetlink.

Note que, para conexões que não têm contadores de informações, sempre retornará falso. O controle de flag sysctl "net.netfilter.nf_conntrack_acct" será utilizado se as novas conexões forem de bytes/pacotes contados. Fluxos de conexão existentes não serão gaining/losing se a estrutura do contador estiver com a flag sysctl invertida.

[!] --connbytes from[:to] :: Coincide pacotes a partir de uma conexão cuja pacotes/bytes/média do tamanho do pacote for mais do que "from" e menos do que to bytes/pacotes. Se to for omitido, apenas a verificação "from" é feita. "!" é utilizado para combinar com pacotes que não se incluam no intervalo.

--connbytes-dir {original|reply|both} :: Define quais os pacotes a serem considerados.

--connbytes-mode {packets|bytes|avgpkt} :: Verifica a quantidade de pacotes, o número de bytes transferidos ou o tamanho médio (em bytes) de todos os pacotes recebidos até o momento.

Note-se que quando "both" é utilizado em conjunto com "avgpkt", e os dados vão (principalmente) apenas num sentido (por exemplo HTTP), o tamanho do pacote médio será de cerca de metade dos pacotes de dados reais.

Exemplo:

# iptables .. -m connbytes --connbytes 10000:100000 --connbytes-dir both --connbytes-mode bytes ...

connlimit :: Permite restringir o número de conexões paralelas para um servidor por endereço IP do cliente (ou bloco de endereços do cliente).

[!] --connlimit-above n :: Combina se o número de conexões existentes for (não) acima de "n".

--connlimit-mask prefix_length :: Grupo de hosts utilizando o tamanho do prefixo. Para o IPv4, este deve ser um número entre 0 (inclusive) e 32. Para o IPv6, entre 0 e 128.

Exemplos:

#Permite duas conexões telnet por host cliente
iptables -a input -p tcp --syn --dport 23 -m connlimit --connlimit-above 2 -j reject

#Você também pode definir o contrário utilizando "!" e accept
iptables -a input -p tcp --syn --dport 23 -m connlimit ! --connlimit-above 2 -j accept

#Limita o número de solicitações paralelas HTTP para 16 por rede classe c porte (24 netmask bit)
iptables -p tcp --syn --dport 80 -m connlimit --connlimit-above 16 --connlimit-mask 24 -j reject

#Limita o número para 16 solicitações HTTP paralelas para a rede de conexão local (ipv6)
ip6tables -p tcp --syn --dport 80 -s fe80::/64 -m connlimit --connlimit-above 16 --connlimit-mask 64 -j reject


connmark :: Este módulo corresponde ao campo netfilter associado a uma conexão (que pode ser definido com o alvo "connmark" abaixo).

[!] --mark value[/mask] :: Pacotes em conexões com o valor de marca dada (se uma máscara é especificada, esta é, logicamente, "anded" (concatenada, operador "and") com a marca antes da comparação).

conntrack :: Este módulo, quando combinado com rastreamento de conexão, permite o acesso ao estado de rastreamento da conexão para este pacote/conexão.

[!] --ctstate statelist :: statelist é uma lista separada por vírgulas dos estados de conexão para combinar. Estados possíveis estão listados abaixo:
  • [!] --ctproto l4proto layer-4 :: Protocolo para combinar (por número ou nome)
  • [!] --ctorigsrc address[/mask]
  • [!] --ctorigdst address[/mask]
  • [!] --ctreplsrc address[/mask]
  • [!] --ctrepldst address[/mask] :: Combina contra o endereço original/reply source/destination
  • [!] --ctorigsrcport port
  • [!] --ctorigdstport port
  • [!] --ctreplsrcport port
  • [!] --ctrepldstport port :: Combina contra original/reply source/destination (tcp/udp/etc.) ou a tecla "gre".
  • [!] --ctstatus statelist :: Statelist é uma lista separada por vírgula dos status de conexão para combinar. Os status possíveis estão listados abaixo.
  • [!] --ctexpire time[:time] :: Combina tempo restante de vida em segundos contra determinado valor ou intervalo de valores (inclusive)
  • --ctdir {original|reply} :: Corresponde a pacotes que estão fluindo na direção especificada. Se este sinalizador não for especificado, corresponde pacotes em ambas as direções.

Estados para "--ctstate":
  • invalid :: Significa que o pacote está associado com nenhuma conexão conhecida.
  • new :: Significa que o pacote começou uma nova conexão ou está associado a uma conexão que não tem pacotes vindos de ambas as direções.
  • established :: Significa que o pacote está associado com uma conexão que tem pacotes vindos de ambas direções.
  • related :: Significa que o pacote está começando uma nova conexão, mas está associado a uma conexão existente, como uma transferência de dados de FTP, ou um erro ICMP.
  • untracked :: Significa que o pacote não é seguido em tudo. Isso acontece se você usa o alvo notrack na tabela raw.
  • snat :: É um estado virtual, combina se o endereço de origem for diferente do endereço de destino.
  • dnat :: É um estado virtual, combina se o endereço de destino difere do endereço de origem.

Estados para "--ctstatus":
  • none :: Nenhum dos abaixo.
  • expected :: Esta é uma conexão esperada (ou seja, um conntrack pode configurar)
  • seen_reply :: conntrack viu pacotes em ambas as direções.
  • assured :: Entrada conntrack nunca deve ser precocemente expirada.
  • confirmed :: Conexão confirmada: pacote originário deixou a caixa.

dccp
  • [!] --source-port,--sport port[:port]
  • [!] --destination-port,--dport port[:port]
  • [!] --dccp-types mask :: Combina quando o tipo de pacote DCCP é uma das 'mask'. 'mask' é uma lista dos tipos de pacotes, separada por vírgula. Os tipos de pacotes são: request response data ack dataack closereq close reset sync syncack invalid.
  • [!] --dccp-option number :: Combina se DCP for um conjunto de opções.

dscp :: Este módulo corresponde ao campo de 6 bits DSCP dentro do campo ToS no cabeçalho IP. dscp substituiu ToS na IETF (Internet Engineering Task Force):
  • [!] --dscp value :: Combina contra um valor numérico (decimal ou hexadecimal) o valor [0-63].
  • [!] --dscp-class class :: Coincide com a classe diffserv. Este valor pode ser qualquer uma das classes: be, ef, afxx ou csx. Será, então, convertido de acordo com seu valor numérico.

ecn :: Permite combinar os bits ecn do IPv4 com o cabeçalho TCP. ecn é o mecanismo de notificação explícita de congestionamento, como especificado na rfc3168:
  • [!] --ecn-tcp-cwr :: Combina se o tcp ecn cwr (janela de congestionamento recebida) bit é definido.
  • [!] --ecn-tcp-ece :: Combina se o tcp ecn ece (ecn echo) bit está definido.
  • [!] --ecn-ip-ect num :: Corresponde a um determinado ipv4 ect (ecn- capable transport). Você tem que especificar um número entre '0 'e '3'.

esp :: Este módulo corresponde às spis dos cabeçalhos ESP dos pacotes IPsec:
  • [!] --espspi spi[:spi]

hashlimit :: hashlimit usa hash para expressar uma taxa limite (como limit) para um grupo de conexões, usando uma única regra do iptables. O agrupamento pode ser feito por hostgroup (source and/or destination address) e/ou por porta.

Dá a capacidade de expressar "-n" pacotes por quantum de tempo por grupo:
  • matching on source host "1000 packets per second for every host in 192.168.0.0/16"
  • matching on source prot "100 packets per second for every service of 192.168.1.1"
  • matching on subnet "10000 packets per minute for every /28 subnet in 10.0.0.0/8"

As opções "--hashlimit-upto", "--hashlimit-above" e "--hashlimit-name" são requeridas.

--hashlimit-upto amount[/second|/minute|/hour|/day] :: Combina se a taxa é menor ou igual a amount/quantum. É especificado como um número, com um sufixo opcional quantum de tempo, o padrão é 3/hour.

--hashlimit-above amount[/second|/minute|/hour|/day] :: Combina se a taxa está acima de amount/quantum.

--hashlimit-burst amount :: Número inicial máximo de pacotes: este número é recarregado por um cada vez que o limite especificado não for atingido, o padrão é 5.

--hashlimit-mode {srcip|srcport|dstip|dstport},... :: É uma lista separada por vírgulas de objetos para levar em consideração. Se nenhuma opção "--hashlimit-mode" for dada, o hashlimit age como limite para fazer a limpeza de hash.

--hashlimit-srcmask prefix :: Quando "--hashlimit-mode srcip" for utilizado, todos os endereços de origem encontrados serão agrupados de acordo com o tamanho do prefixo dado e a sub-rede estará sujeita a hashlimit. O prefix tem de ser entre 0 (inclusive) e 32.

Note que "--hashlimit-srcmask 0" é basicamente fazer a mesma coisa que não for especificada para "--hashlimit-mode srcip", mas é tecnicamente mais caro.

--hashlimit-dstmask prefix :: É como "--hashlimit-srcmask", mas para endereços de destino.

--hashlimit-name foo :: Nome para a entrada /proc/net/ipt_hashlimit/foo.

--hashlimit-htable-size buckets :: Número de buckets (baldes) da tabela hash

--hashlimit-htable-max entries :: Máximo de entradas no hash.

--hashlimit-htable-expire msec :: Agrupar depois de tantos milissegundos se as entradas de hash expirarem.

--hashlimit-htable-gcinterval msec :: Quantos milissegundos entre intervalos de coleta de lixo.

helper :: Este módulo corresponde aos pacotes relativos a um determinado conntrack-helper.

[!] --helper string :: Combina pacotes relacionados com o especificado no conntrack-helper.

chain :: Pode ser "ftp" para os pacotes relacionados a uma sessão FTP na porta padrão. Para outras portas acrescentar "-portnr" ao valor, ou seja. "ftp-2121".

As mesmas regras se aplicam a outros conntrack-helpers.

icmp :: Esta extensão pode ser usada se '--protocolo icmp' for especificada. Ela oferece a seguinte opção:

[!] --icmp-type {type[/code]|typename} :: Permite a especificação do tipo ICMP, que pode ser um tipo numérico ICMP, par tipo/código, ou um dos nomes ICMP mostrados pelo comando:

# iptables -p icmp -h

iprange :: Combina um determinado intervalo arbitrário de endereços IP:
  • [!] --src-range from[-to] :: Combina IP de origem no intervalo especificado.
  • [!] --dst-range from[-to] :: Combina o IP de destino com o intervalo especificado.

length :: Este módulo corresponde ao tamanho da carga de camada 3 (por exemplo, camada 4 de pacotes) de um pacote de encontro a um valor específico, ou intervalo de valores.

[!] --length length[:length]

limit :: Este módulo corresponde a uma taxa limite usando um filtro de token bucket. Uma regra usando esta extensão irá corresponder até este limite ser atingido (a menos que a flag '!' seja usada). Ele pode ser utilizado em combinação com o alvo log para dar o log limitado.

Por exemplo:
  • --limit rate[/second|/minute|/hour|/day] :: Taxa média máxima de correspondência: especificada como um número com um opcional '/second', '/minute', '/hour', or '/day', o padrão é 3/hour.
  • --limit-burst number :: Número inicial máximo de pacotes: este número é recarregado por um cada vez que o limite especificado acima não for atingido, o padrão é 5.

  • mac - [!] --mac-source address :: Corresponde ao endereço MAC de origem. Deve ser na forma: xx: xx: xx: xx: xx:xx. Note-se que isso só faz sentido para os pacotes provenientes de um dispositivo ethernet que entram nas chains prerouting, forward ou input.

mark :: Este módulo corresponde ao campo netfilter associado com um pacote (que pode ser definido com o alvo "mark" abaixo).

[!] --mark value[/mask] :: Combina pacotes com o valor de marca unsigned (não assinado) (se uma máscara é especificada, esta é logicamente anded com a máscara antes da comparação).

multiport :: Este módulo corresponde à um conjunto de portas de origem ou destino. Até 15 portas podem ser especificadas. A faixa de porta (port:port) conta como duas portas. Ela apenas pode ser utilizada em conjunto com "-p tcp" ou "-p udp".

[!] --source-ports,--sports port[,port|,port:port]... :: Combina se a porta de origem é uma das portas especificadas. A flag "--sports" é um apelido conveniente para essa opção.

Várias portas ou intervalos de portas são separados usando uma vírgula e um intervalo de portas é especificado usando dois pontos. O conjunto 53,1024:65535, portanto, combina a porta 53 e todo o intervalo entre 1024 a 65535.

[!] --destination-ports,--dports port[,port|,port:port]... :: Combina se a porta de destino é uma das portas dadas. A flag "--dports" é um álias conveniente para essa opção.

[!] --ports port[,port|,port:port]... :: Combina se a porta de origem ou destino são iguais a uma das portas especificadas.

Nota do tradutor: O módulo multiport permite que seja especificado múltiplas portas para um alvo. Podem ser especificadas até 15 portas em um único parâmetro e basta que uma porta confira para que a regra entre em ação, pois a comparação é feita usando o operador "or.

iptables -a forward -p udp -m multiport --dport 80,1024:65535 -j drop :: Esta regra bloqueia todos os pacotes vindo de todas interfaces para as portas 80 e todo o intervalo entre as portas 1024 e 65535.

osf :: O módulo "osf" faz fingerprinting passivo no sistema operacional. Este módulo compara alguns dados (tamanho da janela, mss, opções e sua ordem, TTL, df, e outros) a partir de pacotes com o conjunto de bits syn.

[!] --genre string :: Combina um operacional utilizando fingerprint (impressão digital) passiva.

--ttl level :: Faz verificações adicionais ttl sobre o pacote para determinar o sistema operacional.

Pode ser um dos seguintes valores:
  • 0 → Verdadeiro endereço IP e comparação fingerprint TTL. Geralmente feito em lans.
  • 1 → Verifica se o TTL do cabeçalho IP é menor do que a fingerprint. Geralmente feito para endereços globalmente roteáveis (wans, mans etc).
  • 2 → Não comparar o TTL.

--log level :: Loga determinado gêneros dentro do dmesg mesmo que não correspondam ao que se quer. O nível pode ser um dos seguintes valores:
  • 0 → Log de tudo ou das assinaturas desconhecidas
  • 1 → Acesse apenas o primeiro
  • 2 → Registra todas as assinaturas conhecidas correspondentes

Nota do tradutor: O módulo "osf" é bastante interessante para descobrir qual o sistema operacional de onde estão vindo os pacotes. Exemplo:

iptables -i input -j accept -p tcp -m osf --genre linux --log 0 --ttl 2

Este comando gera uma entrada no syslog parecida com esta abaixo:

windows [2000:sp3:windows xp pro sp1, 2000  sp3]:  11.22.33.55:4024  ->
       11.22.33.44:139  hops=3  linux [2.5-2.6:] : 1.2.3.4:42624 -> 1.2.3.5:22
       hops=4

Os fingerprints do sistema operacional são carregáveis utilizando o programa "nfnl_osf". Para carregar as fingerprints de um arquivo, utilize:

# nfnl_osf -f /usr/share/xtables/pf.os

Para remover:

# nfnl_osf -f /usr/share/xtables/pf.os -d

O banco de dados de fingerprints pode ser baixado de:
owner :: Este módulo tenta combinar várias características do criador do pacote, para pacotes gerados localmente. É válido apenas nas chains output e postrouting.

Pacotes enviados não têm qualquer socket associado a eles. Pacotes de threads do kernel têm um soquete, mas geralmente não proprietário:
  • [!] --uid-owner username
  • [!] --uid-owner userid[-userid] :: Combina se a estrutura do socket de pacotes de arquivos (se tiver uma) é de propriedade do usuário fornecido. Você também pode especificar um uid numérico ou um intervalo uid.
  • [!] --gid-owner groupname
  • [!] --gid-owner groupid[-groupid] :: Combina se a estrutura do socket para um pacote de arquivos é de propriedade de um grupo determinado. Você também pode especificar um gid numérico ou um intervalo gid.
  • [!] --socket-exists :: Combina se o pacote é associado com um soquete.

Nota do tradutor: O módulo "owner" só examina pacotes que possuem detalhes suficientes no cabeçalho, pacotes que não possuem detalhes suficientes de cabeçalho nunca serão conferidos!

iptables -a output -m owner --gid-owner 1 -p udp -j drop :: Esta regra rejeita conexões indo para portas UDP de pacotes criados pelos usuários pertencentes ao grupo 1.

physdev :: Este módulo corresponde à porta de entrada da ponte e dos dispositivos de saída escravizados num dispositivo de ponte. Este módulo é uma parte da infra-estrutura e permite um transparent bridging ip firewall e só é útil para as versões do kernel 2.5.44 e acima:
  • [!] --physdev-in name :: Nome de uma ponte de portas através do qual um pacote é recebido (somente para pacotes que entram nas chains input, forward e prerouting). Se o nome da interface termina em um "+", então qualquer interface que começa com este nome irá corresponder. Se o pacote não chegou por meio de um dispositivo de ponte, este pacote não irá corresponder a esta opção, a menos que '!' seja utilizado.
  • [!] --physdev-out name :: Nome de uma ponte de portas através da qual um pacote vai ser enviado (para pacotes que entram nas chains output, forward e postrouting).

    Se o nome da interface termina em um "+", então qualquer interface que começa com este nome irá corresponder. Note-se que a chain output de nat e mangle, não pode coincidir com a porta de saída da ponte, no entanto pode coincidir se for na chain output de filter. Se o pacote não sair por um dispositivo de ponte ou se o dispositivo é ainda desconhecido o pacote não irá corresponder a esta opção, a menos que '!' seja utilizado.

  • [!] --physdev-is-in :: Combina se o pacote entrou através de uma interface de ponte.
  • [!] --physdev-is-out :: Combina se o pacote vai sair através de uma interface de ponte.
  • [!] --physdev-is-bridged :: Combina se o pacote está sendo superado e, portanto, não está sendo roteado. Isto só é útil nas chains forward e postrouting.

pkttype :: Este módulo corresponde ao tipo de pacote da camada de enlace.

[!] --pkt-type {unicast|broadcast|multicast}

policy :: Este módulo corresponde à política utilizada por IPsec para o tratamento de um pacote:
  • --dir {in|out} :: Utilizado para selecionar a política usada para decapsulation ou para a política que será usada para encapsulamento. "in" é válido nas chains "prerouting, input" e "forward"; "out" é válido nas cahins "postrouting, output" e "forward".
  • --pol {none|ipsec} :: Combina se o pacote está sujeito a processamento IPsec.
  • --strict :: Combina se para corresponder à política exata ou se alguma regra da política coincide com a política determinada.
  • [!] --reqid id :: Corresponde ao reqid da regra de política. O reqid pode ser especificado com setkey(8) usando unique:id como nível.
  • [!] --spi spi :: Combina com o spi da sa.
  • [!] --proto {ah|esp|ipcomp} :: Coincide com o protocolo de encapsulamento.
  • [!] --mode {tunnel|transport} :: Coincide com o modo de encapsulamento.
  • [!] --tunnel-src addr[/mask] :: Corresponde à fonte de ponto final endereço de um modo túnel sa. Só é válida com "--mode tunnel".
  • [!] --tunnel-dst addr[/mask] :: Coincide com o endereço de destino do ponto final de um túnel de modo sa. Só é válida com --mode tunnel.

  • --next :: Inicia o próximo elemento da política especificada. Só pode ser utilizado com "--strict".

quota :: Implementa cotas de rede, diminuindo um contador de bytes em cada pacote:
  • --quota bytes :: Quota em bytes.

rateest :: O estimador de taxa pode corresponder com taxas estimadas coletadas pelo alvo "rateest". Ele suporta valores absolutos em bps/pps, comparando dois estimadores de taxa e de correspondência sobre a diferença entre dois estimadores de taxa:
  • --rateest1 name :: Nome do estimador de primeira.
  • --rateest2 name :: Nome do estimador de segunda (se a diferença deve ser calculado).
  • --rateest-delta :: Comparar difference(s) de determinadas rate(s)
  • --rateest1-bps value
  • --rateest2-bps value :: Compare bytes por segundo.
  • --rateest1-pps value
  • --rateest2-pps value :: Compare pacotes por segundo.
  • [!] --rateest-lt :: Combina se a taxa é menor do que a taxa dada rate/estimator.
  • [!] --rateest-gt :: Combina se a taxa é maior do que a taxa dada rate/estimator.
  • [!] --rateest-eq :: Combina se a taxa é igual à taxa dada rate/estimator.

Exemplo: Este é o que pode ser utilizado para conexões de percurso de saída de dados a partir de um servidor de FTP em duas linhas com base na largura de banda, disponível no momento que a conexão de dados foi iniciada:

#Estima as taxas de saída:
iptables -t mangle -a postrouting -o eth0 -j rateest --rateest-name eth0 --rateest-interval 250ms --rateest-ewma 0.5s
iptables -t mangle -a postrouting -o ppp0 -j rateest --rateest-name ppp0 --rateest-interval 250ms --rateest-ewma 0.5s
#Marca baseado na largura de banda disponível:
iptables -t mangle -a balance -m conntrack --ctstate new -m helper --helper ftp -m rateest --rateest-delta --rateest1 eth0 --rateest-bps1 2.5mbit --rateest-gt --rateest2 ppp0 --rateest-bps2 2mbit -j connmark --set-mark 1
iptables -t mangle -a balance -m conntrack --ctstate new -m helper --helper ftp -m rateest --rateest-delta --rateest1 ppp0 --rateest-bps1 2mbit --rateest-gt --rateest2 eth0 --rateest-bps2 2.5mbit -j connmark --set-mark 2
iptables -t mangle -a balance -j connmark --restore-mark


Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. Outras opções / Match Extensions
   3. Match Extensions (Parte 1)
   4. Match Extensions (Parte 2)
   5. Extensões alvo
   6. Diagnósticos / Compatibilidade / Autores
Outros artigos deste autor

Entendendo o que é URI, URL, URN e conhecendo as diferenças entre POST e GET

kernel Linux otimizado - Compilação e teste

Compilação do Squid 3 no Debian Wheezy

Instalar e configurar o Nftables com exemplos básicos de configurações

Instalando e Configurando o pgAgent no Linux (pgAdmin e PostgreSQL)

Leitura recomendada

Utilizando a ferramenta Iptstate

Um poderoso firewall para a sua rede wireless com IP x MAC

Endian Firewall - Solução completa para um servidor de internet

Controle de banda com Slackware 10 + CBQ + Iptables + DHCP

Firewall e NAT em FreeBSD com controle de banda e redirecionamento de portas e IPs

  
Comentários
[1] Comentário enviado por danniel-lara em 11/03/2013 - 19:59h

Parabéns ,
Ficou Bagual mesmo o Artigo
já esta nos favoritos , assim o dia que vir um Manolo querendo saber sobre Iptables
já tenho uma boa referencia de leitura para o vivente

[2] Comentário enviado por Buckminster em 11/03/2013 - 20:35h

Obrigado, tchê!

[3] Comentário enviado por l0g1in em 12/03/2013 - 01:16h

Parabéns ficou massa, tudo bem explicadinho e de facil compreensão belo manual e parabéns por disponibilizar seu tempo e seu conhecimento para galera do VOL, o mundo Software Livre agradece! [];

[4] Comentário enviado por Buckminster em 12/03/2013 - 02:14h

Grato. Estamos aí, fuçando no Linux.

[5] Comentário enviado por cruzeirense em 12/03/2013 - 10:37h

Parabens cara! Algo muito útil...

[6] Comentário enviado por Buckminster em 12/03/2013 - 15:41h

Grato. Estamos aí.

[7] Comentário enviado por Roger86 em 12/03/2013 - 18:07h

Muito bom !!! Parabéns.

[8] Comentário enviado por Buckminster em 13/03/2013 - 12:58h


[7] Comentário enviado por Roger86 em 12/03/2013 - 18:07h:

Muito bom !!! Parabéns.


Obrigado.

[9] Comentário enviado por phrich em 15/03/2013 - 16:48h

Excelente artigo!

[10] Comentário enviado por Buckminster em 15/03/2013 - 23:41h


[9] Comentário enviado por phrich em 15/03/2013 - 16:48h:

Excelente artigo!


Obrigado.


[11] Comentário enviado por Tacioandrade em 02/04/2013 - 13:42h

Parabéns pelo artigo, esse guia ficou simplificado, porem bem completo e explicativo, serve muito bem como um guia de bolso. =D


Sucesso.

[12] Comentário enviado por Buckminster em 02/04/2013 - 14:54h


[11] Comentário enviado por Tacioandrade em 02/04/2013 - 13:42h:

Parabéns pelo artigo, esse guia ficou simplificado, porem bem completo e explicativo, serve muito bem como um guia de bolso. =D


Sucesso.


Obrigado. A intenção foi essa mesma.

[13] Comentário enviado por IgorBruttal em 24/08/2013 - 06:58h

Muito bom, parabéns!

[14] Comentário enviado por elsonsantos em 28/08/2013 - 21:40h

Prezados,

Estou com o seguinte problema. Tenho um firewall configurado, controlando um rede da seguinte forma:

eth0 recebe internet
eth1 distribui a internet já filtrada e com squid (nao transparente)

A empresa mudou agora para um empresa de internet que interligou as 4 filiais e a matriz. O que acontece é que recebemos a internet através de um roteador dessa empresa pela porta 1 do roteador e a 2 faz a comunicação das outras 7.4 redes.
O que eu fiz foi ligar essa porta 1 na eth0 do meu firewall e coloquei a eth1 para a porta 2 do roteador da empresa de internet para que pegue as regras de meu firewall com squid.
Essa empresa pediu para que eu fizesse as regras corretamente pois o meu firewall que vai distribuir a net para as outras redes.

lá esta assim

chega o ip válido 177.x.x.x que vai na etho do firewall
sai 172.16.16.x na eth1 para a porta 2 do roteador da empresa. Essa porta 2 comunica com as demais redes:

filial1 172.16.17.x
filial2 172.16.18.x
filial3 172.16.18.x

Como faço o firewall controlar essas redes e compartilhar a internet. A intenção é que essas redes conversem entre si e respeitem as regras do proxy.

acho que é isso!!!

[15] Comentário enviado por Buckminster em 27/09/2013 - 02:24h


[14] Comentário enviado por elsonsantos em 28/08/2013 - 21:40h:

Prezados,

Estou com o seguinte problema. Tenho um firewall configurado, controlando um rede da seguinte forma:

eth0 recebe internet
eth1 distribui a internet já filtrada e com squid (nao transparente)

A empresa mudou agora para um empresa de internet que interligou as 4 filiais e a matriz. O que acontece é que recebemos a internet através de um roteador dessa empresa pela porta 1 do roteador e a 2 faz a comunicação das outras 7.4 redes.
O que eu fiz foi ligar essa porta 1 na eth0 do meu firewall e coloquei a eth1 para a porta 2 do roteador da empresa de internet para que pegue as regras de meu firewall com squid.
Essa empresa pediu para que eu fizesse as regras corretamente pois o meu firewall que vai distribuir a net para as outras redes.

lá esta assim

chega o ip válido 177.x.x.x que vai na etho do firewall
sai 172.16.16.x na eth1 para a porta 2 do roteador da empresa. Essa porta 2 comunica com as demais redes:

filial1 172.16.17.x
filial2 172.16.18.x
filial3 172.16.18.x

Como faço o firewall controlar essas redes e compartilhar a internet. A intenção é que essas redes conversem entre si e respeitem as regras do proxy.

acho que é isso!!!


Cria uma VPN entre as redes e depois tendo os servidores pingando as estações da rede remota através da VPN, faça o masquerade via Iptables da matriz para as filais.

Mais ou menos assim:

iptables -t nat -A POSTROUTING -s 172.16.16.0/xx -o tun0 -j MASQUERADE << Iptables Matriz


Depois libera a comunicação no FORWARD do servidor da Matriz e Filiais


Iptables Matriz:

iptables -A FORWARD -s 172.16.16.0/xx -d 172.16.17.0/xx -j ACCEPT
iptables -A FORWARD -s 172.16.16.0/xx -d 172.16.18.0/xx -j ACCEPT
iptables -A FORWARD -s 172.16.16.0/xx -d 172.16.19.0/xx -j ACCEPT

iptables -A FORWARD -s 177.x.x.0/xx -d 172.16.16.0 -p icmp -j ACCEPT

Iptables Filiais (essas duas regras abaixo você coloca em cada Iptables das filiais mudando os endereços de rede para cada filial):

iptables -A FORWARD -s 172.16.17.0/xx -d 172.16.16.0/xx -j ACCEPT
iptables -A FORWARD -s 177.x.x.0/xx -d 172.16.17.0/xx -p icmp -j ACCEPT

É mais ou menos isso. De repente você precise acrescentar uma regra ou outra, mas acredito que assim já dá para você ter uma boa idéia.

E como teu Squid não é transparente é só setar o proxy da matriz nos navegadores e redirecionar para ele no servidor da matriz com Iptables.

[16] Comentário enviado por removido em 18/11/2013 - 14:46h

òtima referência, parabéns, grande trabalho. Um ótimo link para responder a preguiçosos no fórum.

[17] Comentário enviado por Buckminster em 30/11/2013 - 01:19h


[16] Comentário enviado por tropper em 18/11/2013 - 14:46h:

òtima referência, parabéns, grande trabalho. Um ótimo link para responder a preguiçosos no fórum.


Obrigado.

[18] Comentário enviado por alysonpires em 05/12/2013 - 05:01h

Tu é o cara! Parabéns novamente!

[19] Comentário enviado por Buckminster em 16/12/2013 - 13:10h


[18] Comentário enviado por alysonpires em 05/12/2013 - 05:01h:

Tu é o cara! Parabéns novamente!


Obrigado!

[20] Comentário enviado por Kalang0o em 01/01/2014 - 11:01h

Buckminster,

Grato por compartilhar seu conhecimento, este material é uma excelente fonte de pesquisa e você está contribuindo para o aprendizado não só do pessoal daqui do VOL, mas também da galáxia inteira. Depois que o google inventou o "google tradutor", este artigo será visitado até pelo pessoal de outros planetas =].

Valeu !!!

[21] Comentário enviado por Buckminster em 10/01/2014 - 10:48h


[20] Comentário enviado por Kalang0o em 01/01/2014 - 11:01h:

Buckminster,

Grato por compartilhar seu conhecimento, este material é uma excelente fonte de pesquisa e você está contribuindo para o aprendizado não só do pessoal daqui do VOL, mas também da galáxia inteira. Depois que o google inventou o "google tradutor", este artigo será visitado até pelo pessoal de outros planetas =].

Valeu !!!


Obrigado.

O Google Tradutor é uma ótima ferramenta. Eu uso sempre quando estou com preguiça de traduzir um texto grande, depois é só ajeitar algumas coisas na tradução.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts