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: 98.926 ]

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

Compilação de Kernel

Instalação do Comodo Antivirus para Linux (CAVL) resolvendo o problema de dependências

Como um monte de letras de um código fonte transforma-se em voltagens?

Compilando kernel no Debian Squeeze

Instalação do PAP (PostgreSL, Apache2 e PHP7) no Debian Jessie

Leitura recomendada

IpCop - Um firewall personalizado

Conheça o firewall OpenGFW, uma implementação do (Great Firewall of China).

Dois links de ADSL em um mesmo servidor

Como construir um firewall de baixo custo para sua empresa (parte 2)

Bloqueando MSN, orkut, trojans e mais

  
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