Este é o comando ferm que pode ser executado no provedor de hospedagem gratuita OnWorks usando uma de nossas várias estações de trabalho online gratuitas, como Ubuntu Online, Fedora Online, emulador online do Windows ou emulador online do MAC OS
PROGRAMA:
NOME
ferm - um analisador de regra de firewall para linux
SINOPSE
ferm opções Arquivo de entrada
DESCRIÇÃO
ferm é uma interface para iptables. Ele lê as regras de um arquivo de configuração estruturado
e chamadas iptables(8) para inseri-los no kernel em execução.
fermO objetivo do é tornar as regras de firewall fáceis de escrever e ler. Tenta reduzir
a tediosa tarefa de escrever regras, permitindo que o administrador do firewall gaste
mais tempo no desenvolvimento de boas regras do que na implementação adequada da regra.
Para alcançar isto, ferm usa uma linguagem de configuração simples, mas poderosa, que permite
variáveis, funções, matrizes, blocos. Também permite que você inclua outros arquivos, permitindo
você a criar bibliotecas de estruturas e funções comumente usadas.
ferm, pronunciado "firme", significa "For Easy Rule Making".
CUIDADO
Esta página do manual faz não indend para lhe ensinar como funciona o firewall e como escrever bem
as regras. Já existe documentação suficiente sobre este assunto.
INTRODUÇÃO
Vamos começar com um exemplo simples:
corrente INPUT {
proto tcp ACEITAR;
}
Isso adicionará uma regra à cadeia de entrada predefinida, combinando e aceitando todos os tcp
pacotes. Ok, vamos complicar mais:
corrente (INPUT OUTPUT) {
proto (udp tcp) ACEITAR;
}
Isso irá inserir 4 regras, a saber, 2 na entrada da cadeia e 2 na saída da cadeia, correspondência e
aceitando pacotes udp e tcp. Normalmente você digitaria isto:
iptables -A INPUT -p tcp -j ACEITAR
iptables -A SAÍDA -p tcp -j ACEITAR
iptables -A INPUT -p udp -j ACEITAR
iptables -A SAÍDA -p udp -j ACEITAR
Observe o quanto menos digitação precisamos fazer? :-)
Basicamente, isso é tudo que há para fazer, embora você possa torná-lo bem mais complexo.
Algo para olhar:
corrente INPUT {
política ACEITAR;
daddr 10.0.0.0/8 proto tcp dport! ftp jump mychain sport: 1023 TOS 4 settos 8 mark 2;
daddr 10.0.0.0/8 proto tcp dport ftp REJEITAR;
}
O que quero dizer aqui é que * você * precisa criar regras legais, mantê-las legíveis para você e
outros, e não torná-lo uma bagunça.
Ajudaria o leitor se as regras de firewall resultantes fossem colocadas aqui para referência.
Além disso, você pode incluir a versão aninhada com melhor legibilidade.
Tente usar comentários para mostrar o que você está fazendo:
# esta linha ativa o proxy HTTP transparente para a rede interna:
proto tcp if eth0 daddr! 192.168.0.0/255.255.255.0
dport http REDIRECT para portas 3128;
Você ficará grato por isso mais tarde!
corrente INPUT {
política ACEITAR;
interface (eth0 ppp0) {
# nega o acesso a hackers notorius, retorna aqui se não houver correspondência
# foi encontrado para retomar o firewall normal
pular bandidos;
protocolo tcp jump fw_tcp;
protocolo udp jump fw_udp;
}
}
Quanto mais você aninha, melhor fica. Certifique-se de que o pedido que você especificou está correto, você
não gostaria de fazer isso:
corrente FORWARD {
proto! udp DROP;
proto tcp dport ftp ACEITAR;
}
porque a segunda regra nunca corresponderá. A melhor maneira é especificar primeiro tudo que é
permitido e, em seguida, negar tudo o mais. Veja os exemplos para mais instantâneos bons.
A maioria das pessoas faz algo assim:
protocolo tcp {
portar (
ssh httpftp
) ACEITAR;
dport 1024: 65535! syn ACCEPT;
DERRUBAR;
}
ESTRUTURA OF A FIREWALL ARQUIVO
A estrutura de um arquivo de firewall adequado parece um código C simplificado. Somente alguns
caracteres sintáticos são usados em arquivos de configuração ferm. Além desses especiais
caracteres, ferm usa 'chaves' e 'valores', pense neles como opções e parâmetros, ou como
variáveis e valores, qualquer que seja.
Com essas palavras, você define as características do seu firewall. Cada firewall
consiste em duas coisas: primeiro, verifique se o tráfego da rede corresponde a certas condições e
segundo, o que fazer com esse tráfego.
Você pode especificar condições que são válidas para o programa de interface do kernel que está usando,
provavelmente iptables(8). Por exemplo, em iptables, quando você está tentando combinar pacotes tcp,
você diria:
iptables --protocol tcp
Em ferm, isso se tornará:
protocolo tcp;
Apenas digitar isso em ferm não faz nada, você precisa dizer a ferm (na verdade, você precisa
dizer iptables(8) e o kernel) o que fazer com qualquer tráfego que corresponda a esta condição:
iptables --protocol tcp -j ACEITAR
Ou traduzido para ferm:
protocolo tcp ACEITAR;
O ; personagem está no final de cada regra de ferm. Ferm ignora quebras de linha, o que significa que o
o exemplo acima é idêntico ao seguinte:
protocolo tcp
ACEITAR;
Aqui está uma lista dos caracteres especiais:
; Este personagem finaliza uma regra.
Separados por ponto e vírgula, você pode escrever várias regras em uma linha, embora isso
diminui a legibilidade:
protocolo tcp ACEITAR; protocolo udp DROP;
{} O símbolo de aninhamento define um 'bloco' de regras.
As chaves contêm qualquer número de regras aninhadas. Todas as partidas antes do
bloco são transportados para estes.
A chave de fechamento finaliza o conjunto de regras. Você não deve escrever um ';' depois de
isso, porque isso seria uma regra vazia.
Exemplo:
corrente INPUT proto icmp {
ACEITAR solicitação de eco do tipo icmp;
DERRUBAR;
}
Este bloco mostra duas regras dentro de um bloco, que serão ambas mescladas com qualquer coisa
na frente dele, então você terá duas regras:
iptables -A INPUT -p icmp --icmp-type echo-request -j ACEITAR
iptables -A INPUT -p icmp -j DROP
Pode haver vários níveis de aninhamento:
corrente INPUT {
protoicmp {
ACEITAR solicitação de eco do tipo icmp;
DERRUBAR;
}
daddr 172.16.0.0/12 REJEITAR;
}
Observe que a regra 'REJEITAR' não é afetada pelo 'proto icmp', embora não haja
';' após a chave de fechamento. Traduzido para iptables:
iptables -A INPUT -p icmp --icmp-type echo-request -j ACEITAR
iptables -A INPUT -p icmp -j DROP
iptables -A INPUT -d 172.16.0.0/12 -j REJEITAR
$ Expansão variável. Substitui '$ FOO' pelo valor da variável. Veja a seção
VARIÁVEIS para obter detalhes.
& Chamada de função. Veja a seção FUNÇÕES para obter detalhes.
() O símbolo da matriz. Usando os parênteses, você pode definir uma 'lista' de valores que
deve ser aplicado para a chave à esquerda dela.
Exemplo:
protocolo (tcp udp icmp)
isso resultará em três regras:
... -p tcp ...
... -pudp...
... -p icmp ...
Apenas valores podem ser 'listados', então você não pode fazer algo assim:
proto tcp (ACEITAR LOG);
mas você pode fazer isso:
cadeia (INPUT OUTPUT FORWARD) proto (icmp udp tcp) DROP;
(o que resultará em nove regras!)
Os valores são separados por espaços. O símbolo da matriz é tanto à esquerda quanto à direita
associativo, em contraste com o bloco de aninhamento, que é associativo apenas à esquerda.
"#" O símbolo de comentário. Qualquer coisa que siga este símbolo até o final da linha é
ignorado.
"` comando` "
Execute o comando em um shell e insira a saída do processo. Veja a seção
crases para obter detalhes.
'fragmento'
Cite uma string que pode conter espaços em branco, o cifrão etc.
LOG prefixo de log 'ei, este é meu prefixo de log!';
"fragmento"
Cite uma string (veja acima), mas as referências de variáveis com um cifrão são
avaliado:
DNAT para "$ myhost: $ myport";
Palavras-chave
Na seção anterior, já introduzimos algumas palavras-chave básicas como "corrente",
"protocolo" e "ACEITAR". Vamos explorar sua natureza.
Existem três tipos de palavras-chave:
· local palavras-chave definem onde uma regra será criada. Exemplo: "mesa", "corrente".
· partida palavras-chave realizam um teste em todos os pacotes aprovados. A regra atual é sem
efeito se uma (ou mais) das correspondências não passar. Exemplo: "proto", "daddr".
A maioria das correspondências é seguida por um parâmetro: "proto tcp", "daddr 172.16.0.0/12".
· alvo palavras-chave indicam o que fazer com um pacote. Exemplo: "ACEITAR", "REJEITAR",
"pular".
Alguns alvos definem mais palavras-chave para especificar detalhes: "REJEITAR rejeição com icmp-
net-inacessível ".
Cada regra consiste em um local e uma alvo, mais qualquer número de fósforos:
filtro de tabela # localização
proto tcp dport (http https) # corresponde
ACEITAR; # alvo
A rigor, existe um quarto tipo: ferm palavras-chave (que controlam os
comportamento), mas eles serão explicados posteriormente.
Parâmetros Técnicos
Muitas palavras-chave usam parâmetros. Eles podem ser especificados como literais, referências de variáveis ou
listas (matrizes):
proto udp
saddr $ TRUSTED_HOSTS;
protocolo tcp dport (http https ssh);
LOG com o prefixo do log "alerta funky wardriver:";
Alguns deles podem ser negados (as listas não podem ser negadas):
proto! esp;
proto udp dport! domain;
Palavras-chave que não aceitam parâmetros são negadas por um prefixo '!':
proto tcp! syn;
Ler iptables(8) para ver onde o ! pode ser usado.
BASIC CHAVES
Localização palavras-chave
domínio [ip | ip6]
Defina o domínio. "ip" é o padrão e significa "IPv4" (iptables). "ip6" é para IPv6
suporte, usando "ip6tables".
mesa [filtro | nat | mangle]
Especifica em qual tabela netfilter esta regra será inserida: "filtro" (padrão),
"nat" ou "mangle".
cadeia [nome da rede]
Especifica a cadeia netfilter (dentro da tabela atual) esta regra será
inserido em. Nomes de cadeias predefinidas comuns são "INPUT", "OUTPUT", "FORWARD",
"PREROUTING", "POSTROUTING", dependendo da tabela. Veja o netfilter
documentação para detalhes.
Se você especificar uma corrente não existente aqui, ferm irá adicionar a regra a uma corrente personalizada
com esse nome.
Privacidade [ACEITAR | SOLTAR | ..]
Especifica a política padrão para a cadeia atual (apenas integrado). Pode ser um de
os alvos integrados (ACCEPT, DROP, REJECT, ...). Um pacote que não corresponde a nenhuma regra
em uma cadeia serão tratados conforme especificado pela política.
Para evitar ambigüidade, sempre especifique as políticas de todas as cadeias predefinidas
explicitamente.
@subcadeia ["CHAIN-NAME"] { ... }
Funciona como os operadores de bloco normais (ou seja, sem o @subcadeia palavra-chave), exceto
que. ferm move as regras dentro das chaves para uma nova cadeia personalizada. O nome
para esta cadeia é escolhido automaticamente por ferm.
Em muitos casos, isso é mais rápido do que apenas um bloco, porque o kernel pode pular um
enorme bloco de regras quando uma pré-condição é falsa. Imagine o seguinte exemplo:
cadeia de filtro de tabela INPUT {
saddr (1.2.3.4 2.3.4.5 3.4.5.6 4.5.6.7 5.6.7.8) {
proto tcp dport (http https ssh) ACEITAR;
domínio proto udp dport ACEITAR;
}
}
Isso gera 20 regras. Quando chega um pacote que não passa no sadr
coincidir, mesmo assim verifica todas as 20 regras. Com @subcadeia, esta verificação está feita
uma vez, resultando em filtragem de rede mais rápida e menos carga de CPU:
cadeia de filtro de tabela INPUT {
saddr (1.2.3.4 2.3.4.5 3.4.5.6 4.5.6.7 5.6.7.8) @subchain {
proto tcp dport (http https ssh) ACEITAR;
domínio proto udp dport ACEITAR;
}
}
Opcionalmente, você pode definir o nome da sub-cadeia:
saddr (1.2.3.4 2.3.4.5 3.4.5.6) @subchain "foobar" {
proto tcp dport (http https ssh) ACEITAR;
domínio proto udp dport ACEITAR;
}
O nome pode ser um literal de string entre aspas ou uma expressão de ferm expandida
como @cat ("interface_", $ iface) ou @substr ($ var, 0,20).
Você pode conseguir o mesmo declarando explicitamente uma cadeia personalizada, mas pode sentir
que usando @subcadeia requer menos digitação.
Basico iptables partida palavras-chave
interface [nome-da-interface]
Defina o nome da interface, sua placa de rede externa, como eth0, ou dialup como
ppp1, ou qualquer dispositivo que você deseja combinar para a passagem de pacotes. É equivalente
ao interruptor "-i" em iptables(8).
face externa [nome-da-interface]
O mesmo que a interface, apenas para combinar a interface de saída para um pacote, como em
iptables(8).
protocolo [nome do protocolo | número do protocolo]
Atualmente suportados pelo kernel são tcp, udp e icmp, ou seus respectivos
números.
saddr | daddr [endereço-especificação]
Corresponde a pacotes originados do endereço especificado (saddr) ou direcionados a
o endereço (daddr).
Exemplos:
saddr 192.168 / 8 ACCEPT; # (idêntico ao próximo :)
saddr 192.168.0.0/255.255.255.0 ACEITAR;
daddr meu.domínio.com ACEITAR;
fragmento
Especifique que apenas pacotes IP fragmentados devem ser combinados. Quando os pacotes são
maior que o tamanho máximo do pacote que seu sistema pode manipular (chamado Máximo
Unidade de transmissão ou MTU) eles serão cortados em bits e enviados um por um como
pacotes únicos. Ver ifconfig(8) se você deseja encontrar o MTU para o seu sistema (o
o padrão é geralmente 1500 bytes).
Fragmentos são freqüentemente usados em ataques DOS, porque não há maneira de encontrar
a origem de um pacote de fragmento.
esporte | dport [especificação de porta]
Corresponde a pacotes na porta TCP ou UDP especificada. "esporte" corresponde à fonte
porta e dport correspondem à porta de destino.
Esta correspondência pode ser usada somente após você especificar "protocolo tcp" ou "protocolo udp",
porque apenas esses dois protocolos realmente têm portas.
E alguns exemplos de portas / intervalos válidos:
dport 80 ACEITAR;
dport http ACEITAR;
dport ssh: http ACCEPT;
dport 0: 1023 ACEITAR; # equivalente a: 1023
dport 1023: 65535 ACEITAR;
syn Especifique que o sinalizador SYN em um pacote tcp deve ser correspondido, que é usado para
construir novas conexões tcp. Você pode identificar conexões de entrada com isso, e
decida se você deseja permitir ou não. Os pacotes que não possuem este sinalizador são
provavelmente de uma conexão já estabelecida, por isso é considerado razoavelmente
seguro deixá-los passar.
módulo [nome do módulo]
Carregue um módulo iptables. A maioria dos módulos fornece mais palavras-chave correspondentes. Nós chegaremos a
isso mais tarde.
Basico alvo palavras-chave
saltar [nome da cadeia personalizada]
Salta para uma cadeia personalizada. Se nenhuma regra na cadeia personalizada corresponder, netfilter retorna
para a próxima regra na cadeia anterior.
Realgoto [nome da cadeia personalizada]
Vá para uma rede personalizada. Ao contrário do saltar opção, RETORNO não vai continuar a processar
nesta cadeia, mas na cadeia que nos ligou via saltar.
A palavra-chave Realgoto foi escolhido durante o período de transição, porque Goto
(já obsoleto) costumava ser um alias para saltar.
ACEITAR Aceita pacotes correspondentes.
GOTA Elimine os pacotes correspondentes sem aviso prévio.
REJEITAR Rejeita pacotes correspondentes, ou seja, envia um pacote ICMP ao remetente, que é a porta
inacessível por padrão. Você pode especificar outro tipo de ICMP.
REJEITAR; # padrão para icmp-port-unreachable
REJEITAR rejeitar com icmp-net-unreachable;
Digite "iptables -j REJECT -h" para obter detalhes.
RETORNO Termine a corrente atual e retorne à corrente de chamada (se "pule
[custom-chain-name] "foi usado).
NOP Nenhuma ação.
ADICIONAL CHAVES
O Netfilter é modular. Os módulos podem fornecer alvos adicionais e palavras-chave correspondentes. A lista
de módulos netfilter está em constante crescimento, e a Ferm tenta mantê-los com suporte
tudo. Este capítulo descreve os módulos que são atualmente suportados.
iptables partida módulos
conta Tráfego de conta para todos os hosts na rede / máscara de rede definida. Este é um dos
combinar módulos que se comportam como um alvo, ou seja, você terá que usar principalmente o NOP
alvo.
conta mod aname mynetwork aaddr 192.168.1.0/24 ashort NOP;
tipo de endereço
Verifique o tipo de endereço; endereço de origem ou endereço de destino.
mod addrtype tipo src BROADCAST;
mod addrtype tipo dst LOCAL;
Digite "iptables -m addrtype -h" para obter detalhes.
ah Verifica o cabeçalho SPI em um pacote AH.
mod ah ahspi 0x101;
mod ah ahspi! 0x200: 0x2ff;
Argumentos adicionais para IPv6:
mod ah ahlen 32 ACEITAR;
mod ah ahlen! 32 ACEITAR;
mod ah ahres ACEITAR;
comentar Adiciona um comentário de até 256 caracteres a uma regra, sem efeito. Observe que
ao contrário dos comentários do ferm ('#'), este aparecerá em "iptables -L".
comentário do mod comentário "Este é o meu comentário." ACEITAR;
condição
Corresponde se um valor em / proc / net / ipt_condition / NAME for 1 (o caminho é
/ proc / net / ip6t_condition / NAME para o domínio ip6).
condição de mod condição (abc def) ACEITAR;
condição de mod condição! foo ACEITAR;
conbytes
Corresponde por quantos bytes ou pacotes uma conexão (ou um dos dois fluxos
que constituem a conexão) foram transferidos até agora, ou pela média de bytes por
pacote.
mod connbytes connbytes 65536: connbytes-dir ambos os bytes em modo connbytes ACEITAR;
mod connbytes connbytes! 1024: 2048 connbytes-dir responder pacotes em modo connbytes ACEITAR;
Valores válidos para connbytes-dir: original, resposta, ambos; para modo connbytes:
pacotes, bytes, avgpkt.
confinamento
Permite que você restrinja o número de conexões TCP paralelas a um servidor por
endereço IP do cliente (ou bloco de endereço).
mod connlimit connlimit-acima 4 REJECT;
mod connlimit connlimit-above! 4 ACEITAR;
mod connlimit connlimit-acima 4 connlimit-mask 24 REJECT;
marcar
Verifique o campo de marca associado à conexão, definido pelo destino CONNMARK.
mod connmark marca 64;
mod connmark marca 6/7;
conntrack
Verifique as informações de rastreamento de conexão.
mod conntrack ctstate (ESTABELECIDO RELACIONADO);
mod conntrack ctproto tcp;
mod conntrack crigsrc 192.168.0.2;
mod conntrack crigdst 1.2.3.0/24;
mod conntrack crigsrcport 67;
mod conntrack crigdstport 22;
mod conntrack ctreplsrc 2.3.4.5;
mod conntrack ctrepldst! 3.4.5.6;
mod conntrack ctstatus GARANTIDO;
mod conntrack ctexpire 60;
mod conntrack ctexpire 180: 240;
Digite "iptables -m conntrack -h" para obter detalhes.
DCCP Verifique os atributos específicos do DCCP (Datagram Congestion Control Protocol). Isto
módulo é carregado automaticamente quando você usa "protocolo dccp".
proto dccp sport 1234 dport 2345 ACEITAR;
tipos dccp proto dccp (SYNCACK ACK) ACEITAR;
proto dccp dccp-types! REQUEST DROP;
proto dccp dccp-opção 2 ACEITAR;
dscp Corresponde ao campo DSCP de 6 bits dentro do campo TOS.
mod dscp dscp 11;
mod dscp AF41 da classe dscp;
ecn Corresponde aos bits ECN de um cabeçalho TCP IPv4.
mod ecn ecn-tcp-cwr;
mod ecn ecn-tcp-ece;
mod ecn ecn-ip-ect 2;
Digite "iptables -m ecn -h" para obter detalhes.
esp Verifica o cabeçalho SPI em um pacote ESP.
mod esp esp 0x101;
mod esp espspi! 0x200: 0x2ff;
eui64 "Este módulo corresponde à parte EUI-64 de um endereço IPv6 autoconfigurado sem estado.
Ele compara o EUI-64 derivado do endereço MAC de origem no quadro Ehternet com
os 64 bits inferiores do endereço de origem IPv6. Mas o bit "Universal / Local" não é
comparados. Este módulo não corresponde a outro quadro de camada de link e só é válido em
as cadeias PREROUTING, INPUT e FORWARD. "
mod eui64 ACEITAR;
fuzzy "Este módulo corresponde a um limite de taxa baseado em um controlador de lógica difusa [FLC]."
mod fuzzy limite inferior 10 limite superior 20 ACEITAR;
hbh Corresponde ao cabeçalho Hop-by-Hop Options (ip6).
mod hbh hbh-len 8 ACEITAR;
mod hbh hbh-len! 8 ACEITAR;
mod hbh hbh-opts (1: 4 2: 8) ACEITAR;
hl Corresponde ao campo Hop Limit (ip6).
mod hl hl-eq (8 10) ACEITAR;
mod hl hl-eq! 5 ACEITAR;
mod hl hl-gt 15 ACEITAR;
mod hl hl-lt 2 ACEITAR;
ajudante Verifica qual módulo auxiliar conntrack rastreia esta conexão. O porto pode ser
especificado com "-portnr".
mod helper ajudante irc ACEITAR;
mod helper helper ftp-21 ACEITAR;
icmp Verifique os atributos específicos do ICMP. Este módulo é carregado automaticamente quando você usa
"protocolo icmp".
proto icmp tipo icmp echo-request ACEITAR;
Esta opção também pode ser usada em ip6 domínio, embora seja chamado icmpv6 in
tabelas ip6.
Use "iptables -p icmp" -h "" para obter uma lista de tipos de ICMP válidos.
Intervalo de IP Corresponde a um intervalo de endereços IPv4.
mod iprange intervalo src 192.168.2.0-192.168.3.255;
mod iprange dst-range! 192.168.6.0-192.168.6.255;
opções ipv4
Corresponder nas opções de cabeçalho IPv4, como roteamento de origem, rota de registro, carimbo de data / hora e
alerta do roteador.
mod ipv4options ssrr ACEITAR;
mod ipv4options lsrr ACEITAR;
mod ipv4options no-srr ACEITAR;
mod ipv4options! rr ACEITAR;
mod ipv4options! ts ACEITAR;
mod ipv4options! ra ACEITAR;
mod ipv4options! any-opt ACEITAR;
cabeçalho ipv6
Corresponde ao cabeçalho de extensão IPv6 (ip6).
cabeçalho mod ipv6header! (frag de salto) ACEITAR;
cabeçalho mod ipv6header (auth dst) ACEITAR;
limite de hash
Semelhante ao 'limite de mod', mas adiciona a capacidade de adicionar por destino ou por porta
limites gerenciados em uma tabela hash.
mod hashlimit hashlimit 10 / minuto hashlimit-burst 30 / minuto
modo hashlimit dstip nome-limite de hash foobar ACCEPT;
Valores possíveis para o modo hashlimit: dstip dstport srcip srcport (ou uma lista com
mais de um destes).
Existem mais configurações possíveis, digite "iptables -m hashlimit -h" para
documentação.
comprimento Verifique o comprimento do pacote.
comprimento do mod comprimento 128; # exatamente 128 bytes
comprimento do mod comprimento 512: 768; # alcance
comprimento do comprimento do mod! 256; # negado
limitar Limita a taxa de pacotes.
limite de mod limit 1 / segundo;
limite de mod limite 15 / minuto limite-burst 10;
Digite "iptables -m limit -h" para obter detalhes.
mac Corresponde ao endereço MAC de origem.
mod mac mac-source 01: 23: 45: 67: 89;
marca Corresponde aos pacotes com base em seu campo de marca do filtro de rede. Pode ser um número inteiro de 32 bits
entre 0 e 4294967295.
marca mod marca 42;
mh Corresponde ao cabeçalho de mobilidade (domínio ip6).
atualização de ligação do tipo mh proto mh ACCEPT;
multiporta
Corresponde a um conjunto de portas de origem ou de destino (apenas UDP e TCP).
portas fonte multiport mod (https ftp);
portas de destino mod multiport (domínio mysql);
Esta regra tem uma grande vantagem sobre "dport" e "esporte": ela gera apenas uma regra
para até 15 portas em vez de uma regra para cada porta.
enésimo Combine cada 'enésimo pacote.
mod nth a cada 3;
mod nth contador 5 a cada 2;
mod nth start 2 a cada 3;
mod nth start 5 pacote 2 a cada 6;
Digite "iptables -m nth -h" para obter detalhes.
osf Combine os pacotes dependendo do sistema operacional do remetente.
mod osf gênero Linux;
mod osf! gênero FreeBSD ttl 1 log 1;
Digite "iptables -m osf -h" para obter detalhes.
proprietário Verifique as informações sobre o criador do pacote, ou seja, id do usuário, id do grupo, id do processo,
id da sessão e nome do comando.
proprietário do mod uid-owner 0;
proprietário do mod gid-owner 1000;
proprietário do mod pid-proprietário 5432;
proprietário do mod sid-owner 6543;
mod owner cmd-owner "sendmail";
("cmd-owner", "pid-owner" e "sid-owner" requerem patches especiais do kernel não
incluído no kernel Linux vanilla)
Physdev Corresponde ao dispositivo físico no qual um pacote entrou ou está prestes a deixar o
máquina. Isso é útil para interfaces com ponte.
mod physdev physdev-in ppp1;
mod physdev physdev-out eth2;
mod physdev physdev-está em;
mod physdev physdev-está fora;
mod physdev physdev-está em ponte;
tipo de pkt Verifique o tipo de pacote da camada de link.
mod pkttype unicast do tipo pkt;
mod pkttype difusão do tipo pkt;
mod pkttype multicast do tipo pkt;
Privacidade Corresponde à política IPsec aplicada a este pacote.
mod política dir out pol ipsec ACEITAR;
mod policy strict reqid 23 spi 0x10 proto ah ACEITAR;
modo de política do mod túnel tunnel-src 192.168.1.2 ACEITAR;
modo de política de mod túnel tunnel-dst 192.168.2.1 ACEITAR;
política de mod restrita próximo reqid 24 spi 0x11 ACEITAR;
Observe que a palavra-chave proto também é usado como uma versão abreviada de protocolo
(módulo de correspondência embutido). Você pode corrigir esse conflito sempre usando o longo
palavra chave protocolo.
psd Detecte varreduras de porta TCP / UDP.
mod psd psd-limite de peso 21 psd-delay-limite 300
psd-lo-portas-peso 3 psd-hi-portas-peso 1 DROP;
quota Implementa cotas de rede diminuindo um contador de bytes com cada pacote.
mod quota quota 65536 ACEITAR;
acaso Corresponde a uma porcentagem aleatória de todos os pacotes.
média aleatória mod 70;
reino Corresponde ao domínio de roteamento. Útil em ambientes que usam BGP.
mod reino 3;
recentemente Marque temporariamente os endereços IP de origem.
mod conjunto recente;
mod rcheck recente segundos 60;
mod conjunto recente nome do recurso "bandido";
mod conjunto recente rdest;
mod rcheck recente rsource nome "bandido" segundos 60;
mod atualização recente segundos 120 hitcount 3 rttl;
Este módulo netfilter tem uma falha de design: embora seja implementado como uma correspondência
módulo, ele tem um comportamento semelhante ao de destino ao usar a palavra-chave "set".
<http://snowman.net/projects/ipt_recent/>
rt Corresponde ao cabeçalho de roteamento IPv6 (somente ip6).
mod rt rt-tipo 2 rt-len 20 ACEITAR;
mod rt rt-type! 2 rt-len! 20 ACEITAR;
mod rt rt-segsleft 2: 3 ACEITAR;
mod rt rt-segsleft! 4: 5 ACEITAR;
mod rt rt-0-res rt-0-addrs (:: 1 :: 2) rt-0-não-estrito ACEITAR;
sctp Verifique os atributos específicos do SCTP (Stream Control Transmission Protocol). Isto
o módulo é carregado automaticamente quando você usa "protocol sctp".
proto sctp sport 1234 dport 2345 ACEITAR;
proto sctp chunk-types apenas DATA: Be ACCEPT;
proto sctp chunk-types qualquer (INIT INIT_ACK) ACCEPT;
proto sctp chunk-types! all (HEARTBEAT) ACEITAR;
Use "iptables -p sctp" -h "" para obter uma lista de tipos de pedaços válidos.
conjunto Verifica o IP / porta / MAC de origem ou destino em relação a um conjunto.
mod set set bandidos src DROP;
Vejohttp://ipset.netfilter.org/> para mais informações.
estado Verifica o estado de rastreamento de conexão.
mod estado estado INVALID DROP;
estado do mod estado (ESTABLISHED RELACIONATED) ACEITAR;
Digite "iptables -m state -h" para obter detalhes.
estatística
Sucessor de enésimo e acaso, atualmente em situação irregular no iptables(8) página de manual.
probabilidade aleatória do modo estatístico mod 0.8 ACEITAR;
modo estatístico mod n-ésimo a cada 5 pacotes 0 DROP;
corda Corresponde a uma string.
mod string string "foo bar" ACEITAR;
mod string algo kmp de 64 a 128 hex-string "deadbeef" ACEITAR;
tcp Verifica atributos específicos de TCP. Este módulo é carregado automaticamente quando você usa
"protocolo tcp".
proto tcp esporte 1234;
protocolo tcp dport 2345;
sinalizadores de tcp de proto tcp (SYN ACK) SYN;
proto tcp tcp-flags! (SYN ACK) SYN;
proto tcp tcp-flags ALL (RST ACK);
sin proto tcp;
proto tcp tcp-opção 2;
protocolo tcp mss 512;
Digite "iptables -p tcp -h" para obter detalhes.
tcpmss Verifique o campo TCP MSS de um pacote SYN ou SYN / ACK.
mod tcpmss mss 123 ACEITAR;
mod tcpmss mss 234: 567 ACEITAR;
tempo Verifique se a hora de chegada do pacote está dentro do intervalo determinado.
horário do mod início 12:00;
hora do mod timetop 13:30;
dias mod time (Seg Qua Sex);
mod time datestart 2005: 01: 01;
mod time datestart 2005: 01: 01: 23: 59: 59;
mod time datestop 2005: 04: 01;
mod hora mês dia (30 31);
dias de semana mod time (Quarta Qui);
horário do mod início 12:00 utc;
horário do mod início 12:00 localtz;
Digite "iptables -m time -h" para obter detalhes.
tossir Corresponde a um pacote no valor TOS especificado.
mod tos tos Minimizar-Custo ACEITAR;
mod tos tos! Serviço normal ACEITAR;
Digite "iptables -m tos -h" para obter detalhes.
ttl Corresponde ao campo ttl (tempo de vida) no cabeçalho IP.
mod ttl ttl-eq 12; #ttl é igual
mod ttl ttl-gt 10; # ttl maior que
mod ttl ttl-lt 16; # ttl menor que
u32 Compara dados brutos do pacote. Você pode especificar mais de um filtro em um ferm
Lista; eles não são expandidos em várias regras.
mod u32 u32 '6 & 0xFF = 1' ACEITAR;
mod u32 u32 ('27 & 0x8f = 7 ''31 = 0x527c4833') DROP;
imundo Corresponde a pacotes que parecem malformados ou incomuns. Esta partida não tem mais
parâmetros.
iptables alvo módulos
Os seguintes alvos adicionais estão disponíveis em ferm, desde que você os habilitou em
seu kernel:
CLASSIFICAR
Defina a classe CBQ.
CLASSIFICAR set-class 3:50;
CLUSTERIP
Configure um cluster simples de nós que compartilham um determinado endereço IP e MAC.
As conexões são distribuídas estaticamente entre os nós.
CLUSTERIP novo hashmode sourceip clustermac 00: 12: 34: 45: 67: 89
nós totais 4 nós locais 2 hash-init 12345;
CONNMARK
Define o valor da marca netfilter associado a uma conexão.
CONNMARK marca de ajuste 42;
CONNMARK salvar marca;
Marca de restauração CONNMARK;
CONNMARK máscara de marca de salvamento 0x7fff;
CONNMARK máscara de restauração de marca 0x8000;
CONNSECMARK
Este módulo copia as marcações de segurança de pacotes para conexões (se não rotulado),
e de conexões de volta para pacotes (também apenas se não rotulado). Normalmente usado em
em conjunto com o SECMARK, só é válido na tabela mangle.
CONNSECMARK salvar;
Restauração de CONNSECMARK;
DTA para [endereço ip | intervalo de ip | intervalo de porta ip]
Altere o endereço de destino do pacote.
DNAT a 10.0.0.4;
DNAT a 10.0.0.4:80;
DNAT para 10.0.0.4:1024-2048;
DNAT a 10.0.1.1-10.0.1.20;
ECN Este alvo permite contornar seletivamente buracos negros ECN conhecidos. Só pode
ser usado na mesa de mangle.
ECN ecn-tcp-remover;
HL Modifique o campo Limite de saltos IPv6 (somente ip6 / mangle).
HL hl-conjunto 5;
HL hl-dez 2;
HL hl-inc 1;
IPV4OPTSSTRIP
Retire todas as opções de IP de um pacote. Este módulo não possui opções.
IPV4OPTSSTRIP;
LOG Registre todos os pacotes que correspondem a esta regra no registro do kernel. Cuidado com o log
inundações. Observe que este é um "alvo sem terminação", ou seja, passagem de regra
continua na próxima regra.
LOG prefixo de log de aviso de nível de log "Olhe para isto:";
LOG log-tcp-seqüência log-tcp-options;
Opções de log-ip do LOG;
MARCA Define o campo de marca do filtro de rede para o pacote (um inteiro de 32 bits entre 0 e
4294967295):
MARK marca de ajuste 42;
MARCA set-xmark 7/3;
MARK e-mark 31;
MARCA ou marca 1;
MARCA xor-marca 12;
MASQUERADE
Pacotes de correspondência de máscaras. Opcionalmente seguido por uma porta ou intervalo de portas para
iptables. Especifique como "123", "123-456" ou "123: 456". O parâmetro de intervalo de porta
especifica de quais portas locais as conexões mascaradas devem se originar.
MASCARADA;
MASQUERADE para portas 1234: 2345;
MASQUERADE para portas 1234: 2345 aleatórias;
ESPELHO Alvo de demonstração experimental que inverte os campos de origem e destino
no cabeçalho IP.
ESPELHO;
MAPA DE REDE Mapeie uma rede inteira em outra rede no nat tabela.
NETMAP para 192.168.2.0/24;
NENHUMA FAIXA Desative o rastreamento de conexão para todos os pacotes que correspondem a essa regra.
proto tcp dport (135: 139 445) NOTRACK;
NFLOG Log de pacotes por netlink; este é o sucessor de ULOG.
NFLOG nflog-group 5 nflog-prefix "Veja isto:";
NFLOG nflog-intervalo 256;
NFLOG nflog-limiar 10;
NFQUEUE Enfileiramento de espaço de usuário, requer suporte de kernel nfnetlink_queue.
proto tcp dport ftp NFQUEUE fila-num 20;
FILA Enfileiramento do espaço do usuário, o predecessor do NFQUEUE. Todos os pacotes vão para a fila 0.
proto tcp dport ftp FILA;
REDIRECIONAR portas de entrada [portas]
Proxy transparente: altera o IP de destino do pacote para a máquina
si.
proto tcp dport http REDIRECT às portas 3128;
proto tcp dport http REDIRECIONAR para portas 3128 aleatórias;
MESMO Semelhante ao SNAT, mas um cliente é mapeado para o mesmo IP de origem para todos os seus
conexões.
SAME a 1.2.3.4-1.2.3.7;
SAME para 1.2.3.8-1.2.3.15 nodst;
SAME a 1.2.3.16-1.2.3.31 aleatório;
SECMARK Isso é usado para definir o valor da marca de segurança associada ao pacote para uso por
subsistemas de segurança, como SELinux. Só é válido na tabela de mangle.
SECMARK selctx "system_u: object_r: httpd_packet_t: s0";
SET [add-set | del-set] [nome do conjunto] [bandeiras)]
Adicione o IP ao conjunto especificado. Verhttp://ipset.netfilter.org/>
proto icmp tipo icmp echo-request SET add-set badguys src;
SNAT para [endereço ip | intervalo de ip | intervalo de porta ip]
Altere o endereço de origem do pacote.
SNAT para 1.2.3.4;
SNAT para 1.2.3.4:20000-30000;
SNAT para 1.2.3.4 aleatório;
TCPMSS Altere o valor MSS dos pacotes TCP SYN.
Conjunto TCPMSS-mss 1400;
TCPMSS grampo-mss-para-pmtu;
PARA% S definições [valor]
Defina o bit do tipo de serviço do pacote tcp com este valor. Isso será usado por
qualquer programador de tráfego está disposto a, principalmente sua própria máquina Linux, mas talvez
mais. Os tos-bits originais são apagados e substituídos por este valor.
TOS set-to Maximize-Throughput;
TOS e-tos 7;
TOS ou-tos 1;
TOS xor-tos 4;
Digite "iptables -j TOS -h" para obter detalhes.
TTL Modifique o campo de cabeçalho TTL.
TTL conjunto de ttl 16;
TTL ttl-dec 1; # diminui em 1
TTL ttl-inc 4; # aumento em 4
ULOG Registre os pacotes em um programa de espaço do usuário.
ULOG ulog-nlgroup 5 ulog-prefix "Veja isto:";
ULOG ulog-cprange 256;
ULOG ulog-qthreshold 10;
OUTROS DOMÍNIOS
Desde a versão 2.0, ferm suporta não só ip e ip6, Mas também arp (Tabelas ARP) e eb
(tabelas de conexão Ethernet). Os conceitos são semelhantes a iptables.
artáveis palavras-chave
IP fonte, destino-ip
Corresponde ao endereço IPv4 de origem ou destino. Igual a sadr e papai no ip
domínio.
fonte-mac, destino-mac
Corresponde ao endereço MAC de origem ou destino.
interface, face externa
Interface de entrada e saída.
comprimento h
Comprimento de hardware do pacote.
cadeia INPUT h-comprimento 64 ACCEPT;
opcode Código de operação, para detalhes consulte o iptables(8).
opcode 9 ACEITAR;
tipo h Tipo de hardware.
ACEITO h-tipo 1;
protótipo
Tipo de protocolo.
protótipo 0x800 ACCEPT;
Mutilador
As palavras-chave mangle-ip-s, mangle-ip-d, mangle-mac-s, mangle-mac-d, alvo de destruição
pode ser usado para mutilação ARP. Ver iptables(8) para obter detalhes.
tabelas de débito palavras-chave
proto Corresponde ao protocolo que criou o quadro, por exemplo IPv4 or PPP. Para uma lista, veja
/ etc / ethertypes.
interface, face externa
Interface física de entrada e saída.
lógico, lógico
A interface de ponte lógica.
sadr, papai
Corresponde ao endereço MAC de origem ou destino.
Match módulos
Os seguintes módulos de correspondência são suportados: 802.3, arp, ip, mark_m, pkttype, stp,
vlan, registro.
Alvo extensões
As seguintes extensões de destino são suportadas: arpreply, dnat, mark, redirect,
snat.
Observe que há um conflito entre --marca do marca_m módulo de correspondência
e -j marca. Uma vez que ambos seriam implementados com a palavra-chave ferm marca, nós
decidiu resolver isso escrevendo o nome do alvo em maiúsculas, como no outro
domínios. O exemplo a seguir reescreve a marca de 1 a 2:
marca 1 MARCA 2;
ADVANCED CARATERÍSTICAS
Variáveis
Em arquivos de firewall complexos, é útil usar variáveis, por exemplo, para fornecer uma rede
interface um nome significativo.
Para definir variáveis, escreva:
@def $ DEV_INTERNET = eth0;
@def $ PORTS = (http ftp);
@def $ MORE_PORTS = ($ PORTS 8080);
No código ferm real, as variáveis são usadas como qualquer outro parâmetro de palavra-chave:
cadeia INPUT interface $ DEV_INTERNET proto tcp dport $ MORE_PORTS ACCEPT;
Observe que as variáveis só podem ser usadas em parâmetros de palavras-chave ("192.168.1.1", "http"); elas
não pode conter palavras-chave ferm como "proto" ou "interface".
As variáveis são válidas apenas no bloco atual:
@def $ DEV_INTERNET = eth1;
corrente INPUT {
protocolo tcp {
@def $ DEV_INTERNET = ppp0;
interface $ DEV_INTERNET dport http ACCEPT;
}
interface $ DEV_INTERNET DROP;
}
será expandido para:
corrente INPUT {
protocolo tcp {
interface ppp0 dport http ACEITAR;
}
interface eth1 DROP;
}
O "def $ DEV_INTERNET = ppp0" só é válido no bloco "proto tcp"; o bloco pai
ainda sabe "definir $ DEV_INTERNET = eth1".
Os arquivos de inclusão são especiais - as variáveis declaradas em um arquivo incluído ainda estão disponíveis em
o bloco de chamada. Isso é útil quando você inclui um arquivo que declara apenas variáveis.
Automático variáveis
Algumas variáveis são definidas internamente por ferm. Os scripts do Ferm podem usá-los como qualquer outro
variável.
$ FILENAME
O nome do arquivo de configuração relativo ao diretório onde ferm foi iniciado.
$ FILEBNAME
O nome base do arquivo de configuração.
$ DIRNAME
O diretório do arquivo de configuração.
$ DOMAIN O domínio atual. Um de ip, ip6, arp, eb.
$ TABLE A tabela netfilter atual.
$ CHAIN A corrente netfilter atual.
$ LINE A linha do script atual. Pode ser usado assim:
@def & log ($ msg) = {
LOG prefixo de log "regra = $ msg: $ LINE";
}
.
.
.
& log ("mensagem de log");
Funções
As funções são semelhantes às variáveis, exceto que podem ter parâmetros e fornecem
comandos ferm, não valores.
@def & FOO () = proto (tcp udp) domínio dport;
& FOO () ACEITAR;
@def & TCP_TUNNEL ($ port, $ dest) = {
cadeia de filtro de tabela FORWARD interface ppp0 proto tcp dport $ port daddr $ dest outerface eth0 ACEITAR;
tabela nat cadeia PREROUTING interface ppp0 proto tcp dport $ port daddr 1.2.3.4 DNAT para $ dest;
}
& TCP_TUNNEL (http, 192.168.1.33);
& TCP_TUNNEL (ftp, 192.168.1.30);
& TCP_TUNNEL ((ssh smtp), 192.168.1.2);
Uma chamada de função que contém um bloco (como '{...}') deve ser o último comando em um ferm
regra, ou seja, deve ser seguida por ';'. O '&FOO ()'exemplo não contém um bloco, portanto
você pode escrever 'ACEITAR' após a ligação. Para contornar isso, você pode reordenar as palavras-chave:
@def & IPSEC () = {proto (esp ah); proto udp dport 500; }
corrente ACEITAÇÃO DE ENTRADA E IPSEC ();
backticks
Com crases, você pode usar a saída de um comando externo:
@def $ DNSSERVERS = `grep nameserver / Etc / resolv.conf | awk '{print $ 2}' `;
cadeia INPUT proto tcp saddr $ DNSSERVERS ACCEPT;
O comando é executado com o shell (/ Bin / sh), assim como crases em perl. Ferm faz
não faça nenhuma expansão de variável aqui.
A saída é então convertida em tokens e salva como uma lista ferm (array). Linhas começando com '#'
são ignorados; as outras linhas podem conter qualquer número de valores, separados por espaços em branco.
Inclui
O @incluir palavra-chave permite que você inclua arquivos externos:
@include 'vars.ferm';
O nome do arquivo é relativo ao arquivo de chamada, por exemplo, ao incluir de
/etc/ferm/ferm.conf, a declaração acima inclui /etc/ferm/vars.ferm. Variáveis e
funções declaradas em um arquivo incluído ainda estão disponíveis no arquivo de chamada.
incluir funciona dentro de um bloco:
corrente INPUT {
@include 'input.ferm';
}
Se você especificar um diretório (com um final '/'), todos os arquivos neste diretório serão
incluído, classificado em ordem alfabética:
@include 'ferm.d /';
Com um símbolo de tubo à direita, ferm executa um comando shell e analisa sua saída:
@include '/root/generate_ferm_rules.sh $ HOSTNAME |'
Condicionais
A palavra-chave @E se introduz uma expressão condicional:
@if $ condition DROP;
Um valor é avaliado como verdadeiro, assim como em Perl: zero, lista vazia, string vazia são falsos,
tudo o mais é verdade. Exemplos de valores verdadeiros:
(ab); 1; 'foo'; (0 0)
Exemplos de valores falsos:
(); 0; '0'; ''
Também há @senão:
@if $ condition DROP; @else REJECT;
Observe o ponto e vírgula antes do @senão.
É possível usar chaves após qualquer @E se or @senão:
@if $ condition {
MARK marca de ajuste 2;
Retorno;
} @outro {
MARK marca de ajuste 3;
}
Como a chave de fechamento também finaliza o comando, não há necessidade de ponto-e-vírgula.
Não há @elsif, usar @senão @E se ao invés.
Exemplo:
@def $ have_ipv6 = `test -f / proc / net / ip6_tables_names && echo 1 || echo`;
@if $ have_ipv6 {
domínio ip6 {
# ....
}
}
Gancho para Bolsas
Para executar comandos personalizados, você pode instalar ganchos:
@hook pre "echo 0>/ proc / sys / net / ipv4 / conf / eth0 / forwarding";
@hook post "echo 1>/ proc / sys / net / ipv4 / conf / eth0 / forwarding";
@hook flush "echo 0>/ proc / sys / net / ipv4 / conf / eth0 / forwarding";
O comando especificado é executado usando o shell. "pre" significa executar o comando antes
aplicando as regras de firewall, e "post" significa executar o comando depois. ganchos "nivelados"
são executados depois que o ferm esvazia as regras do firewall (opção --flush). Você pode instalar qualquer
número de ganchos.
CONSTRUÍDAS EM FUNÇÕES
Existem várias funções internas que podem ser úteis.
@eq (a, b)
Testa dois valores de igualdade. Exemplo:
@if @eq ($ DOMAIN, ip6) DROP;
@ne (a, b)
Semelhante a @eq, testa a não igualdade.
@not (x)
Nega um valor booleano.
@resolve ((hostname1 nome do host2 ...), [modelo])
Normalmente, os nomes de host são resolvidos por iptables. Para permitir que ferm resolva nomes de host, use o
função @resolve:
saddr @resolve (my.host.foo) proto tcp dport ssh ACCEPT;
saddr @resolve ((outro.host.foo terceiro.host.foo)) proto tcp dport openvpn ACEITAR;
daddr @resolve (ipv6.google.com, AAAA) proto tcp dport http ACCEPT;
Observe os parênteses duplos na segunda linha: o par interno para criar uma lista de ferm,
e o par externo como delimitadores de parâmetros de função.
O segundo parâmetro é opcional e especifica o tipo de registro DNS. O padrão é "A".
Tenha cuidado com os nomes de host resolvidos na configuração do firewall. As solicitações de DNS podem bloquear o
configuração do firewall por um longo tempo, deixando a máquina vulnerável, ou eles podem falhar.
@cat (a, b, ...)
Concatene todos os parâmetros em uma string.
@substr (expressão, Deslocamento, comprimento)
Extrai uma substring da expressão e a retorna. O primeiro caractere está no deslocamento 0. Se
OFFSET é negativo, começa bem longe do final da string.
@length (expressão)
Retorna o comprimento em caracteres do valor de EXPR.
@basename (caminho)
Retorna o nome base do arquivo para um determinado caminho (File :: Spec :: splitpath).
@dirname (caminho)
Retorne o nome do último diretório para um determinado caminho, assumindo que o último componente é um
nome do arquivo (File :: Spec :: splitpath).
@ipfilter (lista)
Filtra os endereços IP que obviamente não correspondem ao domínio atual. Aquilo é
útil para criar variáveis e regras comuns para IPv4 e IPv6:
@def $ TRUSTED_HOSTS = (192.168.0.40 2001: abcd: ef :: 40);
domínio (ip ip6) cadeia INPUT {
saddr @ipfilter ($ TRUSTED_HOSTS) proto tcp dport ssh ACCEPT;
}
RECEITAS
O ./exemplos/ diretório contém várias configurações de ferm que podem ser usadas para começar
um novo firewall. Esta seção contém mais amostras, receitas e truques.
Transferências porta encaminhando
A função Ferm torna as tarefas de rotina rápidas e fáceis:
@def & FORWARD_TCP ($ proto, $ port, $ dest) = {
tabela de filtro de cadeia FORWARD interface $ DEV_WORLD outerface $ DEV_DMZ daddr $ dest proto $ proto dport $ port ACCEPT;
tabela nat chain PREROUTING interface $ DEV_WORLD daddr $ HOST_STATIC proto $ proto dport $ port DNAT para $ dest;
}
& FORWARD_TCP (tcp, http, 192.168.1.2);
& FORWARD_TCP (tcp, smtp, 192.168.1.3);
& FORWARD_TCP ((tcp udp), domínio, 192.168.1.4);
Remote ferm
Se a máquina de destino não for capaz de executar ferm por algum motivo (talvez um dispositivo embutido
sem Perl), você pode editar o ferm arquivo de configuração em outro computador e deixe ferm
gere um script de shell lá.
Exemplo para OpenWRT:
ferm --remote --shell mywrt / ferm.conf> mywrt / firewall.user
chmod + x mywrt / firewall.user
scp mywrt / firewall.user mywrt.local.net:/ Etc /
ssh meuwrt.local.net /etc/firewall.user
OPÇÕES
--noexec Não execute o iptables(8) comandos, mas em vez disso pule. Assim você pode
analise seus dados, use --linhas para ver a saída.
--rubor Limpa as regras de firewall e define a política de todas as cadeias para ACEITAR. ferm
precisa de um arquivo de configuração para determinar quais domínios e tabelas são
afetado.
--linhas Mostra as linhas de firewall que foram geradas a partir das regras. Eles serão mostrados
pouco antes de serem executados, então, se você receber mensagens de erro de iptables(8).
etc., você pode ver qual regra causou o erro.
--interativo
Aplique as regras de firewall e peça confirmação ao usuário. Reverte para o
conjunto de regras anterior se não houver uma resposta válida do usuário em 30 segundos (consulte
--tempo esgotado) Isso é útil para administração remota de firewall: você pode testar
as regras sem medo de se isolar.
--tempo esgotado S If --interativo é usado e, em seguida, reverta se não houver uma resposta válida do usuário
após este número de segundos. O padrão é 30.
--Socorro Mostra uma breve lista de opções de linha de comando disponíveis.
--versão Mostra o número da versão do programa.
--velozes Habilite o modo rápido: ferm gera um iptables-save(8) arquivo e instala-o
com restauração de iptables(8). Isso é muito mais rápido, porque ferm chama iptables(8).
uma vez para cada regra por padrão.
O modo rápido é ativado por padrão desde ferm 2.0, descontinuando esta opção.
--devagar Desative o modo rápido, ou seja, execute iptables(8) para cada regra, e não use
restauração de iptables(8).
- concha Gere um script de shell que chama restauração de iptables(8) e imprime.
Implica --fast --lines.
--controlo remoto Gere regras para uma máquina remota. Implica --noexec e --linhas. Pode ser
combinada com - concha.
--domínio {ip | ip6}
Lidar apenas com o domínio especificado. ferm a saída pode estar vazia se o domínio for
não configurado no arquivo de entrada.
--def '$ nome = valor'
Substitua uma variável definida no arquivo de configuração.
Use ferm online usando serviços onworks.net
