One place for hosting & domains

      Iptables

      Cómo listar y eliminar reglas de firewall de Iptables


      Introducción

      Iptables es un firewall que tiene una función esencial en la seguridad de la red para la mayoría de los sistemas Linux. Aunque muchos tutoriales de iptables enseñan cómo crear reglas de firewall para proteger el servidor, este se centrará en un aspecto diferente de la administración de firewall: cómo listar y eliminar reglas.

      En este tutorial, explicaremos cómo hacer las siguientes tareas de iptables:

      • Listar reglas
      • Borrar contadores de paquetes y bytes
      • Eliminar reglas
      • Vaciar cadenas (eliminar todas las reglas de una cadena)
      • Vaciar todas las cadenas y tablas, eliminar todas las cadenas y aceptar todo el tráfico

      Nota: Cuando trabaje con firewalls, tenga precaución de no bloquearse a sí mismo de su propio servidor al bloquear el tráfico SSH (puerto 22, de forma predeterminada). Si pierde acceso debido a la configuración del firewall, es posible que deba conectarse a este mediante una consola fuera de banda para solucionar su problema de acceso.

      Requisitos previos

      En este tutorial, se asume que está usando un servidor Linux con el comando iptables instalado y que el usuario tiene privilegios sudo.

      Si necesita ayuda para esta configuración inicial, consulte nuestra guía Configuración inicial del servidor con Ubuntu 20.04. También está disponible para Debian y CentOS

      Veamos primero cómo enumerar reglas. Hay dos formas diferentes de ver las reglas de iptables activas: en una tabla o como una lista de especificaciones de reglas. Ambos métodos proporcionan aproximadamente la misma información en diferentes formatos.

      Para enumerar todas las reglas de iptables activas por especificación, ejecute el comando iptables con la opción -S:

      Output

      -P INPUT DROP -P FORWARD DROP -P OUTPUT ACCEPT -N ICMP -N TCP -N UDP -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -m conntrack --ctstate INVALID -j DROP -A INPUT -p udp -m conntrack --ctstate NEW -j UDP -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j TCP -A INPUT -p icmp -m conntrack --ctstate NEW -j ICMP -A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable -A INPUT -p tcp -j REJECT --reject-with tcp-reset -A INPUT -j REJECT --reject-with icmp-proto-unreachable -A TCP -p tcp -m tcp --dport 22 -j ACCEPT

      Como se puede ver, el resultado se parece a los comandos que se utilizaron para crearlas, sin el comando iptables anterior. Esto también tendrá un aspecto similar a los archivos de configuración de reglas de iptables, si alguna vez se utilizó iptables-persistent o iptables save.

      Cómo enumerar una cadena específica

      Si desea limitar el resultado a una cadena específica (ENTRADA, SALIDA, TCP, etc.), puede especificar el nombre de la cadena directamente después de la opción -S. Por ejemplo, para mostrar todas las especificaciones de reglas en la cadena TCP, debe ejecutar este comando:

      Output

      -N TCP -A TCP -p tcp -m tcp --dport 22 -j ACCEPT

      Ahora vamos a echar un vistazo a la forma alternativa de ver las reglas de iptables activas, como un cuadro de reglas.

      Cómo listar reglas como tablas

      El listado de las reglas de iptables en la vista de tabla puede ser útil para comparar diferentes reglas entre sí.

      Para generar todas las reglas de iptables activas en una tabla, ejecute el comando iptables con la opción -L:

      Esto generará todas las reglas actuales ordenadas por cadena.

      Si desea limitar el resultado a una cadena específica (ENTRADA, SALIDA, TCP, etc.), puede especificar el nombre de la cadena directamente después de la opción -L.

      Veamos un ejemplo de cadena ENTRADA:

      Output

      Chain INPUT (policy DROP) target prot opt source destination ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED ACCEPT all -- anywhere anywhere DROP all -- anywhere anywhere ctstate INVALID UDP udp -- anywhere anywhere ctstate NEW TCP tcp -- anywhere anywhere tcp flags:FIN,SYN,RST,ACK/SYN ctstate NEW ICMP icmp -- anywhere anywhere ctstate NEW REJECT udp -- anywhere anywhere reject-with icmp-port-unreachable REJECT tcp -- anywhere anywhere reject-with tcp-reset REJECT all -- anywhere anywhere reject-with icmp-proto-unreachable

      La primera línea de resultado indica el nombre de la cadena (ENTRADA, en este caso), seguido por su directiva predeterminada (ANULAR). La siguiente línea consiste en los encabezados de cada columna de la tabla y viene seguida de las reglas de la cadena. Veamos qué indica cada encabezado:

      • target: si un paquete coincide con la regla, el objetivo especifica qué debe hacerse con él. Por ejemplo, un paquete puede aceptar, anularse, registrarse o enviarse a otra cadena para compararse con más reglas
      • prot: el protocolo, como tcp, udp, icmp o all
      • opt: rara vez se utiliza. Esta columna indica opciones IP
      • source: la dirección IP o de subred de origen del tráfico o anywhere
      • destination: la dirección IP o de subred de destino del tráfico o anywhere

      La última columna, que no está etiquetada, indica las opciones de una regla. Es decir, cualquier parte de la regla que no esté indicada mediante las columnas anteriores. Puede ser cualquier cosa, desde puertos de origen y destino hasta el estado de conexión del paquete.

      Cómo mostrar recuentos de paquetes y tamaño total

      Cuando se listan reglas de iptables, también es posible mostrar el número de paquetes y el tamaño total de estos en bytes, que coinciden con cada regla particular. Esto a menudo es útil cuando se trata de tener una idea aproximada de qué reglas coinciden con los paquetes. Para hacerlo, utilice la opción -L y -v juntos.

      Por ejemplo, volvamos a ver la cadena INPUT, con la opción -v:

      • sudo iptables -L INPUT -v

      Output

      Chain INPUT (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 284K 42M ACCEPT all -- any any anywhere anywhere ctstate RELATED,ESTABLISHED 0 0 ACCEPT all -- lo any anywhere anywhere 0 0 DROP all -- any any anywhere anywhere ctstate INVALID 396 63275 UDP udp -- any any anywhere anywhere ctstate NEW 17067 1005K TCP tcp -- any any anywhere anywhere tcp flags:FIN,SYN,RST,ACK/SYN ctstate NEW 2410 154K ICMP icmp -- any any anywhere anywhere ctstate NEW 396 63275 REJECT udp -- any any anywhere anywhere reject-with icmp-port-unreachable 2916 179K REJECT all -- any any anywhere anywhere reject-with icmp-proto-unreachable 0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:ssh ctstate NEW,ESTABLISHED

      Tenga en cuenta que la lista ahora tiene dos columnas adicionales, pkts y bytes.

      Ahora que sabe cómo listar las reglas de firewall activas de diversas maneras, vamos a ver cómo puede restablecer los contadores de paquetes y bytes.

      Cómo restablecer los recuentos de paquetes y el tamaño total

      Si desea borrar, o dejar en cero, los contadores de paquetes y bytes para sus reglas, utilice la opción -Z. También se restablecen si se produce un reinicio. Esto es útil cuando desea ver si el servidor está recibiendo tráfico nuevo que coincida con las reglas existentes.

      Para borrar los contadores de todas las cadenas y reglas, utilice la opción -Z sola:

      Para borrar los contadores de todas las reglas de una cadena específica, utilice la opción -Z y especifique la cadena. Por ejemplo, para borrar los contadores de la cadena ENTRADA, ejecute este comando:

      Si desea borrar los contadores de una regla determinada, especifique el nombre de la cadena y el número de la regla. Por ejemplo, para dejar en cero los contadores de la primera regla en la cadena ENTRADA, ejecute esto:

      Ahora que aprendió a restablecer los contadores de paquetes y bytes de iptables, vamos a ver los dos métodos que pueden utilizarse para eliminarlos.

      Una de las formas de eliminar reglas de iptables es mediante la especificación de reglas. Para hacerlo, puede ejecutar el comando iptables con la opción -D seguida de la especificación de reglas. Si desea eliminar reglas usando este método, puede utilizar el resultado de la lista de reglas, iptables -S, para obtener ayuda.

      Por ejemplo, si desea borrar la regla que anula paquetes entrantes inválidos (-A INPUT -m conntrack -ctstate INVALID -j DROP), podría ejecutar este comando:

      • sudo iptables -D INPUT -m conntrack --ctstate INVALID -j DROP

      Tenga en cuenta que aquí debería excluirse la opción -A, que se utiliza para indicar la posición de la regla en el momento de la creación.

      Cómo eliminar reglas por cadena y número

      La otra forma de eliminar reglas de iptables es mediante su número de línea y cadena. Para determinar el número de línea de una regla, liste las reglas en el formato de tabla y agregue la opción --line-numbers:

      • sudo iptables -L --line-numbers
      [secondary_output Output]
      Chain INPUT (policy DROP)
      num  target     prot opt source               destination
      1    ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
      2    ACCEPT     all  --  anywhere             anywhere
      3    DROP       all  --  anywhere             anywhere             ctstate INVALID
      4    UDP        udp  --  anywhere             anywhere             ctstate NEW
      5    TCP        tcp  --  anywhere             anywhere             tcp flags:FIN,SYN,RST,ACK/SYN ctstate NEW
      6    ICMP       icmp --  anywhere             anywhere             ctstate NEW
      7    REJECT     udp  --  anywhere             anywhere             reject-with icmp-port-unreachable
      8    REJECT     tcp  --  anywhere             anywhere             reject-with tcp-reset
      9    REJECT     all  --  anywhere             anywhere             reject-with icmp-proto-unreachable
      10   ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ssh ctstate NEW,ESTABLISHED
      ...
      

      Con esto se agrega el número de línea a cada fila de reglas, lo que se indica mediante el encabezado num.

      Una vez que sepa qué regla desea eliminar, tome nota del número de cadena y línea de la regla. Luego, ejecute el comando iptables -D seguido por el número de cadena y regla.

      Por ejemplo, si queremos eliminar la regla de entrada que anula paquetes inválidos, podemos ver que es la regla 3 de la cadena ENTRADA. Por ello, debemos ejecutar este comando:

      Ahora que sabe cómo eliminar reglas de firewall individuales, vamos a revisar cómo puede vaciar cadenas de reglas.

      Cómo vaciar cadenas

      Iptables ofrece una forma de eliminar todas las reglas de una cadena, o de vaciar una cadena. En esta sección se cubrirá la variedad de formas de hacer esto.

      Nota: Tenga cuidado de no bloquearse de su servidor mediante SSH, al vaciar una cadena con una directiva predeterminada de anular o denegar. Si lo hace, es posible que necesite conectarse a él a través de la consola para solucionar su problema de acceso.

      Cómo vaciar una cadena única

      Para vaciar una cadena específica, lo que eliminará todas las reglas de la cadena, puede usar la opción -F o la opción equivalente --flush, y el nombre de la cadena para vaciar.

      Por ejemplo, para eliminar todas las reglas de la ENTRADA cadena, ejecute este comando:

      Cómo vaciar todas las cadenas

      Para vaciar todas las cadenas, lo que eliminará todas las reglas de firewall, puede usar la opción -F o la opción equivalente --flush sola:

      Cómo vaciar todas las reglas, eliminar todas las cadenas y aceptar todas

      En esta sección, explicaremos cómo vaciar todas sus reglas, tablas y cadenas de firewall y permitir todo el tráfico de red.

      Nota: Con esto se deshabilitará efectivamente el firewall. Solo debe seguir esta sección si desea volver a iniciar la configuración del firewall.

      Primero, establezca las directivas predeterminadas para cada una de las cadenas incorporadas en ACEPTAR. El motivo principal para hacer esto es garantizar que no quede bloqueado del servidor mediante SSH:

      • sudo iptables -P INPUT ACCEPT
      • sudo iptables -P FORWARD ACCEPT
      • sudo iptables -P OUTPUT ACCEPT

      Luego, vacíe las tablas nat y mangle, vacíe todas las cadenas (-F) y elimine todas las cadenas no predeterminadas (-X):

      • sudo iptables -t nat -F
      • sudo iptables -t mangle -F
      • sudo iptables -F
      • sudo iptables -X

      El firewall ahora permitirá todo el tráfico de red. Si lista las reglas ahora, verá que no hay ninguna, y que solo permanecerán las tres cadenas predeterminadas (ENTRADA, REENVÍO y SALIDA).

      Conclusión

      Después de revisar este tutorial, debería quedar familiarizado con cómo listar y eliminar las reglas de firewall de iptables.

      Recuerde que cualquier cambio de iptables mediante el comando iptables es efímero y debe guardarse para que persista durante reinicios del servidor. Esto se trata en la sección Reglas de almacenamiento del tutorial Reglas y comandos comunes de firewall.



      Source link

      Como listar e excluir regras de firewall do Iptables


      Introdução

      O Iptables é um firewall que desempenha um papel essencial na segurança de rede para a maioria dos sistemas Linux. Enquanto muitos tutoriais do iptables vão lhe ensinar como criar regras de firewall para proteger seu servidor, este irá se concentrar em um aspecto diferente do gerenciamento de firewall: listar e excluir regras.

      Neste tutorial, vamos mostrar como fazer as seguintes tarefas do iptables:

      • Listar regras
      • Zerar contadores de pacotes e de bytes
      • Excluir regras
      • Esvaziar cadeias (excluir todas as regras em uma cadeia)
      • Esvaziar todas as cadeias e tabelas, excluir todas as cadeias e aceitar todo o tráfego

      Nota: ao trabalhar com firewalls, tome cuidado para não se bloquear no seu próprio servidor, bloqueando o tráfego de SSH (porta 22, por padrão). Se você perder o acesso devido às suas configurações de firewall, pode ser necessário se conectar através de um console auxiliar para restabelecer seu acesso.

      Pré-requisitos

      Este tutorial assume que você está usando um servidor Linux com o comando iptables instalado, e que seu usuário possui privilégios de sudo.

      Se precisar de ajuda com essa configuração inicial, consulte nosso guia Initial Server Setup with Ubuntu 20.04. Está disponível também para o Debian e o CentOS

      Vamos dar uma olhada em como listar as regras primeiro. Existem duas maneiras diferentes de visualizar as regras ativas do iptables: em uma tabela ou como uma lista de especificações de regras. Ambos os métodos fornecem aproximadamente a mesma informação em diferentes formatos.

      Listando regras por especificação

      Para listar todas as regras ativas do iptables por especificação, execute o comando iptables com a opção -S:

      Output

      -P INPUT DROP -P FORWARD DROP -P OUTPUT ACCEPT -N ICMP -N TCP -N UDP -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -m conntrack --ctstate INVALID -j DROP -A INPUT -p udp -m conntrack --ctstate NEW -j UDP -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j TCP -A INPUT -p icmp -m conntrack --ctstate NEW -j ICMP -A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable -A INPUT -p tcp -j REJECT --reject-with tcp-reset -A INPUT -j REJECT --reject-with icmp-proto-unreachable -A TCP -p tcp -m tcp --dport 22 -j ACCEPT

      Como podemos ver, a saída se parece com os comandos que foram usados ​​para criar as regras, sem o comando iptables precedendo-as. Isso também será semelhante aos arquivos de configuração de regras de iptables, se você alguma vez usou iptables-persistent ou iptables save.

      Listando uma cadeia específica

      Se você quiser limitar a saída a uma cadeia específica (INPUT, OUTPUT, TCP, etc.), especifique o nome da cadeia diretamente após a opção -S. Por exemplo, para mostrar todas as especificações de regras na cadeia TCP, você executaria esse comando:

      Output

      -N TCP -A TCP -p tcp -m tcp --dport 22 -j ACCEPT

      Agora, vamos dar uma olhada na maneira alternativa de visualizar as regras ativas do iptables, como uma tabela de regras.

      Listando regras como tabelas

      Listar as regras do iptables na visualização de tabela pode ser útil para comparar regras diferentes entre si.

      Para exibir todas as regras ativas do iptables em uma tabela, execute o comando iptables com a opção -L:

      Isso irá exibir todas as regras atuais ordenadas por cadeia.

      Se você quiser limitar a saída a uma cadeia específica (INPUT, OUTPUT, TCP, etc.), especifique o nome da cadeia diretamente após a opção -L.

      Vamos dar uma olhada em uma cadeia INPUT de exemplo:

      Output

      Chain INPUT (policy DROP) target prot opt source destination ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED ACCEPT all -- anywhere anywhere DROP all -- anywhere anywhere ctstate INVALID UDP udp -- anywhere anywhere ctstate NEW TCP tcp -- anywhere anywhere tcp flags:FIN,SYN,RST,ACK/SYN ctstate NEW ICMP icmp -- anywhere anywhere ctstate NEW REJECT udp -- anywhere anywhere reject-with icmp-port-unreachable REJECT tcp -- anywhere anywhere reject-with tcp-reset REJECT all -- anywhere anywhere reject-with icmp-proto-unreachable

      A primeira linha da saída indica o nome da cadeia (INPUT, neste caso), seguido de sua política padrão (DROP). A próxima linha consiste dos cabeçalhos de cada coluna na tabela, e é seguida pelas regras da cadeia. Vamos examinar o que cada cabeçalho indica:

      • target: se um pacote corresponde à regra, target especifica o que deve ser feito com ela. Por exemplo, um pacote pode ser aceito, descartado, registrado ou enviado para outra cadeia para ser comparado com mais regras
      • prot: o protocolo, tal como tcp, udp, icmp, ou all.
      • opt: raramente usada, essa coluna indica opções IP
      • source: o endereço IP de origem ou sub-rede do tráfego, ou anywhere
      • destination: o endereço IP de destino ou sub-rede do tráfego, ou anywhere

      A última coluna, que não está identificada indica as opções de uma regra. Ou seja, qualquer parte da regra que não está indicada pelas colunas anteriores. Isso poderia ser qualquer coisa desde portas de origem e destino, até o estado de conexão do pacote.

      Mostrando contagens de pacotes e tamanho agregado

      Ao listar regras do iptables, também é possível mostrar o número de pacotes e o tamanho agregado dos pacotes em bytes, que correspondem a cada regra particular. Isso muitas vezes é útil quando se tenta obter uma ideia aproximada de quais regras estão correspondendo aos pacotes. Para fazer isso, use a opção -L e -v juntas.

      Por exemplo, vamos dar uma olhada novamente na cadeia INPUT, com a opção -v:

      • sudo iptables -L INPUT -v

      Output

      Chain INPUT (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 284K 42M ACCEPT all -- any any anywhere anywhere ctstate RELATED,ESTABLISHED 0 0 ACCEPT all -- lo any anywhere anywhere 0 0 DROP all -- any any anywhere anywhere ctstate INVALID 396 63275 UDP udp -- any any anywhere anywhere ctstate NEW 17067 1005K TCP tcp -- any any anywhere anywhere tcp flags:FIN,SYN,RST,ACK/SYN ctstate NEW 2410 154K ICMP icmp -- any any anywhere anywhere ctstate NEW 396 63275 REJECT udp -- any any anywhere anywhere reject-with icmp-port-unreachable 2916 179K REJECT all -- any any anywhere anywhere reject-with icmp-proto-unreachable 0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:ssh ctstate NEW,ESTABLISHED

      Observe que a listagem agora tem duas colunas adicionais, pkts e bytes.

      Agora que sabemos como listar as regras ativas de firewall de várias maneiras, vamos dar uma olhada em como podemos zerar os contadores de bytes.

      Zerando contagens de pacotes e tamanho agregado

      Se quiser limpar ou zerar os contadores de bytes e pacotes das suas regras, use a opção -Z. Eles também são zerados se uma reinicialização ocorrer. Isso é útil se você quiser ver se o servidor está recebendo um novo tráfego que corresponda às suas regras existentes.

      Para limpar os contadores de todas as cadeias e regras, use a opção -Z por si só:

      Para limpar os contadores de todas as regras em uma cadeia específica, use a opção -Z e especifique a cadeia. Por exemplo, para limpar os contadores da cadeia INPUT execute este comando:

      Se você quiser limpar os contadores para uma regra específica, especifique o nome da cadeia e o número da regra. Por exemplo, para zerar os contadores da primeira regra na cadeia INPUT, execute isto:

      Agora que você sabe como zerar os contadores de bytes e de pacotes, vamos dar uma olhada nos dois métodos que podem ser usados para excluí-los.

      Excluindo regras por especificação

      Uma das maneiras de excluir regras do iptables é por especificação da regra. Para fazer isso, execute o comando iptables com a opção -D seguida da especificação da regra. Se você quiser excluir regras usando esse método, use a saída da lista de regras, iptables -S, para alguma ajuda.

      Por exemplo, se você quiser excluir a regra que descarta pacotes de entrada inválidos (-A INPUT -m conntrack --ctstate INVALID -j DROP), execute este comando:

      • sudo iptables -D INPUT -m conntrack --ctstate INVALID -j DROP

      Observe que a opção -A, que é usada para indicar a posição da regra no momento da criação, deve ser excluída aqui.

      Excluindo regras por cadeia e número

      A outra maneira de excluir regras do iptables é por sua cadeia e por número de linha. Para determinar o número de linha de uma regra, liste as regras em formato de tabela e adicione a opção --line-numbers:

      • sudo iptables -L --line-numbers
      [secondary_output Output]
      Chain INPUT (policy DROP)
      num  target     prot opt source               destination
      1    ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
      2    ACCEPT     all  --  anywhere             anywhere
      3    DROP       all  --  anywhere             anywhere             ctstate INVALID
      4    UDP        udp  --  anywhere             anywhere             ctstate NEW
      5    TCP        tcp  --  anywhere             anywhere             tcp flags:FIN,SYN,RST,ACK/SYN ctstate NEW
      6    ICMP       icmp --  anywhere             anywhere             ctstate NEW
      7    REJECT     udp  --  anywhere             anywhere             reject-with icmp-port-unreachable
      8    REJECT     tcp  --  anywhere             anywhere             reject-with tcp-reset
      9    REJECT     all  --  anywhere             anywhere             reject-with icmp-proto-unreachable
      10   ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ssh ctstate NEW,ESTABLISHED
      ...
      

      Isso adiciona o número de linha a cada linha de regra, indicado pelo cabeçalho num.

      Depois de saber qual regra você deseja excluir, observe a cadeia e o número de linha da regra. Em seguida, execute o comando iptables -D seguido pela cadeia e pelo número da regra.

      Por exemplo, se quisermos excluir a regra de entrada que descarta pacotes inválidos, veremos que ela é a regra 3 da cadeia INPUT. Então devemos executar este comando:

      Agora que sabemos como excluir regras individuais de firewall, vamos ver como é possível esvaziar cadeias de regras.

      Esvaziando cadeias

      O Iptables oferece uma maneira de excluir todas as regras em uma cadeia ou fazer um flush em uma cadeia. Esta seção cobrirá uma variedade de maneiras de fazer isso.

      Nota: tenha cuidado para não se bloquear no servidor, via SSH, ao esvaziar uma cadeia com uma política padrão drop ou deny. Se fizer isso, será necessário se conectar a ele através do console para restabelecer seu acesso.

      Esvaziando uma única cadeia

      Para esvaziar uma cadeia específica, o que irá excluir todas as regras na cadeia, use a opção -F, ou a opção ---flush equivalente, e o nome da cadeia a ser esvaziada.

      Por exemplo, para excluir todas as regras na cadeia INPUT, execute este comando:

      Esvaziando todas as cadeias

      Para esvaziar todas as cadeias, o que irá excluir todas as regras de firewall, use a opção -F, ou a opção ---flush equivalente, por si só:

      Esvaziando todas as regras, excluindo todas as cadeias e aceitando tudo

      Esta seção mostrará a você como esvaziar todas as suas regras de firewall, tabelas e cadeias, além de permitir todo o tráfego de rede.

      Nota: isso desativará efetivamente o seu firewall. Você só deve seguir esta seção se quiser reiniciar a configuração do seu firewall.

      Primeiro, defina as políticas padrão para cada uma das cadeias integradas como ACCEPT. A principal razão de se fazer isso é garantir que você não será bloqueado no servidor via SSH:

      • sudo iptables -P INPUT ACCEPT
      • sudo iptables -P FORWARD ACCEPT
      • sudo iptables -P OUTPUT ACCEPT

      Em seguida, esvazie as tabelas nat e mangle, esvazie todas as cadeias (-F) e exclua todas as cadeias não padrão (-X):

      • sudo iptables -t nat -F
      • sudo iptables -t mangle -F
      • sudo iptables -F
      • sudo iptables -X

      Agora o firewall permitirá todo o tráfego de rede. Se você listar suas regras agora, verá que não existe nenhuma, e apenas as três cadeias padrão (INPUT, FORWARD e OUTPUT) permaneceram.

      Conclusão

      Depois de passar por este tutorial, você deve estar familiarizado em como listar e excluir suas regras de firewall do iptables.

      Lembre-se de que quaisquer alterações do iptables através do comando iptables são efêmeras e precisam ser salvas para persistir após reinicializações do servidor. Isso é abordado na seção Regras de salvamento do tutorial de regras e comandos comuns de firewall.



      Source link

      Перечисление и удаление правил брандмауэра Iptables


      Введение

      Iptables — это брандмауэр, который играет важную роль в обеспечении сетевой безопасности большинства систем Linux. Хотя многие руководства по работе с Iptables научат вас создавать правила брандмауэра для обеспечения безопасности вашего сервера, в этом руководстве мы будем уделять особое внимание другому аспекту управления брандмауэром: вывод списка и удаление правил.

      В этом обучающем руководстве мы расскажем, как выполнять следующие задачи при работе с Iptables:

      • Вывод списка правил
      • Очистка счетчиков пакетов и байтов
      • Удаление правил
      • Сброс цепочек (удаление всех правил в цепочке)
      • Сброс всех цепочек и таблиц, удаление всех цепочек и прием любого трафика

      Примечание: при работе с брандмауэрами необходимо следить за тем, чтобы не заблокировать собственный доступ к серверу, запретив подключение по SSH (по умолчанию в этих целях используется порт 22). При потере доступа из-за настроек брандмауэра вам может потребоваться подключение к серверу через внеполосную консоль для восстановления доступа.

      Предварительные требования

      Это учебное руководство предполагает использование сервера Linux с установленной командой iptables и наличие у пользователя привилегий sudo.

      Если вам нужна помощь с данной начальной настройкой, воспользуйтесь нашим руководством по начальной настройке сервера Ubuntu 20.04. Вы также можете воспользоваться руководствами для Debian и CentOS

      Давайте сначала рассмотрим, как просмотреть существующий список правил. Существует два различных способа просмотра действующих правил Iptables: в форме таблицы или списка спецификаций правил. Оба метода предоставляют приблизительно одну и ту же информацию в разных форматах.

      Перечисление правил по спецификации

      Чтобы перечислить все действующие правила Iptables, запустите команду iptables с опцией -S:

      Output

      -P INPUT DROP -P FORWARD DROP -P OUTPUT ACCEPT -N ICMP -N TCP -N UDP -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -m conntrack --ctstate INVALID -j DROP -A INPUT -p udp -m conntrack --ctstate NEW -j UDP -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j TCP -A INPUT -p icmp -m conntrack --ctstate NEW -j ICMP -A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable -A INPUT -p tcp -j REJECT --reject-with tcp-reset -A INPUT -j REJECT --reject-with icmp-proto-unreachable -A TCP -p tcp -m tcp --dport 22 -j ACCEPT

      Как вы видите, вывод выглядит примерно так, как и команды, которые использовались для их создания, но не имеют команды iptables в начале. Также вывод будет напоминать файлы конфигурации правил Iptables, если вы когда-либо использовали iptables-persistent или iptables save.

      Перечисление списка правил конкретной цепочки

      Если вы хотите ограничить вывод конкретной цепочкой (INPUT, OUTPUT, TCP и т. д.), вы можете указать название цепочки сразу после опции -S. Например, для отображения всех спецификаций правил в цепочке TCP необходимо запустить следующую команду:

      Output

      -N TCP -A TCP -p tcp -m tcp --dport 22 -j ACCEPT

      Теперь давайте рассмотрим альтернативный способ просмотра действующих правил Iptables в форме таблицы правил.

      Перечисление правил в виде таблицы

      Перечисление правил Iptables в виде таблицы может быть полезным при сопоставлении разных правил друг с другом.

      Чтобы вывести все действующие правила Iptables в виде таблицы, запустите команду iptables с опцией -L:

      Эта команда будет выводить все действующие правила, отсортированные по цепочкам.

      Если вы хотите ограничить вывод конкретной цепочкой (INPUT, OUTPUT, TCP и т. д.), вы можете указать название цепочки сразу после опции -L.

      Давайте рассмотрим пример цепочки INPUT:

      Output

      Chain INPUT (policy DROP) target prot opt source destination ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED ACCEPT all -- anywhere anywhere DROP all -- anywhere anywhere ctstate INVALID UDP udp -- anywhere anywhere ctstate NEW TCP tcp -- anywhere anywhere tcp flags:FIN,SYN,RST,ACK/SYN ctstate NEW ICMP icmp -- anywhere anywhere ctstate NEW REJECT udp -- anywhere anywhere reject-with icmp-port-unreachable REJECT tcp -- anywhere anywhere reject-with tcp-reset REJECT all -- anywhere anywhere reject-with icmp-proto-unreachable

      Первая строка вывода указывает имя цепочки (в данном случае INPUT), за которым следует используемая по умолчанию политика (DROP). Следующая строка состоит из заголовков каждого столбца таблицы, после чего идут правила цепочки. Давайте посмотрим, что означает каждый заголовок:

      • target: если пакет отвечает правилу, заголовок target указывает, что с ним нужно сделать. Например, пакет можно принять, отклонить, записать или отправить другой цепочке для сопоставления с другими правилами.
      • prot: протокол, например tcp, udp, icmp или all
      • opt: данный параметр используется редко и отображает опции IP
      • source: исходный IP-адрес или подсеть трафика, либо anywhere (отовсюду)
      • destination: IP-адрес назначения или подсеть трафика, либо anywhere (везде)

      Последняя колонка, которая не имеет заголовка, указывает опции правила. Другими словами, это может быть любая часть правила, которая не указана предыдущими столбцами. Это может быть любая информация, начиная с портов назначения и исходных портов и заканчивая состоянием подключения пакета.

      Отображение счетчиков пакетов и общего размера

      При выводе списка правил Iptables также можно отобразить количество пакетов и общий размер пакетов (в байтах), которые отвечают каждому конкретному правилу. Это часто может быть полезно, когда вы пытаетесь получить приблизительное представление о том, какие правила используются для различных пакетов. Чтобы сделать это, воспользуйтесь опциями -L и -v в одной команде.

      Например, давайте снова рассмотрим цепочку INPUT с опцией -v:

      • sudo iptables -L INPUT -v

      Output

      Chain INPUT (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 284K 42M ACCEPT all -- any any anywhere anywhere ctstate RELATED,ESTABLISHED 0 0 ACCEPT all -- lo any anywhere anywhere 0 0 DROP all -- any any anywhere anywhere ctstate INVALID 396 63275 UDP udp -- any any anywhere anywhere ctstate NEW 17067 1005K TCP tcp -- any any anywhere anywhere tcp flags:FIN,SYN,RST,ACK/SYN ctstate NEW 2410 154K ICMP icmp -- any any anywhere anywhere ctstate NEW 396 63275 REJECT udp -- any any anywhere anywhere reject-with icmp-port-unreachable 2916 179K REJECT all -- any any anywhere anywhere reject-with icmp-proto-unreachable 0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:ssh ctstate NEW,ESTABLISHED

      Обратите внимание, что список сейчас содержит два дополнительных столбца, pkts и bytes.

      Теперь, когда вы знаете, как выводить список действующих правил брандмауэра различными способами, давайте рассмотрим возможность сброса счетчиков пакетов и байтов.

      Сброс счетчиков пакетов и общего размера

      Если вы хотите очистить или обнулить счетчики пакетов и байтов для ваших правил, воспользуйтесь опцией -Z. Счетчики также сбрасываются при перезагрузке. Это полезно, если вы хотите узнать, принимает ли ваш сервер новый трафик, отвечающий существующим правилам.

      Чтобы очистить счетчики для всех цепочек и правил, используйте опцию -Z отдельно:

      Чтобы очистить счетчики для всех правил конкретной цепочки, используйте опцию -Z и укажите название цепочки. Например, для очистки счетчиков цепочки INPUT воспользуйтесь следующей командой:

      Если вы хотите очистить счетчики для конкретного правила, укажите имя цепочки и номер правила. Например, для обнуления счетчиков первого правила в цепочке INPUT запустите следующую команду:

      Теперь, когда вы знаете, как сбросить счетчики пакетов и байтов Iptables, давайте рассмотрим два метода, которые можно использовать для удаления правил.

      Удаление правил по спецификации

      Одним из способов удаления правил Iptables является удаление правила по спецификации. Для этого вам нужно запустить команду iptables с опцией -D, указав далее спецификацию правила. Если вы хотите удалить правила с помощью этого метода, вы можете использовать команду для вывода списка правил iptables -S в качестве источника полезной информации.

      Например, если вы хотите удалить правило, которое отклоняет недействительные входящие пакеты (-A INPUT -m conntrack --ctstate INVALID -j DROP), запустите следующую команду:

      • sudo iptables -D INPUT -m conntrack --ctstate INVALID -j DROP

      Обратите внимание, что опция -A, используемая для обозначения положения правила в момент его создания, здесь не применяется.

      Удаление правил по цепочке и номеру

      Другой способ удаления правил Iptables состоит в использовании цепочки и номера строки. Чтобы определить номер строки правила, выведите список правил в формате таблицы и добавьте опцию --line-numbers:

      • sudo iptables -L --line-numbers
      [secondary_output Output]
      Chain INPUT (policy DROP)
      num  target     prot opt source               destination
      1    ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
      2    ACCEPT     all  --  anywhere             anywhere
      3    DROP       all  --  anywhere             anywhere             ctstate INVALID
      4    UDP        udp  --  anywhere             anywhere             ctstate NEW
      5    TCP        tcp  --  anywhere             anywhere             tcp flags:FIN,SYN,RST,ACK/SYN ctstate NEW
      6    ICMP       icmp --  anywhere             anywhere             ctstate NEW
      7    REJECT     udp  --  anywhere             anywhere             reject-with icmp-port-unreachable
      8    REJECT     tcp  --  anywhere             anywhere             reject-with tcp-reset
      9    REJECT     all  --  anywhere             anywhere             reject-with icmp-proto-unreachable
      10   ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ssh ctstate NEW,ESTABLISHED
      ...
      

      Эта команда добавляет номер строки для каждой строки таблицы правил в столбце с заголовком num.

      Когда вы знаете, какое правило нужно удалить, запомните цепочку и номер строки правила. Затем запустите команду iptables -D, указав далее цепочку и номер правила.

      Например, если мы хотим удалить правило для входящего трафика, которое отклоняет недействительные пакеты, мы видим, что это правило с номером 3 в цепочке INPUT. Поэтому нам нужно запустить следующую команду:

      Теперь, когда вы знаете, как удалить отдельные правила брандмауэра, давайте рассмотрим возможность сброса цепочек правил.

      Сброс цепочек

      Iptables предлагает возможность удаления всех правил в цепочке или сброса цепочки. В данном разделе мы опишем разнообразные способы выполнения этой задачи.

      Примечание: будьте осторожны, чтобы не заблокировать собственный доступ к серверу через SSH в результате сброса цепочки с используемой по умолчанию политикой drop или deny. В этом случае вам может потребоваться подключение через консоль для восстановления доступа.

      Сброс отдельной цепочки

      Чтобы сбросить конкретную цепочку с последующим удалением всех правил в данной цепи, вы можете использовать опцию -F или ее эквивалент --flush, добавив в команду имя цепочки, которую вы хотите сбросить.

      Например, для удаления всех правил в цепочке INPUT запустите следующую команду:

      Сброс всех цепочек

      Чтобы сбросить все цепочки с последующим удалением всех правил брандмауэра, вы можете использовать опцию -F или ее эквивалент --flush без указания конкретной цепочки:

      Сброс всех правил, удаление всех цепочек и разрешение любого трафика

      Из этого раздела вы узнаете, как выполнить сброс всех правил брандмауэра, таблиц и цепочек, чтобы разрешить прием любого сетевого трафика.

      Примечание: результатом этих действий станет полное отключение вашего брандмауэра. Вам следует выполнять описанные в данном разделе действия только в том случае, если вы хотите начать настройку вашего брандмауэра с нуля.

      Сначала задайте ACCEPT в качестве используемой по умолчанию политики для каждой встроенной цепочки. Главная причина этого шага состоит в том, чтобы гарантировать, что вы не заблокируете собственный доступ к вашему серверу через SSH:

      • sudo iptables -P INPUT ACCEPT
      • sudo iptables -P FORWARD ACCEPT
      • sudo iptables -P OUTPUT ACCEPT

      Затем выполните сброс таблиц nat и mangle, сбросьте все цепочки (-F) и удалите все цепочки, не используемые по умолчанию (-X):

      • sudo iptables -t nat -F
      • sudo iptables -t mangle -F
      • sudo iptables -F
      • sudo iptables -X

      Теперь ваш брандмауэр будет принимать любой сетевой трафик. Если вы сейчас попробуете вывести список ваших правил, то увидите, что он пуст, и остались только три используемые по умолчанию цепочки (INPUT, FORWARD и OUTPUT).

      Заключение

      После изучения данного руководства вы должны получить представление о том, как вывести список ваших правил брандмауэра iptables и удалить определенные правила.

      Не забывайте, что любые изменения, вносимые с помощью команды iptables, если их не сохранить, исчезнут после перезагрузки сервера. Данная информация описана в разделе «Сохранение правил» руководства «Распространенные правила и команды брандмауэра».



      Source link