Comandos, opções e módulos
Comandos:
Toda regra iptables tem obrigatoriamente um comando e opcionalmente um ou mais parâmetros.
Comandos (são sempre em letras maiúsculas). A maioria dos comandos exige o nome de uma chain, em outros isso é opcional, e finalmente para alguns utiliza-se apenas o comando em si.
Observação: dados entre chaves ( [xxx] ) especificam um valor opcional. Dados entre sinais de maior e menor ( <xxx> ) especificam um valor obrigatório. Acostume-se com esse padrão, pois ele é utilizado nas páginas de manual.
-A <chain>: Acrescenta uma regra ao final de uma chain.
-I <chain> [posição]: Insere uma regra em uma posição específica da chain. Caso a posição não seja informada, a regra será criada na posição 1.
-D <chain> [posição]: Deleta uma regra em uma chain. Existem duas formas de deleção: Repetindo o comando de inserção e trocando o -A/-I por -D ou deletando pelo número da regra na chain. Ex: "iptables -D INPUT 1" apaga a primeira regra da chain INPUT da tabela filter.
-L [chain]: Lista as regras. Se for informada uma chain específica, é listada apenas as regras daquela chain. Caso contrário, todas as chains são listadas. Para listar o número (ou posição) da regra dentro da chain, acrescente a opção "--line-numbers". Esse número é utilizado como referencia para as opções -I, -D e -R
-R <chain> <posição>: permite trocar uma regra com uma já existente na posição informada. Informa-se a regra atual através do nome da chain em que ela se encontra e sua posição dentro da chain (obtida com -L CHAIN --line-numbers) e a nova definição da regra.
-F <chain>: Esvazia a chain informada (apaga todas as suas regras). Caso não seja informada uma chain, todas as chains da tabela são esvaziadas.
-N <nova_chain>: Cria uma nova chain. Deve ser informado um nome que ainda não esteja em uso.
-X <nome_chain>: Apaga uma chain criada pelo usuário (com o comando -N). A chain precisa estar vazia e não ser referenciada por nenhuma regra.
-Z [chain]: Zera os contadores de pacotes e bytes de todas as chains, apenas da chain informada ou apenas de uma regra específica (informada pelo número) dentro de uma chain. Caso seja utilizado junto com -L o contador é zerado e exibido em seguida.
-P <chain> <política>: altera a política (POLICY) padrão de uma chain.
-E <nome_atual> <nome_novo>: renomeia uma chain criada com o comando -N
Opções/parametros:
Observações:
- De um modo geral, a ordem das opções não importa. No entanto, é comum escrever os comandos no formato dos exemplos desse artigo, pois facilita a leitura e compreensão da regra.
- Regras que não contém a opção "-j" não fazem nada com um pacote que combine com suas opções, mas contabilizam a sua passagem e podem servir para contabilidade de dados (geração de gráficos e relatórios, por exemplo).
- As opções -i, -o, -s, -d, --dport, e --sport (e possivelmente outras, confira a página de manual!) podem ser precedidas de um sinal de exclamação (!), que inverte seu significado.
-t <tabela> : Especifica em qual tabela (filter, nat ou mangle) o comando (que pode ser de criação/edição/exclusão/listagem de regras ou chains) será executado. Caso essa opção não seja informada, o comando é executado na tabela filter
Ex:
iptables -t nat -A PREROUTING ... # Cria uma regra na chain PREROUTING da tabela nat
iptables -t filter -A FORWARD ... # Cria uma regra na chain FORWARD da tabela FILTER
iptables -A FORWARD ... # Faz a mesma coisa que a regra anterior, observe para a tabela filter o "-t filter" é opcional.
iptables -t nat -L ... # Visualiza as regras em todas as chains da tabela nat
-n : não resolve endereços IP para nomes, acelerando a exibição dos dados na tela. Normalmente utilizado com o comando -L.
-v : modo verboso, aumenta a exibição de detalhes. Normalmente utilizado com o comando -L.
-x : não utiliza letras (abreviações) na contagem de bytes e pacotes. Normalmente utilizado com o comando -L.
Ex:
observe a saída do seguinte comando, primeiro sem a opção -x:
root:~ # iptables -nvL FORWARD | head -1
Chain FORWARD (policy DROP 6752K packets, 407M bytes)
root:~ # iptables -nvxL FORWARD | head -1
Chain FORWARD (policy DROP 6745998 packets, 407067635 bytes)
A contagem de bytes é a mesma, mas a saída sem -x é mais fácil de visualizar. Por outro lado, utilizando-se o -x facilita a criação de scripts para contabilidade de pacotes.
-p : permite especificar o protocolo desejado. O protocolo pode ser citado pelo nome ou pelo número. Veja a relação de nomes e números de protocolos no arquivo /etc/protocols. Para criar uma regra que bata com qualquer protocolo, coloque "all".
Ex:
iptables -A FORWARD -p udp ... # Cria uma regra utilizando o protocolo UDP na chain FORWARD da tabela filter
iptables -t nat -A PREROUTING -p tcp ... # Cria uma regra utilizando o protocolo TCP na chain PREROUTING da tabela nat
iptables -t nat -A POSTROUTING -p all ... # Cria uma regra combinando com qualquer protocolo na chain POSTROUTING da tabela nat
Observação:
- Ao utilizar "-p all", não se informa número de portas de origem/destino, porque nem todo protocolo utiliza o conceito de porta.
- Procure evitar ao máximo o uso indiscriminado de "-p all", pois acaba tornando seu firewall permissivo demais. Quando você não souber quais portas/endereços precisa liberar para que determinado serviço funcione, faça uma análise do tráfego com um analisador como o tcpdump (modo texto) ou o wireshark (modo gráfico).
- -s : permite especificar o endereço IP de origem. Se o valor for o endereço de um equipamento, basta colocar o endereço IP. Caso seja o endereço de uma rede, é necessário informar também a máscara de rede. Para especificar uma regra que bata com qualquer valor no endereço de origem, coloque 0/0. Para especificar uma regra que não bata com determinado endereço de origem, utilize a exclamação (!).
Ex:
iptables -A FORWARD -p udp -s 192.168.1.0/255.255.255.0 # Tabela filter, chain FORWARD, protocolo UDP, toda a rede 192.168.1.0 ...
iptables -A FORWARD -p udp -s 192.168.1.0/24 # Outra maneira de escrever a regra anterior
iptables -t nat -A PREROUTING -p tcp -s 192.168.1.213
iptables -A FORWARD -p tcp -s !192.168.5.220 ... # essa regra bate com qualquer endereço de origem, exceto o 192.168.5.220.
-d : Semelhante ao -s, porém especifica o endereço IP de destino.
Ex:
iptables -A FORWARD -p udp -d 192.168.1.0/255.255.255.0 # Tabela filter, chain FORWARD, protocolo UDP, toda a rede 192.168.1.0 ...
--sport : permite especificar a porta (tcp/udp) de origem.
Ex:
iptables -A FORWARD -p udp -d 192.168.1.0/24 --sport 25 ...
iptables -A FORWARD -p tcp -s 192.168.1.23 --sport 25 ...
--dport : permite especificar a porta (tcp/udp) de destino.
iptables -A FORWARD -p udp -d 192.168.1.0/24 --dport 25 ...
iptables -A FORWARD -p tcp -s 192.168.1.23 --dport 25 ...
-i : define a interface de rede por onde o pacote vai entrar.
Obs: só pode ser utiliza em chains relativas a entrada de pacotes na máquina, como INPUT, PREROUTING e FORWARD.
-o : define a interface de rede por onde o pacote vai sair.
Obs: só pode ser utiliza em chains relativas a saída de pacotes da máquina, como OUTPUT, POSTROUTING e FORWARD.
-j : Especifica para o TARGET (alvo) da regra, ou seja o que vai ser feito com o pacote que combine com a regra definida.
-m : permite o uso dos "match modules", que são modulos que extendem as funcionalidades do iptables. O iptables costuma já vir com um conjunto de módulos pré-instalados, e é possível instalar mais módulos, recompilando o iptables E o kernel. Abaixo uma lista com os principais módulos. Para ver quais sua distribuição possui, bem como a forma de utilização, veja a página de manual do iptables (man iptables):
- multiport: permite criar regras que combinam com mais de uma porta de origem ou destino. Nesse caso utiliza-se --sports ou --dports, respectivamente. As portas podem ser informadas no formato lista (por exemplo "--dports 22,23,25,110", que englobaria apenas para as portas citadas) ou no formato range (faixa de portas, "--sport 1:1023", que englobaria todas as portas entre 1 e 1023)
- mac: analisa o endereço de hardware (MAC address) de origem do pacote. Apenas pode ser utilizado em CHAINS de entrada (INPUT, FORWARDING, PREROUTING, etc).
- state: permite classificar a conexão quanto ao estado (NEW, INVALID, RELATED, ESTABLISHED, entre outros).
- limit: permite criar regras que trabalham baseadas em quantidade X tempo (1 por segundo, 5 por minuto, etc).
- iprange: permite informar um range de endereços IP de origem ou destino.
- string: procura por uma string (texto) dentro do pacote.
- time: cria regras com base na data/hora de chegada do pacote (a regra só é valida dentro do período de tempo especificado).
- tos: analisa o campo TOS (Type Of Service) do cabeçalho IP (normalmente utilizado para QOS).
- addrtype: analisa pacotes segundo o tipo (UNICAST, BROADCAST, LOCAL, etc).
- ah: combina com pacotes AH (authentication header) do IPsec.
- esp: combina com pacotes ESP do IPsec.
- comment: permite inserir comentários de até 256 caracteres em uma regra.
- connlimit: permite restringir a quantidade de conexões paralelas/simultâneas a um servidor por endereço IP ou range de endereços.
Nenhum comentário:
Postar um comentário