Red Hat Enterprise Linux 8 Show
Um guia para configuração e gerenciamento de redes no Red Hat Enterprise Linux 8Resumo Este documento descreve como gerenciar o networking no Red Hat Enterprise Linux 8. Tornando o código aberto mais inclusivoA Red Hat tem o compromisso de substituir a linguagem problemática em nosso código, documentação e propriedades da web. Estamos começando com estes quatro termos: master, slave, blacklist e whitelist. Por causa da enormidade deste esforço, estas mudanças serão implementadas gradualmente ao longo de vários lançamentos futuros. Para mais detalhes, veja a mensagem de nosso CTO Chris Wright. Fornecendo feedback sobre a documentação da Red HatAgradecemos sua contribuição em nossa documentação. Por favor, diga-nos como podemos melhorá-la. Para fazer isso:
Capítulo 1. Tópicos gerais da rede RHELEsta seção fornece detalhes sobre tópicos gerais de redes. 1.1. A diferença entre redes IP e não IPUma rede é um sistema de dispositivos interligados que podem se comunicar compartilhando informações e recursos, tais como arquivos, impressoras, aplicações e conexão com a Internet. Cada um desses dispositivos tem um endereço IP único para enviar e receber mensagens entre dois ou mais dispositivos, usando um conjunto de regras chamado protocolo. Categorias de comunicação em rede: Redes IP Redes que se comunicam através de endereços IP. Uma rede IP é implementada na Internet e na maioria das redes internas. Ethernet, redes sem fio e conexões VPN são exemplos típicos. Redes não-IP Redes que são utilizadas para se comunicar através de uma camada inferior, em vez da camada de transporte. Note que estas redes são raramente utilizadas. Por exemplo, a InfiniBand é uma rede não-IP. 1.2. A diferença entre endereçamento IP estático e dinâmicoEndereçamento IP estático Quando você atribui um endereço IP estático a um dispositivo, o endereço não muda com o tempo, a menos que você o altere manualmente. Use endereço IP estático, se desejar:
Quando você configura um dispositivo para usar um endereço IP dinâmico, o endereço pode mudar com o tempo. Por esta razão, os endereços dinâmicos são normalmente usados para dispositivos que se conectam à rede ocasionalmente porque o endereço IP pode ser diferente após reiniciar o host. Os endereços IP dinâmicos são mais flexíveis, mais fáceis de configurar e de administrar. O Protocolo de Controle Dinâmico de Host (DHCP) é um método tradicional de atribuição dinâmica de configurações de rede a hosts. Não há uma regra rígida que defina quando usar endereços IP estáticos ou dinâmicos. Depende das necessidades do usuário, das preferências e do ambiente de rede. 1.3. Fases de transação do DHCPO DHCP funciona em quatro fases: Descoberta, Oferta, Pedido, Reconhecimento, também chamado processo DORA. O DHCP usa este processo para fornecer endereços IP aos clientes. DescobertaO cliente DHCP envia uma mensagem para descobrir o servidor DHCP na rede. Esta mensagem é transmitida na rede e na camada de link de dados. OfertaO servidor DHCP recebe mensagens do cliente e oferece um endereço IP para o cliente DHCP. Esta mensagem é unicast na camada de link de dados, mas é transmitida na camada de rede. SolicitaçãoO cliente DHCP solicita o servidor DHCP para o endereço IP oferecido. Esta mensagem é unicast na camada de link de dados, mas é transmitida na camada de rede. AgradecimentosO servidor DHCP envia um agradecimento ao cliente DHCP. Esta mensagem é unicast na camada de link de dados, mas transmitida na camada de rede. É a mensagem final do processo DHCP DORA. 1.4. Redes InfiniBand e RDMAPara obter detalhes sobre as redes InfiniBand e Remote Direct Memory Access (RDMA), consulte a documentação Configurando redes InfiniBand e RDMA. 1.5. Suporte a scripts de rede legados na RHEL Por padrão, a RHEL usa o NetworkManager para configurar e gerenciar conexões de rede, e os scripts Entretanto, se você precisar dos scripts de rede depreciados que processam a configuração da rede sem usar o NetworkManager, você pode instalá-los: # Após a instalação dos scripts de rede legados, os scripts Os scripts legados são depreciados no RHEL 8 e serão removidos em uma futura versão principal do RHEL. Se você ainda usa os scripts de rede legados, por exemplo, porque você atualizou de uma versão anterior para a RHEL 8, a Red Hat recomenda que você migre sua configuração para o NetworkManager. 1.6. Seleção de métodos de configuração de rede
Recursos adicionais
Capítulo 2. Nome de dispositivos de interface de rede consistentesO Red Hat Enterprise Linux 8 fornece métodos para a nomeação consistente e previsível de dispositivos para interfaces de rede. Estas características ajudam a localizar e diferenciar as interfaces de rede. O kernel atribui nomes às interfaces de rede concatenando um prefixo fixo e um número que aumenta à medida que o kernel inicializa os dispositivos de rede. Por exemplo, No Red Hat Enterprise Linux 8, o gerente do dispositivo
2.1. Hierarquia de nomes de dispositivos de interface de rede Se a nomeação consistente de dispositivos estiver ativada, que é o padrão no Red Hat Enterprise Linux 8, o gerenciador de dispositivos
Por default, o Red Hat Enterprise Linux seleciona o nome do dispositivo com base na configuração Se você configurou manualmente as regras 2.2. Como funciona a renomeação do dispositivo de rede Por default, a nomeação consistente dos dispositivos é ativada no Red Hat Enterprise Linux 8. O gerente de dispositivos
Os passos 3 e 4 implementam os esquemas de nomenclatura 1 a 4 descritos em Seção 2.1, “Hierarquia de nomes de dispositivos de interface de rede”. Recursos adicionais
2.3. Nomes de dispositivos de interface de rede previsíveis na plataforma x86_64 explicados Quando o recurso de nome consistente do dispositivo de rede é ativado, o gerenciador de dispositivos O nome da interface começa com um prefixo de dois caracteres com base no tipo de interface:
Além disso, um dos seguintes itens é anexado a um dos
prefixos acima mencionados com base no esquema que o gerente do dispositivo
2.4. Nomes de dispositivos de interface de rede previsíveis na plataforma System z explicados Quando o recurso consistente de nome do dispositivo de rede é ativado, o gerenciador de dispositivos Para um dispositivo de palavra de comando de canal (CCW), o ID do ônibus é o número do dispositivo com um prefixo principal As interfaces Ethernet são nomeadas, por exemplo, Use os comandos 2.5. Desativação de nomes consistentes de dispositivos de interface durante a instalaçãoEsta seção descreve como desativar a nomeação consistente do dispositivo de interface durante a instalação. A Red Hat recomenda não desativar a nomeação consistente do dispositivo. A
desativação de nomes consistentes de dispositivos pode causar diferentes tipos de problemas. Por exemplo, se você adicionar outra placa de interface de rede ao sistema, a atribuição dos nomes dos dispositivos do kernel, tais como Procedimento
2.6. Desabilitando a nomeação consistente de dispositivos de interface em um Sistema instaladoEsta seção descreve como desativar a nomeação consistente de dispositivos de interface em um sistema que já está instalado. A Red Hat recomenda não desativar a nomeação consistente do dispositivo. A desativação de nomes consistentes de dispositivos pode causar diferentes tipos de problemas. Por exemplo, se você adicionar outra placa de interface de rede ao sistema, a atribuição dos nomes dos dispositivos do kernel, tais como Pré-requisitos
Procedimento
2.7. Utilização de prefixo para nomeação de interfaces de rede EthernetEsta documentação descreve como definir os prefixos para nomeação consistente de interfaces de rede Ethernet caso você não queira usar o esquema de nomeação padrão de tais interfaces. No entanto, a Red Hat recomenda o uso do esquema de nomenclatura padrão. Para mais detalhes sobre este esquema, veja Capítulo 2, Nome de dispositivos de interface de rede consistentes. 2.7.1. Introdução ao prefixo A ferramenta 2.7.2. Limitações do prefixo do nomeExistem certas limitações para os prefixos das interfaces de rede Ethernet. O prefixo que você escolher deve atender aos seguintes requisitos
O prefixo não pode entrar em conflito com nenhum outro prefixo bem conhecido utilizado para a nomenclatura da interface de rede no Linux. Especificamente, você não pode usar estes prefixos: 2.7.3. Definição do prefixo do nome A definição do prefixo com Para definir e ativar o prefixo necessário para suas interfaces de rede Ethernet, use o seguinte procedimento. Procedimento
A Red Hat não suporta o uso do Depois que o prefixo foi definido e o sistema operacional foi reinicializado, o prefixo é efetivo toda vez que uma nova interface de rede aparece. Ao novo dispositivo é atribuído um nome na forma de Capítulo 3. Começando com o NetworkManagerPor padrão, o RHEL 8 utiliza o NetworkManager para gerenciar a configuração e as conexões da rede. 3.1. Benefícios de usar o NetworkManagerOs principais benefícios de utilizar o NetworkManager são:
3.2. Uma visão geral das utilidades e aplicações que você pode usar para gerenciar as conexões do NetworkManagerVocê pode usar as seguintes utilidades e aplicações para gerenciar as conexões do NetworkManager:
3.3. Utilização de scripts de despacho NetworkManager Por padrão, o diretório O NetworkManager executa os scripts do despachante em 3.4. Carregamento de arquivos ifcfg criados manualmente no NetworkManager No Red Hat Enterprise Linux 8, se você editar um arquivo O diretório As informações para VPNs, banda larga móvel e conexões PPPoE são armazenadas em Por padrão, a RHEL usa o NetworkManager para configurar e gerenciar conexões de rede, e os scripts
Se você precisar dos scripts de rede legados para gerenciar suas configurações de rede, você pode instalá-los manualmente. Para maiores detalhes, veja Seção 1.5, “Suporte a scripts de rede legados na RHEL”. Entretanto, observe que os scripts de rede legados são depreciados e serão removidos em uma versão futura da RHEL. Procedimento
Recursos adicionais
Capítulo 4. Configurando o NetworkManager para ignorar certos dispositivos Por padrão, o NetworkManager gerencia todos os dispositivos, exceto o dispositivo 4.1. Configuração permanente de um dispositivo como não gerenciado no NetworkManager Você pode configurar dispositivos como Para configurar temporariamente os dispositivos de rede como Procedimento
Etapas de verificação
Recursos adicionais
4.2. Configuração temporária de um dispositivo como não gerenciado no NetworkManager Você pode configurar dispositivos como Use este método, por exemplo, para fins de teste. Para configurar permanentemente os dispositivos de rede como Use este método, por
exemplo, para fins de teste. Para configurar permanentemente os dispositivos de rede como Procedimento
Etapas de verificação
Recursos adicionais
Capítulo 5. Começando com nmtui O aplicativo O nmtui aplicação não suporta todos os tipos de conexão. Em particular, você não pode adicionar ou modificar conexões VPN ou conexões Ethernet que requerem autenticação 802.1X. 5.1. Iniciando a utilidade nmtui Este procedimento descreve como iniciar a interface de usuário de texto do NetworkManager, Pré-requisitos
Procedimento
5.2. Adicionando um perfil de conexão usando nmtui O aplicativo Pré-requisitos
Procedimento
Etapas de verificação
Recursos adicionais
5.3. Aplicando mudanças em uma conexão modificada usando nmtui Depois de modificar uma conexão em Procedimento
Capítulo 6. Começando com nmcli Esta seção descreve informações gerais sobre a utilidade
6.1. Os diferentes formatos de saída de nmcli O utilitário Por padrão, o utilitário #
Usando a opção # A opção # A combinação do
6.2. Usando preenchimento de tabulações em nmcli Se o pacote Por exemplo, se você digitar Para a conclusão, as opções ou valor que você digitou devem ser únicos. Se não for único, então Você também pode usar o preenchimento da aba para exibir todas as propriedades que você pode definir em um perfil de conexão. Por exemplo, se você digitar 6.3. Comandos nmcli freqüentes A seguir, uma visão geral sobre os comandos
Capítulo 7. Começando com a configuração de redes usando a GUI GNOMEVocê pode gerenciar e configurar conexões de rede usando as seguintes maneiras no GNOME:
7.1. Conectando-se a uma rede usando o ícone de conexão de rede do GNOME ShellSe você usar a GUI GNOME, você pode usar o ícone de conexão de rede do GNOME Shell para se conectar a uma rede. Pré-requisitos
Procedimento
Capítulo 8. Configuração de uma conexão EthernetEsta seção descreve diferentes maneiras de configurar uma conexão Ethernet com endereços IP estáticos e dinâmicos. 8.1. Configuração de uma conexão Ethernet estática usando nmcli
Este procedimento descreve a adição de uma conexão Ethernet com as seguintes configurações usando o utilitário
Procedimento
Etapas de verificação
Passos para a solução de problemas
Recursos adicionais
8.2. Configuração de uma conexão Ethernet estática usando o editor interativo nmcli Este procedimento descreve a adição de uma conexão Ethernet com as seguintes configurações usando o modo interativo
Procedimento
Etapas de verificação
Passos para a solução de problemas
Recursos adicionais
8.3. Configuração de uma conexão Ethernet estática usando as funções do sistema RHEL Este procedimento descreve como usar as funções do Sistema RHEL para adicionar remotamente uma conexão Ethernet para a interface
Execute este procedimento no Nó de controle possível. Pré-requisitos
Procedimento
Recursos adicionais
8.4. Configuração de uma conexão Ethernet dinâmica usando nmcli Este procedimento descreve a adição de uma conexão Ethernet dinâmica usando o utilitário Pré-requisitos
Procedimento
Etapas de verificação
Recursos adicionais
8.5. Configuração de uma conexão Ethernet dinâmica usando o editor interativo nmcli Este procedimento descreve a adição de uma conexão Ethernet dinâmica usando o editor interativo do utilitário Pré-requisitos
Procedimento
Etapas de verificação
Recursos adicionais
8.6. Configuração de uma conexão Ethernet dinâmica usando as funções do sistema RHEL Este procedimento descreve como usar as funções do Sistema RHEL para adicionar remotamente uma conexão Ethernet dinâmica para a interface Pré-requisitos
Procedimento
Recursos adicionais
8.7. Configuração de uma conexão Ethernet usando o centro de controle As conexões Ethernet são os tipos de conexões mais freqüentemente utilizadas em máquinas físicas ou virtuais. Esta seção descreve como configurar este tipo de conexão no GNOME Note que Pré-requisitos
Procedimento
Etapas de verificação
Passos para a solução de problemas
8.8. Configuração de uma conexão Ethernet usando um editor de conexão nm As conexões Ethernet são os tipos de conexão mais freqüentemente utilizados em servidores físicos ou virtuais. Esta seção descreve como configurar este tipo de
conexão usando a aplicação Pré-requisitos
Procedimento
Etapas de verificação
8.9. Configuração do comportamento do DHCP de uma conexão NetworkManagerUm cliente DHCP (Dynamic Host Configuration Protocol) solicita o endereço IP dinâmico e as informações de configuração correspondentes de um servidor DHCP cada vez que um cliente se conecta à rede. Quando você configura uma conexão para recuperar um endereço IP de um servidor DHCP, o NetworkManager solicita um endereço IP de um servidor DHCP. Por padrão, o cliente espera 45 segundos para que esta solicitação seja completada. Quando uma conexão Pré-requisitos
Procedimento
Recursos adicionais
Capítulo 9. Gerenciando conexões Wi-FiEsta seção descreve como configurar e gerenciar as conexões Wi-Fi. 9.1. Configurando o domínio regulatório sem fio No Red Hat Enterprise Linux, o crda o pacote contém o Agente Regulatório
Central de Domínio que fornece ao núcleo as regras regulatórias sem fio para uma determinada jurisdição. Ele é usado por certos udev scripts e não deve ser executado manualmente, a menos que seja feita uma depuração udev roteiros. O kernel roda crda enviando um udev em uma nova mudança de domínio regulatório. Mudanças no
domínio regulatório são acionadas pelo subsistema sem fio Linux (IEEE-802.11). Este subsistema usa o arquivo O utilitário Recursos adicionais Consulte as seguintes páginas de manual para obter mais informações sobre o domínio regulatório:
9.2. Configuração de uma conexão Wi-Fi usando nmcliEste procedimento descreve como configurar um perfil de conexão Wi-fi usando nmcli. Pré-requisitos
Procedimento
Etapas de verificação
Recursos adicionais
9.3. Configuração de uma conexão Wi-Fi usando o centro de controle Quando você se conecta a um Este procedimento descreve como usar control-center para configurar manualmente as configurações do Procedimento
Quando você adiciona uma nova conexão clicando no botão mais, NetworkManager cria um novo arquivo de configuração para essa conexão e depois abre o mesmo diálogo que é usado para editar uma conexão existente. A diferença entre estes diálogos é que um perfil de conexão existente tem uma entrada no menu Details. 9.4. Conectando-se a uma rede Wi-Fi com nmcli Este procedimento descreve como se conectar a uma conexão Pré-requisitos
Procedimento
9.5. Conectando-se a uma rede Wi-Fi oculta usando nmcliTodos os pontos de acesso têm um Service Set Identifier (SSID) para identificá-los. Entretanto, um ponto de acesso pode ser configurado para não transmitir seu SSID, caso em que ele está oculto, e não aparecerá na lista NetworkManager’s de redes disponíveis. Este procedimento mostra como você pode se conectar a uma rede oculta usando a ferramenta nmcli. Pré-requisitos
Procedimento
9.6. Conexão a uma rede Wi-Fi usando a GUI do GNOMEEste procedimento descreve como você pode se conectar a uma rede sem fio para ter acesso à Internet. Procedimento
Capítulo 10. Configurando a etiquetagem VLANEsta seção descreve como configurar a Virtual Local Area Network (VLAN). Uma VLAN é uma rede lógica dentro de uma rede física. Os pacotes de tags da interface VLAN com o ID da VLAN ao passar pela interface, e remove as tags dos pacotes de retorno. Você cria uma interface VLAN em cima de outra interface, como uma Ethernet, bond, equipe ou dispositivo de ponte. Esta interface é chamada de 10.1. Configurando a marcação VLAN usando comandos nmcli Esta seção descreve como configurar a
etiquetagem da Rede Local Virtual (VLAN) usando o utilitário Pré-requisitos
Procedimento
Etapas de verificação
Recursos adicionais
10.2. Configuração da marcação de VLAN usando o editor de nm-conexão Esta seção descreve como configurar a etiquetagem da
Rede Local Virtual (VLAN) usando a aplicação Pré-requisitos
Procedimento
Etapas de verificação
Recursos adicionais
10.3. Configuração da etiquetagem VLAN usando as funções do sistema Você pode usar a função do sistema Dependendo de seu ambiente, ajuste o jogo de acordo. Por exemplo:
Pré-requisitos
Procedimento
Recursos adicionais
Capítulo 11. Configuração de uma ponte de redeUma ponte de rede é um dispositivo de camada de ligação que encaminha o tráfego entre redes com base em uma tabela de endereços MAC. A ponte constrói a tabela de endereços MAC ouvindo o tráfego da rede e, assim, aprendendo quais hosts estão conectados a cada rede. Por exemplo, você pode usar uma ponte de software em um host Red Hat Enterprise Linux 8 para emular uma ponte de hardware ou em ambientes de virtualização, para integrar máquinas virtuais (VM) à mesma rede que o host. Uma ponte requer um dispositivo de rede em cada rede que a ponte deve conectar. Quando você configura uma ponte, a ponte é chamada Você pode criar pontes em diferentes tipos de dispositivos, como por exemplo:
Devido ao padrão IEEE 802.11 que especifica o uso de quadros de 3 endereços em Wi-Fi para o uso eficiente do tempo de antena, não é possível configurar uma ponte sobre redes Wi-Fi operando nos modos Ad-Hoc ou Infra-estrutura. 11.1. Configuração de uma ponte de rede usando comandos nmcli Esta seção explica como configurar uma ponte de rede usando o utilitário Pré-requisitos
Procedimento
Etapas de verificação
Recursos adicionais
11.2. Configuração de uma ponte de rede usando um editor de conexão nm Esta seção explica como configurar uma ponte de rede usando a aplicação Note que Pré-requisitos
Procedimento
Etapas de verificação
Recursos adicionais
11.3. Configuração de uma ponte de rede usando as funções do sistema RHEL Você pode usar o sistema Defina a configuração IP na ponte e não nas portas da ponte Linux. Pré-requisitos
Procedimento
Recursos adicionais
Capítulo 12. Configuração da equipe da redeEsta seção descreve os conceitos básicos do trabalho em rede em equipe, as diferenças entre a união e o trabalho em equipe, e como configurar uma equipe de rede no Red Hat Enterprise Linux 8. Você pode criar equipes de rede em diferentes tipos de dispositivos, como por exemplo:
12.1. Entendendo o trabalho em equipe em redeA equipe de rede é uma característica que combina ou agrega interfaces de rede para fornecer uma interface lógica com maior rendimento ou redundância. A equipe de rede usa um driver de kernel para implementar um manuseio rápido dos fluxos de pacotes, assim como bibliotecas de espaço do usuário e serviços para outras tarefas. Desta forma, o trabalho em equipe em rede é uma solução facilmente extensível e escalável para balanceamento de carga e requisitos de redundância. 12.2. Entendendo o comportamento padrão do controlador e das interfaces de porta Considere o seguinte comportamento padrão, ao gerenciar ou solucionar problemas de equipe ou interfaces de portas de vínculo usando o serviço
12.3. Comparação entre as características de equipe de rede e de ligaçãoConheça os recursos suportados em equipes de rede e vínculos de rede:
12.4. Entendendo o serviço da equipe, corredores e vigilantes de ligação O serviço de equipe, O serviço Estão disponíveis os seguintes corredores:
Os serviços
Cada corredor pode usar qualquer link observador, com exceção do 12.5. Instalando o serviço da equipe Para configurar uma equipe de rede em Pré-requisitos
Procedimento
12.6. Configuração de uma equipe de rede usando comandos nmcli Esta seção descreve como configurar uma equipe de rede usando o utilitário Pré-requisitos
Procedimento
Etapas de verificação
Recursos adicionais
12.7. Configuração de uma equipe de rede usando um editor de nm-conexão Esta seção descreve como você configura uma equipe de rede usando o aplicativo Note que Pré-requisitos
Procedimento
Etapas de verificação
Recursos adicionais
Capítulo 13. Configurando a ligação em redeEsta seção descreve o básico da ligação em rede, as diferenças entre ligação e equipe, e como configurar uma ligação em rede no Red Hat Enterprise Linux 8. Você pode criar vínculos em diferentes tipos de dispositivos, como por exemplo:
13.1. Entendendo a ligação em redeA ligação de rede é um método para combinar ou agregar interfaces de rede para fornecer uma interface lógica com maior rendimento ou redundância. Os modos Para mais detalhes, veja a documentação de seu switch e do Linux Ethernet Bonding Driver HOWTO. 13.2. Entendendo o comportamento padrão do controlador e das interfaces de porta Considere o seguinte comportamento padrão, ao gerenciar ou solucionar problemas de equipe ou interfaces de portas de vínculo usando o serviço
13.3. Comparação entre as características de equipe de rede e de ligaçãoConheça os recursos suportados em equipes de rede e vínculos de rede:
13.4. Configuração do Switch Upstream Dependendo dos Modos de LigaçãoA tabela a seguir descreve quais configurações você deve aplicar ao interruptor a montante, dependendo do modo de ligação:
Para configurar estas configurações em seu switch, consulte a documentação do switch. 13.5. Configuração de uma ligação em rede usando comandos nmcli Esta seção descreve como configurar um vínculo de rede usando os comandos Pré-requisitos
Procedimento
Etapas de verificação
Recursos adicionais
13.6. Configuração de uma ligação de rede usando um editor de nm-conexão Esta seção descreve como configurar um vínculo de rede usando a aplicação Note que Pré-requisitos
Procedimento
Etapas de verificação
Recursos adicionais
13.7. Configuração de um vínculo de rede usando as funções do sistema RHEL Você pode usar a função do Sistema RHEL Defina a configuração IP na ponte e não nas portas da ponte Linux. Pré-requisitos
Procedimento
Recursos adicionais
13.8. Criação de uma ligação de rede para permitir a comutação entre uma conexão Ethernet e sem fio sem interromper a VPN Os usuários da RHEL que conectam sua estação de trabalho à rede de sua empresa normalmente usam uma VPN para acessar recursos remotos. Entretanto, se a estação de trabalho comutar entre uma conexão Ethernet e Wi-Fi, por exemplo, se você liberar um laptop de uma estação de acoplamento com uma conexão Ethernet, a conexão VPN é interrompida. Para evitar este problema, você pode criar uma ligação de rede que usa a conexão Ethernet e Wi-Fi no modo
Pré-requisitos
Procedimento
Etapas de verificação
Capítulo 14. Configuração de uma conexão VPNEsta seção explica como configurar uma conexão de rede privada virtual (VPN). Uma VPN é uma forma de conexão a uma rede local pela Internet. 14.1. Configuração de uma conexão VPN com o centro de controle Este procedimento descreve como configurar uma conexão VPN usando Pré-requisitos
Procedimento
Recursos adicionais
14.2. Configuração de uma conexão VPN usando um editor de nm-conexão Este procedimento descreve como configurar uma conexão VPN usando Pré-requisitos
Procedimento
Ao adicionar uma nova conexão clicando no botão , NetworkManager cria um novo arquivo de configuração para essa conexão e depois abre o mesmo diálogo que é usado para editar uma conexão existente. A diferença entre estes diálogos é que um perfil de conexão existente tem uma entrada no menu Details. Recursos adicionais
Capítulo 15. Configuração de túneis IPSimilar a uma VPN, um túnel IP conecta diretamente duas redes através de uma terceira rede, como a Internet. Entretanto, nem todos os protocolos de túnel suportam criptografia. Os roteadores em ambas as redes que estabelecem o túnel requerem pelo menos duas interfaces:
Para estabelecer o túnel, você cria uma interface virtual em ambos os roteadores com um endereço IP a partir da sub-rede remota. O NetworkManager suporta os seguintes túneis IP:
Dependendo do tipo, estes túneis atuam ou na camada 2 ou 3 do modelo de Interconexão de Sistemas Abertos (OSI). 15.1. Configuração de um túnel IPIP usando nmcli para encapsular o tráfego IPv4 em pacotes IPv4Um túnel IP sobre IP (IPIP) opera na camada 3 do OSI e encapsula o tráfego IPv4 em pacotes IPv4, conforme descrito na RFC 2003. Os dados enviados através de um túnel IPIP não são criptografados. Por razões de segurança, utilizar o túnel somente para dados que já estão criptografados, por exemplo, por outros protocolos, tais como HTTPS. Note que os túneis IPIP suportam apenas pacotes unicast. Se você precisar de um túnel IPv4 que suporte multicast, veja Seção 15.2, “Configuração de um túnel GRE usando nmcli para encapsular o tráfego de camada-3 em pacotes IPv4”. Este procedimento descreve como criar um túnel IPIP entre dois roteadores RHEL para conectar duas sub-redes internas através da Internet, como mostrado no diagrama a seguir: Pré-requisitos
Procedimento
Etapas de verificação
Recursos adicionais
15.2. Configuração de um túnel GRE usando nmcli para encapsular o tráfego de camada-3 em pacotes IPv4Um túnel de Encapsulamento de Roteamento Genérico (GRE) encapsula o tráfego de camada-3 em pacotes IPv4, conforme descrito no RFC 2784. Um túnel GRE pode encapsular qualquer protocolo da camada 3 com um tipo de Ethernet válido. Os dados enviados através de um túnel GRE não são criptografados. Por razões de segurança, utilizar o túnel somente para dados que já estão criptografados, por exemplo, por outros protocolos, tais como HTTPS. Este procedimento descreve como criar um túnel GRE entre dois roteadores RHEL para conectar duas sub-redes internas através da Internet, como mostrado no diagrama a seguir: O nome do dispositivo Pré-requisitos
Procedimento
Etapas de verificação
Recursos adicionais
15.3. Configuração de um túnel GRETAP para transferir quadros Ethernet sobre IPv4Um túnel de Encapsulamento Terminal de Encapsulamento Genérico (GRETAP) opera no nível 2 do OSI e encapsula o tráfego Ethernet em pacotes IPv4, conforme descrito no RFC 2784. Os dados enviados através de um túnel GRETAP não são criptografados. Por razões de segurança, estabelecer o túnel através de uma VPN ou uma conexão criptografada diferente. Este procedimento descreve como criar um túnel GRETAP entre dois roteadores RHEL para conectar duas redes usando uma ponte, como mostrado no diagrama a seguir: O nome do dispositivo Pré-requisitos
Procedimento
Etapas de verificação
Recursos adicionais
15.4. Recursos adicionais
Capítulo 16. Configuração do canal de fibra sobre EthernetBaseado na norma IEEE T11 FC-BB-5, o Fibre Channel over Ethernet (FCoE) é um protocolo para transmitir quadros de Fibre Channel sobre redes Ethernet. Normalmente, os centros de dados possuem uma rede LAN e uma rede de área de armazenamento (SAN) dedicadas que são separadas umas das outras com sua própria configuração específica. O FCoE combina essas redes em uma estrutura de rede única e convergente. Os benefícios do FCoE são, por exemplo, custos mais baixos de hardware e energia. 16.1. Usando hardware FCoE HBAs em RHELNo Red Hat Enterprise Linux você pode usar o hardware FCoE Host Bus Adapter (HBA) suportado pelos seguintes drivers:
Se você usar tal HBA, você configura as configurações do FCoE na configuração do HBA. Para obter detalhes, consulte a documentação do adaptador. Após configurar o HBA em sua configuração, os Números de Unidade Lógica (LUN) exportados da Rede de Área de Armazenamento (SAN) estão automaticamente disponíveis para a RHEL como dispositivos
16.2. Instalação de um dispositivo de software FCoEUm dispositivo de software FCoE permite acessar os Números de Unidade Lógica (LUN) sobre o FCoE usando um adaptador Ethernet que suporta parcialmente o descarregamento do FCoE. A
RHEL não suporta os dispositivos de software FCoE que requerem o módulo de kernel Após completar este procedimento, os LUNs exportados da Rede de Área de Armazenamento
(SAN) estão automaticamente disponíveis para a RHEL como dispositivos Pré-requisitos
Procedimento
Etapas de verificação
Recursos adicionais
16.3. Recursos adicionais
Capítulo 17. Autenticação de um cliente RHEL para a rede usando a norma 802.1XOs administradores freqüentemente usam o Controle de Acesso à Rede (NAC) baseado no padrão IEEE 802.1X para proteger uma rede contra clientes LAN e Wi-Fi não autorizados. Os procedimentos nesta seção descrevem diferentes opções para configurar a autenticação da rede. 17.1. Configuração da autenticação de rede 802.1X em uma conexão Ethernet existente usando nmcli Usando o utilitário Pré-requisitos
Procedimento
Etapas de verificação
Recursos adicionais
17.2. Configuração de uma conexão Ethernet estática com autenticação de rede 802.1X usando as funções do sistema RHEL Usando as funções do Sistema RHEL, você pode automatizar a
criação de uma conexão Ethernet que usa o padrão 802.1X para autenticar o cliente. Este procedimento descreve como adicionar remotamente uma conexão Ethernet para a interface
Execute este procedimento no Nó de controle possível. Pré-requisitos
Procedimento
Recursos adicionais
17.3. Configuração da autenticação da rede 802.1X em uma conexão Wi-Fi existente usando nmcli Usando o utilitário Pré-requisitos
Procedimento
Etapas de verificação
Recursos adicionais
Capítulo 18. Gerenciando a configuração padrão do gatewayO gateway padrão é um roteador que encaminha pacotes de rede quando nenhuma outra rota corresponde ao destino de um pacote. Em uma rede local, o gateway padrão é tipicamente o host que está um salto mais próximo da Internet. 18.1. Configurando o gateway padrão em uma conexão existente usando nmcliNa maioria das situações, os administradores definem o gateway padrão quando criam uma conexão, como explicado, por exemplo, em Seção 8.1, “Configuração de uma conexão Ethernet estática usando nmcli”. Esta seção descreve como definir ou atualizar o gateway padrão em uma conexão criada
anteriormente usando o utilitário Pré-requisitos
Procedimento
18.2. Configurando o gateway padrão em uma conexão existente usando o modo interativo nmcliNa maioria das situações, os administradores definem o gateway padrão quando criam uma conexão, como explicado, por exemplo, em Seção 8.5, “Configuração de uma conexão Ethernet dinâmica usando o editor interativo nmcli”. Esta seção descreve como definir ou atualizar o gateway padrão em uma conexão criada anteriormente, usando o modo interativo do utilitário Pré-requisitos
Procedimento
18.3. Configuração do gateway padrão em uma conexão existente usando o editor de conexão nm Na maioria das
situações, os administradores definem o gateway padrão quando criam uma conexão. Esta seção descreve como definir ou atualizar o gateway padrão em uma conexão previamente criada usando a aplicação Pré-requisitos
Procedimento
18.4. Configurando o gateway padrão em uma conexão existente usando o centro de controle Na maioria das situações, os administradores definem o gateway padrão quando criam uma conexão. Esta seção descreve como definir ou atualizar o gateway padrão em uma conexão previamente criada usando a aplicação Pré-requisitos
Procedimento
18.5. Configurando o gateway padrão em uma conexão existente usando as funções do sistema Você pode usar a função do Sistema RHEL Quando você executa uma peça que usa o Sistema Função Dependendo se já existe, o procedimento cria ou atualiza o perfil de conexão
Pré-requisitos
Procedimento
Recursos adicionais
18.6. Configurando o gateway padrão em uma conexão existente ao utilizar os scripts de rede legados Este procedimento descreve como configurar um gateway padrão quando você utiliza os scripts de rede legados. O exemplo define o gateway padrão para Pré-requisitos
Procedimento
18.7. Como o NetworkManager gerencia vários gateways padrãoEm certas situações, por exemplo, por razões de emergência, você define vários gateways padrão em um host. Entretanto, para evitar problemas de roteamento assíncrono, cada gateway padrão do mesmo protocolo requer um valor métrico separado. Observe que a RHEL só usa a conexão com o gateway padrão que tem o menor valor de métrica definido. Você pode definir a métrica para o gateway IPv4 e IPv6 de uma conexão usando o seguinte comando: # Não defina o mesmo valor métrico para o mesmo protocolo em vários perfis de conexão para evitar problemas de roteamento. Se você definir um gateway padrão sem um valor métrico, o NetworkManager define automaticamente o valor métrico com base no tipo de interface. Para isso, o NetworkManager atribui o valor padrão deste tipo
de rede à primeira conexão que é ativada, e define um valor incremental para uma conexão do mesmo tipo na ordem em que são ativadas. Por exemplo, se existirem duas conexões Ethernet com um gateway padrão, o NetworkManager define uma métrica de A seguir, uma visão geral dos tipos de rede freqüentemente utilizados e suas métricas padrão:
Recursos adicionais
18.8. Configuração do NetworkManager para evitar o uso de um perfil específico para fornecer um gateway padrãoVocê pode configurar que o NetworkManager nunca utilize um perfil específico para fornecer o gateway padrão. Siga este procedimento para perfis de conexão que não estejam conectados ao gateway padrão. Pré-requisitos
Procedimento
Etapas de verificação
18.9. Corrigindo comportamentos inesperados de roteamento devido a múltiplos gateways padrãoHá apenas alguns cenários, como quando se usa TCP multipath, nos quais são necessários vários gateways padrão em um host. Na maioria dos casos, você configura apenas um único gateway padrão para evitar comportamento de roteamento inesperado ou problemas de roteamento assíncrono. Para rotear o tráfego para diferentes provedores de Internet, use roteamento baseado em políticas em vez de vários gateways padrão. Pré-requisitos
Procedimento
Etapas de verificação
Recursos adicionais
Capítulo 19. Configuração de rotas estáticasPor default, e se um gateway default for configurado, o Red Hat Enterprise Linux encaminha o tráfego para redes que não estão diretamente conectadas ao host para o gateway default. Usando uma rota estática, você pode configurar que o Red Hat Enterprise Linux encaminhe o tráfego para um host ou rede específica para um roteador diferente do gateway default. Esta seção descreve diferentes opções de como configurar rotas estáticas. 19.1. Como usar o comando nmcli para configurar uma rota estática Para configurar uma rota estática, use o utilitário $ O comando suporta os seguintes atributos de rota:
Se você usar o sub-comando 19.2. Configuração de uma rota estática usando um comando nmcli Você pode adicionar uma rota estática à configuração de uma conexão de rede usando o comando O procedimento nesta seção descreve como adicionar uma rota à rede Pré-requisitos
Procedimento
Recursos adicionais
19.3. Configuração de uma rota estática usando o centro de controle Você pode usar O procedimento nesta seção descreve como adicionar uma rota à rede Pré-requisitos
Procedimento
19.4. Configuração de uma rota estática usando um editor de nm-conexão Você pode usar o aplicativo O procedimento nesta seção descreve como adicionar uma rota à rede Pré-requisitos
Procedimento
19.5. Configuração de uma rota estática usando o modo interativo nmcli Você pode usar o modo interativo do utilitário O procedimento nesta seção descreve
como adicionar uma rota à rede Pré-requisitos
Procedimento
Recursos adicionais
19.6. Configuração de uma rota estática usando as funções do sistema RHEL Você pode usar o sistema Quando você executa uma peça que usa o Sistema Função Dependendo se já existe, o procedimento cria ou atualiza o perfil de conexão
Pré-requisitos
Procedimento
Etapas de verificação
Recursos adicionais
19.7. Criação de arquivos de configuração de rotas estáticas em formato de valor chave ao utilizar os scripts de rede legados Este procedimento descreve como criar manualmente um arquivo de configuração de roteamento para uma rota IPv4 para a rede O exemplo neste procedimento utiliza entradas de configuração em formato de valores-chave. Pré-requisitos
Procedimento
Recursos adicionais
19.8. Criação de arquivos de configuração de rotas estáticas em formato ip-command ao utilizar os scripts de rede legadosEste procedimento descreve como criar manualmente um arquivo de configuração de roteamento para as seguintes rotas estáticas quando você utiliza scripts de rede legados:
O exemplo neste procedimento utiliza entradas de configuração no formato Pré-requisitos
Procedimento
Recursos adicionais
Capítulo 20. Configuração de rotas baseadas em políticas para definir rotas alternativasPor padrão, o kernel na RHEL decide onde encaminhar os pacotes de rede com base no endereço de destino usando uma tabela de roteamento. O roteamento baseado em políticas permite a configuração de cenários complexos de roteamento. Por exemplo, você pode encaminhar pacotes com base em vários critérios, como o endereço de origem, metadados de pacotes ou protocolo. Esta seção descreve como configurar o roteamento baseado em políticas usando o NetworkManager. Em sistemas que utilizam o NetworkManager, apenas o utilitário 20.1. Roteamento do tráfego de uma sub-rede específica para um gateway padrão diferente usando o NetworkManagerEsta seção descreve como configurar o RHEL como um roteador que, por padrão, encaminha todo o tráfego para o provedor de Internet A usando a rota padrão. Usando o roteamento baseado em políticas, a RHEL encaminha o tráfego recebido da sub-rede interna das estações de trabalho para o provedor B. O procedimento assume a seguinte topologia de rede:
Pré-requisitos
Procedimento
Etapas de verificação
Passos para a solução de problemas No roteador RHEL:
Recursos adicionais
20.2. Visão geral dos arquivos de configuração envolvidos no roteamento baseado em políticas ao utilizar os scripts de rede legadosSe você usar os scripts de rede legados em vez do NetworkManager para configurar sua rede, você também pode configurar o roteamento baseado em políticas. Os seguintes arquivos de configuração estão envolvidos no roteamento baseado em políticas quando você utiliza os scripts de rede legados:
Recursos adicionais
20.3. Roteamento do tráfego de uma subrede específica para um gateway padrão diferente usando os scripts de rede legadosEsta seção descreve como configurar o RHEL como um roteador que, por padrão, encaminha todo o tráfego para o provedor de Internet A usando a rota padrão. Usando o roteamento baseado em políticas, a RHEL encaminha o tráfego recebido da sub-rede interna das estações de trabalho para o provedor B. O procedimento assume a seguinte topologia de rede:
Os scripts de rede legados processam os arquivos de configuração em ordem alfabética. Portanto, é necessário nomear os arquivos de configuração de forma a garantir que uma interface, que é utilizada em regras e rotas de outras interfaces, esteja
pronta quando uma interface dependente a requer. Para realizar a ordem correta, este procedimento utiliza números nos arquivos Pré-requisitos
Procedimento
Etapas de verificação
Passos para a solução de problemas No roteador RHEL:
Recursos adicionais
Capítulo 21. Criando uma interface fictíciaComo usuário do Red Hat Enterprise Linux, você pode criar e usar interfaces de rede fictícias para fins de depuração e teste. Uma interface fictícia fornece um dispositivo para rotear os pacotes sem realmente transmiti-los. Ela permite que você crie dispositivos adicionais do tipo loopback gerenciados pelo NetworkManager e faz com que um endereço SLIP (Serial Line Internet Protocol) inativo pareça um endereço real para programas locais. 21.1. Criação de uma interface fictícia com um endereço IPv4 e IPv6 usando nmcli Você pode criar uma interface fictícia com várias configurações. Este procedimento descreve como criar uma interface fictícia com um endereço IPv4 e IPv6. Após criar a interface fictícia, o NetworkManager a atribui automaticamente à zona padrão do firewall
Para configurar uma interface fictícia sem endereço IPv4 ou IPv6, defina os parâmetros Procedimento
Recursos adicionais
Capítulo 22. Usando o netconsole para registrar mensagens do kernel através de uma rede Usando o módulo do kernel 22.1. Configuração do serviço netconsole para registrar mensagens do kernel em um host remoto Usando o módulo do kernel Pré-requisitos
Procedimento
Etapas de verificação
Recursos adicionais
Capítulo 23. Metas e serviços de rede do sistema O
NetworkManager configura a rede durante o processo de inicialização do sistema. Entretanto, ao inicializar com uma raiz remota (/), como se o diretório raiz fosse armazenado em um dispositivo iSCSI, as configurações de rede são aplicadas no disco RAM inicial ( Esta seção descreve diferentes alvos como 23.1. Diferenças entre a rede e o alvo do sistema em rede Systemd mantém as unidades-alvo A meta A meta A unidade alvo 23.2. Visão geral do NetworkManager-wait-onlineOs scripts de rede legados síncronos iteram através de todos os arquivos de configuração para configurar os dispositivos. Eles aplicam todas as configurações relacionadas à rede e garantem que a rede esteja on-line. O serviço Quando a partida é concluída, ou todos os perfis estão em um estado desconectado ou são ativados com sucesso. Você pode configurar os perfis para auto-conexão. A seguir, alguns exemplos de parâmetros que definem os intervalos de tempo ou definem quando a conexão é considerada ativa:
Recursos adicionais
23.3. Configuração de um serviço de sistema para iniciar depois que a rede for iniciada O Red Hat Enterprise Linux instala os arquivos de serviço Procedimento
Capítulo 24. Controle de tráfego Linux O Linux oferece ferramentas para gerenciar e manipular a transmissão de pacotes. O subsistema de Controle de Tráfego Linux (TC) ajuda no policiamento, classificação, modelagem e agendamento do tráfego da rede. O TC também modifica o conteúdo dos pacotes durante a
classificação, utilizando filtros e ações. O subsistema TC consegue isso utilizando disciplinas de enfileiramento ( O mecanismo de programação organiza ou rearranja os pacotes antes que eles entrem ou saiam de diferentes filas. O programador mais comum é o programador First-In-First-Out (FIFO). Você pode fazer as operações do
Esta seção explica as disciplinas de enfileiramento e descreve como atualizar o padrão 24.1. Visão geral das disciplinas de enfileiramento As disciplinas de enfileiramento (
Cada Classificado |
qdisc nome | Incluído em | Suporte de descarregamento |
---|---|---|
Modo de Transferência Assíncrona (ATM) | | |
Enfileiramento baseado em classe | | |
Modelador baseado em crédito | | Sim |
Escolher e Manter para fluxos responsivos, Escolher e Matar para fluxos não responsivos (CHOKE) | | |
Atraso Controlado (CoDel) | | |
Déficit Round Robin (DRR) | | |
Marcador de Serviços Diferenciados (DSMARK) | | |
Seleção de Transmissão Aprimorada (ETS) | | Sim |
Fila da Feira (FQ) | | |
Atraso controlado por filas justas (FQ_CODel) | | |
Detecção precoce aleatória generalizada (GRED) | | |
Curva Hierárquica de Serviço Justo (HSFC) | | |
Filtro Heavy-Hitter (HHF) | | |
Balde de Hierarquia (HTB) | | |
INGRESS | | Sim |
Prioridade de múltiplas filas (MQPRIO) | | Sim |
Multiqueue (MULTIQ) | | Sim |
Emulador de Rede (NETEM) | | |
Proporcional Integral-controller Enhanced (PIE) | | |
PLUG | | |
Enfileiramento Rápido de Feira (QFQ) | | |
Detecção precoce aleatória (VERMELHO) | | Sim |
Stochastic Fair Blue (SFB) | | |
Enfileiramento Estocástico Justo (SFQ) | | |
Filtro Token Bucket (TBF) | | Sim |
Equalizador de Elo Trivial (TEQL) | |
A descarga do qdisc
requer suporte de hardware e drivers no NIC.
Recursos adicionais
- Para informações completas dos parâmetros e filtros usados para configurar o
qdiscs
, consulte as páginas mantc(8)
,cbq
,cbs
,choke
,CoDel
,drr
,fq
,htb
,mqprio
,netem
,pie
,sfb
,pfifo
, ,tc-red
,sfq
,tbf
, eprio
.
24.3. Inspeção de qdiscs de uma interface de rede usando o utilitário tc
Por default, os sistemas Red Hat Enterprise Linux usam fq_codel
qdisc
. Este procedimento descreve como inspecionar os balcões qdisc
.
Procedimento
Opcional: Veja seu atual
qdisc
:#
tc qdisc show dev enp0s1
Inspecione os atuais balcões
qdisc
:#
tc -s qdisc show dev enp0s1
qdisc fq_codel 0: root refcnt 2 limit 10240p flows 1024 quantum 1514 target 5.0ms interval 100.0ms memory_limit 32Mb ecn Sent 1008193 bytes 5559 pkt (dropped 233, overlimits 55 requeues 77) backlog 0b 0p requeues 0 ....
-
dropped
- o número de vezes que um pacote é descartado porque todas as filas estão cheias -
overlimits
- o número de vezes que a capacidade do link configurado é preenchida -
sent
- o número de dequeues
24.4. Atualização do qdisc padrão
Se você observar perdas de
pacotes de rede com o atual qdisc
, você pode alterar o qdisc
com base em seus requisitos de rede. Você pode selecionar o qdisc
, que atende às exigências de sua rede. Este procedimento descreve como alterar o padrão qdisc
no Red Hat Enterprise Linux.
Procedimento
Veja o padrão atual
qdisc
:#
sysctl -a | grep qdisc
net.core.default_qdisc = fq_codelVeja o
qdisc
da atual conexão Ethernet:#
tc -s qdisc show dev enp0s1
qdisc fq_codel 0: root refcnt 2 limit 10240p flows 1024 quantum 1514 target 5.0ms interval 100.0ms memory_limit 32Mb ecn Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) backlog 0b 0p requeues 0 maxpacket 0 drop_overlimit 0 new_flow_count 0 ecn_mark 0 new_flows_len 0 old_flows_len 0Atualize o existente
qdisc
:#
sysctl -w net.core.default_qdisc=pfifo_fast
Para aplicar as mudanças, recarregue o driver da rede:
#
rmmod NETWORKDRIVERNAME
#
modprobe NETWORKDRIVERNAME
Iniciar a interface da rede:
#
ip link set enp0s1 up
Etapas de verificação
Veja o
qdisc
da conexão Ethernet:#
tc -s qdisc show dev enp0s1
qdisc pfifo_fast 0: root refcnt 2 bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1 Sent 373186 bytes 5333 pkt (dropped 0, overlimits 0 requeues 0) backlog 0b 0p requeues 0 ....
24.5. Configuração temporária do qdisk atual de uma interface de rede usando o utilitário tc
Você pode atualizar o atual qdisc
sem alterar o padrão. Este procedimento descreve como alterar o atual qdisc
no Red Hat Enterprise Linux.
Procedimento
Opcional: Veja o atual
qdisc
:#
tc -s qdisc show dev enp0s1
Atualize o atual
qdisc
:#
tc qdisc replace dev enp0s1 root htb
Etapa de verificação
Veja a atualização atual
qdisc
:#
tc -s qdisc show dev enp0s1
qdisc htb 8001: root refcnt 2 r2q 10 default 0 direct_packets_stat 0 direct_qlen 1000 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) backlog 0b 0p requeues 0
24.6. Configuração permanente do qdisk atual de uma interface de rede usando o NetworkManager
Você pode atualizar o valor atual qdisc
de uma conexão NetworkManager.
Procedimento
Opcional: Veja o atual
qdisc
:# tc qdisc show dev enp0s1 qdisc fq_codel 0: root refcnt 2
Atualize o atual
qdisc
:# nmcli connection modify enp0s1 tc.qdiscs ‘root pfifo_fast’
Opcional: Para adicionar outro
qdisc
sobre o existenteqdisc
, use a opçãotc.qdisc
:# nmcli connection modify enp0s1 tc.qdisc ‘ingress handle ffff:’
Ativar as mudanças:
# nmcli connection up enp0s1
Etapas de verificação
Veja atualmente
qdisc
a interface da rede:# tc qdisc show dev _enp0s1_ qdisc _pfifo_fast_ 8001: root refcnt 2 bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1 qdisc ingress ffff: parent ffff:fff1 ----------------
Recursos adicionais
-
Para mais informações, consulte a página de manual
nm-settings(5)
.
Capítulo 25. Começando com o Multipath TCP
O TCP Multipath é fornecido apenas como uma Visualização de Tecnologia. Os recursos de Technology Preview não são suportados com os Acordos de Nível de Serviço (SLAs) de produção da Red Hat, podem não ser completos funcionalmente e a Red Hat não recomenda o seu uso para produção. Estas prévias fornecem acesso antecipado às próximas características do produto, permitindo aos clientes testar a funcionalidade e fornecer feedback durante o processo de desenvolvimento.
Veja Technology Preview Features Support Scope no Portal do Cliente da Red Hat para obter informações sobre o escopo de suporte para os recursos de Technology Preview.
O TCP Multipath (MPTCP) é uma extensão do Protocolo de Controle de Transmissão (TCP). Usando o Protocolo de Internet (IP), um host pode enviar pacotes para um destino. O TCP garante a entrega confiável dos dados através da Internet e ajusta automaticamente sua largura de banda em resposta à carga da rede.
As vantagens do MPTCP são as seguintes:
- Ele permite TCP para uso em dispositivos equipados com duas ou mais interfaces de rede.
- Ela permite que os usuários utilizem simultaneamente diferentes interfaces de rede ou mudem sem problemas de uma conexão para outra.
- Ela melhora o uso de recursos dentro da rede e a resiliência à falha da rede.
Esta seção descreve como fazê-lo:
- criar uma nova conexão MPTCP,
- usar
iproute2
para adicionar novos subfluxos e endereços IP às conexões MPTCP, e - desabilitar o MPTCP no kernel para evitar aplicações que utilizam conexões MPTCP.
25.1. Preparando a RHEL para permitir o apoio ao MPTCP
Poucas aplicações suportam nativamente o MPTCP. Na maioria das vezes, a conexão e os soquetes orientados a fluxo solicitam o protocolo TCP no soquete() chamada para o sistema operacional. Você pode habilitar o suporte a MPTCP na RHEL usando a ferramenta sysctl
para programas suportados
nativamente por MPTCP. A implementação do MPTCP também foi projetada para permitir o uso do protocolo MPTCP para aplicações que solicitem IPPROTO_TCP
call to the kernel.
Este procedimento descreve como habilitar o suporte a MPTCP e preparar a RHEL para habilitar todo o sistema MPTCP usando um script SystemTap.
Pré-requisitos
Os seguintes pacotes estão instalados:
-
kernel-debuginfo
-
kernel-debuginfo-common
-
systemtap
-
systemtap-devel
-
kernel-devel
-
nmap-ncat
Procedimento
Habilitar soquetes MPTCP no núcleo:
#
echo "net.mptcp.enabled=1" > /etc/sysctl.d/90-enable-MPTCP.conf
#sysctl -p /etc/sysctl.d/90-enable-MPTCP.conf
Crie um arquivo
mptcp.stap
com o seguinte conteúdo:#! /usr/bin/env stap %{ #include <linux/in.h> #include <linux/ip.h> %} /* according to [1], RSI contains 'type' and RDX * contains 'protocol'. * [1] https://github.com/torvalds/linux/blob/master/arch/x86/entry/entry_64.S#L79 */ function mptcpify () %{ if (CONTEXT->kregs->si == SOCK_STREAM && (CONTEXT->kregs->dx == IPPROTO_TCP || CONTEXT->kregs->dx == 0)) { CONTEXT->kregs->dx = IPPROTO_MPTCP; STAP_RETVALUE = 1; } else { STAP_RETVALUE = 0; } %} probe kernel.function("__sys_socket") { if (mptcpify() == 1) { printf("command %16s mptcpified\n", execname()); } }
Substitua o soquete TCP por MPTCP:
#
stap -vg mptcp.stap
Nota: Use Ctrl+C para converter a conexão de volta para TCP a partir de MPTCP.
Inicie um servidor que escute a porta TCP 4321:
#
ncat -4 -l 4321
Conecte-se ao servidor e troque tráfego. Por exemplo, o cliente aqui escreve "Olá mundo" para o servidor 5 vezes, depois ele encerra a conexão.
#
ncat -4 192.0.2.1 4321
Hello world 1
Hello world 2
Hello world 3
Hello world 4
Hello world 5
Imprensa Ctrl+D para desistir.
Etapas de verificação
Verificar se o MPTCP está habilitado no núcleo:
#
sysctl -a | grep mptcp.enabled
net.mptcp.enabled = 1Após o script
mptcp.stap
instalar a sonda do kernel, os seguintes avisos aparecem na saída do kerneldmesg
#
dmesg
... [ 1752.694072] Kprobes globally unoptimized [ 1752.730147] stap_1ade3b3356f3e68765322e26dec00c3d_1476: module_layout: kernel tainted. [ 1752.732162] Disabling lock debugging due to kernel taint [ 1752.733468] stap_1ade3b3356f3e68765322e26dec00c3d_1476: loading out-of-tree module taints kernel. [ 1752.737219] stap_1ade3b3356f3e68765322e26dec00c3d_1476: module verification failed: signature and/or required key missing - tainting kernelDepois que a conexão for estabelecida, verifique a saída
ss
para ver o status específico do subfluxo:#
ss -nti '( dport :4321 )' dst 192.0.2.1
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process ESTAB 0 0 192.0.2.2:60874 192.0.2.1:4321 cubic wscale:7,7 rto:201 rtt:0.042/0.017 mss:1448 pmtu:1500 rcvmss:536 advmss:1448 cwnd:10 bytes_sent:64 bytes_$cked:65 segs_out:6 segs_in:5 data_segs_out:4 send 2758095238bps lastsnd:57 lastrcv:3054 lastack:57 pacing_rate 540361516$bps delivery_rate 413714280bps delivered:5 rcv_space:29200 rcv_ssthresh:29200 minrtt:0.009 tcp-ulp-mptcp flags:Mmec token:0000(id:0)/4bffe73d(id:0) seq:c11f40d6c5337463 sfseq:1 ssnoff:f7455705 maplen:0Capture o tráfego usando
tcpdump
e verifique o uso de sub-opções MPTCP:#
tcpdump -tnni interface tcp port 4321
client Out IP 192.0.2.2.60802 > 192.0.2.1.4321: Flags [S], seq 3420255622, win 29200, options [mss 1460,sackOK,TS val 411 4539945 ecr 0,nop,wscale 7,mptcp capable v1], length 0 client In IP 192.0.2.1.4321 > 192.0.2.2.60802: Flags [S.], seq 2619315374, ack 3420255623, win 28960, options [mss 1460 sackOK,TS val 3241564233 ecr 4114539945,nop,wscale 7,mptcp capable v1 {0xb6f8dc721aee7f64}], length 0 client Out IP 192.0.2.2.60802 > 192.0.2.1.4321: Flags [.], ack 1, win 229, options [nop,nop,TS val 4114539945 ecr 3241564 233,mptcp capable v1 {0xcc58d5d632a32d13,0xb6f8dc721aee7f64}], length 0 client Out IP 192.0.2.2.60802 > 192.0.2.1.4321: Flags [P.], seq 1:17, ack 1, win 229, options [nop,nop,TS val 4114539945 ecr 3241564233,mptcp capable v1 {0xcc58d5d632a32d13,0xb6f8dc721aee7f64},nop,nop], length 16 client In IP 192.0.2.1.4321 > 192.0.2.2.60802: Flags [.], ack 17, win 227, options [nop,nop,TS val 3241564233 ecr 411459945,mptcp dss ack 1105509586894558345], length 0 client Out IP 192.0.2.2.60802 > 192.0.2.1.4321: Flags [P.], seq 17:33, ack 1, win 229, options [nop,nop,TS val 4114540939 ecr 3241564233,mptcp dss ack 13265586846326199424 seq 105509586894558345 subseq 17 len 16,nop,nop], length 16O pacote
tcpdump
é necessário para executar este comando.
Recursos adicionais
- Para mais informações veja, Como posso baixar ou instalar pacotes de debuginfo para sistemas RHEL? artigo.
- Para mais informações em
IPPROTO_TCP
, consulte as páginas de manualtcp(7)
.
25.2. Usando o iproute2 para notificar aplicações sobre múltiplos caminhos disponíveis
Por padrão, o soquete MPTCP começa com um único subfluxo, mas você pode adicionar novos subfluxos e endereços IP à conexão uma vez que você a crie pela primeira vez. Este procedimento descreve como atualizar os limites por conexão para subfluxos e endereços IP, e adicionar novos endereços IP (endpoints) à conexão MPTCP.
Note que o MPTCP ainda não suporta terminais mistos IPv6 e IPv4 para o mesmo soquete. Use endpoints que pertençam à mesma família de endereços.
Procedimento
Defina os limites por conexão e endereço IP para 1 no servidor:
#
ip mptcp limits set subflow 1
Estabelecer os limites por conexão e endereço IP para 1 no cliente:
#
ip mptcp limits set subflow 1 add_addr_accepted 1
Adicione o endereço IP 198.51.100.1 como um novo endpoint MPTCP no servidor:
#
ip mptcp endpoint add 198.51.100.1 dev enp1s0 signal
Você pode definir os seguintes valores para as bandeiras:
subflow
,backup
,signal
. Colocando a bandeira em;-
signal
, envia um pacoteADD_ADDR
depois que o aperto de mão triplo for concluído -
subflow
, envia umMP_JOIN SYN
pelo cliente -
backup
, define o ponto final como um endereço de backup
-
Iniciar a ligação do servidor a 0.0.0.0 com o argumento
-k
para evitar que o [systemitem]'ncat' feche a tomada de escuta após aceitar a primeira conexão e fazer o servidor rejeitarMP_JOIN SYN
feito pelo cliente.#
ncat -4 0.0.0.0 -k -l 4321
Inicie o cliente e conecte-se ao servidor para trocar tráfego. Por exemplo, o cliente aqui escreve "Olá mundo" para o servidor 5 vezes, depois ele encerra a conexão.
#
ncat -4 192.0.2.1 4321
Hello world 1
Hello world 2
Hello world 3
Hello world 4
Hello world 5
Imprensa Ctrl+D para desistir.
Etapas de verificação
Verificar a conexão e o limite de endereço IP:
#
ip mptcp limit show
Verificar o ponto final recém-adicionado:
#
ip mptcp endpoint show
Capture o tráfego usando
tcpdump
e verifique o uso de sub-opções MPTCP:#
tcpdump -tnni interface tcp port 4321
client Out IP 192.0.2.2.56868 > 192.0.2.1.4321: Flags [S], seq 3107783947, win 29200, options [mss 1460,sackOK,TS val 2568752336 ecr 0,nop,wscale 7,mptcp capable v1], length 0 client In IP 192.0.2.1.4321 > 192.0.2.2.56868: Flags [S.], seq 4222339923, ack 3107783948, win 28960, options [mss 1460,sackOK,TS val 1713130246 ecr 2568752336,nop,wscale 7,mptcp capable v1 {0xf51c07a47cc2ba75}], length 0 client Out IP 192.0.2.2.56868 > 192.0.2.1.4321: Flags [.], ack 1, win 229, options [nop,nop,TS val 2568752336 ecr 1713130246,mptcp capable v1 {0xb243376cc5af60bd,0xf51c07a47cc2ba75}], length 0 client Out IP 192.0.2.2.56868 > 192.0.2.1.4321: Flags [P.], seq 1:17, ack 1, win 229, options [nop,nop,TS val 2568752336 ecr 1713130246,mptcp capable v1 {0xb243376cc5af60bd,0xf51c07a47cc2ba75},nop,nop], length 16 client In IP 192.0.2.1.4321 > 192.0.2.2.56868: Flags [.], ack 17, win 227, options [nop,nop,TS val 1713130246 ecr 2568752336,mptcp add-addr id 1 198.51.100.1 hmac 0xe445335073818837,mptcp dss ack 5562689076006296132], length 0 client Out IP 198.51.100.2.42403 > 198.51.100.1.4321: Flags [S], seq 3356992178, win 29200, options [mss 1460,sackOK,TS val 4038525523 ecr 0,nop,wscale 7,mptcp join backup id 0 token 0xad58df1 nonce 0x74a8137f], length 0 client In IP 198.51.100.1.4321 > 198.51.100.2.42403: Flags [S.], seq 1680863152, ack 3356992179, win 28960, options [mss 1460,sackOK,TS val 4213669942 ecr 4038525523,nop,wscale 7,mptcp join backup id 0 hmac 0x9eff7a1bf4e65937 nonce 0x77303fd8], length 0 client Out IP 198.51.100.2.42403 > 198.51.100.1.4321: Flags [.], ack 1, win 229, options [nop,nop,TS val 4038525523 ecr 4213669942,mptcp join hmac 0xdfdc0129424f627ea774c094461328ce49d195bc], length 0 client In IP 198.51.100.1.4321 > 198.51.100.2.42403: Flags [.], ack 1, win 227, options [nop,nop,TS val 4213669942 ecr 4038525523,mptcp dss ack 5562689076006296132], length 0O pacote
tcpdump
é necessário para executar este comando.
Recursos adicionais
- Para mais informações sobre as bandeiras de endpoint disponíveis, consulte a página de manual
ip-mptcp(8)
.
25.3. Desabilitando o TCP Multipath no kernel
Este procedimento descreve como desativar a opção MPTCP no kernel.
Procedimento
Desativar a opção
mptcp.enabled
.#
echo "net.mptcp.enabled=0" > /etc/sysctl.d/90-enable-MPTCP.conf
#sysctl -p /etc/sysctl.d/90-enable-MPTCP.conf
Etapas de verificação
Verificar se o
mptcp.enabled
está desativado no núcleo.#
sysctl -a | grep mptcp.enabled
net.mptcp.enabled = 0
Capítulo 26. Configurando a ordem dos servidores DNS
A maioria das aplicações usa a função getaddrinfo()
da biblioteca glibc
para resolver solicitações DNS. Por padrão, glibc
envia todas as solicitações DNS para o primeiro servidor DNS especificado no arquivo /etc/resolv.conf
. Se este servidor não responder, o Red Hat Enterprise Linux usa o próximo
servidor deste arquivo.
Esta seção descreve como personalizar a ordem dos servidores DNS.
26.1. Como o NetworkManager ordena servidores DNS em /etc/resolv.conf
O NetworkManager ordena servidores DNS no arquivo /etc/resolv.conf
com base nas seguintes regras:
- Se existir apenas um perfil de conexão, o NetworkManager utiliza a ordem do servidor DNS IPv4 e IPv6 especificada nessa conexão.
Se vários perfis de conexão forem ativados, o NetworkManager ordena servidores DNS com base em um valor de prioridade DNS. Se você definir prioridades DNS, o comportamento do NetworkManager dependerá do valor definido no parâmetro
dns
. Você pode definir este parâmetro na seção[main]
no arquivo/etc/NetworkManager/NetworkManager.conf
:dns=default
ou se o parâmetrodns
não estiver definido:O NetworkManager ordena os servidores DNS a partir de diferentes conexões com base no parâmetro
ipv4.dns-priority
eipv6.dns-priority
em cada conexão.Se você não definir nenhum valor ou se você definir
ipv4.dns-priority
eipv6.dns-priority
para0
, o NetworkManager utiliza o valor padrão global. Ver “Valores padrão dos parâmetros de prioridade DNS”.dns=dnsmasq
oudns=systemd-resolved
:Quando você usa uma dessas configurações, o NetworkManager configura
127.0.0.1
paradnsmasq
ou127.0.0.53
como entradanameserver
no arquivo/etc/resolv.conf
.Os serviços
dnsmasq
esystemd-resolved
encaminham as consultas para o domínio de busca definido em uma conexão NetworkManager ao servidor DNS especificado nessa conexão, e encaminha as consultas para outros domínios para a conexão com a rota padrão. Quando múltiplas conexões têm o mesmo conjunto de domínios de busca,dnsmasq
esystemd-resolved
encaminham as consultas para este domínio ao servidor DNS definido na conexão com o menor valor de prioridade.
Valores padrão dos parâmetros de prioridade DNS
O NetworkManager utiliza os seguintes valores padrão para conexões:
-
50
para conexões VPN -
100
para outras conexões
Valores de prioridade DNS válidos:
Você pode definir tanto o padrão
global quanto parâmetros específicos de conexão ipv4.dns-priority
e ipv6.dns-priority
para um valor entre -2147483647
e 2147483647
.
- Um valor menor tem uma prioridade maior.
- Os valores negativos têm o efeito especial de excluir outras configurações com um valor maior. Por exemplo, se existe pelo menos uma conexão com um valor de prioridade negativa, o NetworkManager utiliza apenas os servidores DNS especificados no perfil de conexão com a prioridade mais baixa.
Se várias conexões tiverem a mesma prioridade DNS, o NetworkManager prioriza o DNS na seguinte ordem:
- Conexões VPN
- Conexão com uma rota padrão ativa. A rota padrão ativa é a rota padrão a mais baixa métrica.
Recursos adicionais
- Para mais detalhes sobre como o NetworkManager ordena as entradas do servidor DNS no arquivo
/etc/resolv.conf
, consulte a descrição dos parâmetrosdns-priority
nas seçõesipv4
eipv6
na página de manualnm-settings(5)
. - Para detalhes sobre o uso de
systemd-resolved
para usar diferentes servidores DNS para diferentes domínios, veja Capítulo 34, Usando diferentes servidores DNS para diferentes domínios.
26.2. Definição de um valor de prioridade de servidor DNS padrão do NetworkManager
O NetworkManager utiliza os seguintes valores padrão de prioridade DNS para conexões:
-
50
para conexões VPN -
100
para outras conexões
Esta seção descreve como substituir esses padrões de todo o sistema com um valor padrão personalizado para conexões IPv4 e IPv6.
Procedimento
Edite o arquivo
/etc/NetworkManager/NetworkManager.conf
:Adicione a seção
[connection]
, se ela não existir:[conexão]
Adicione os valores padrão personalizados à seção
[connection]
. Por exemplo, para definir o novo padrão tanto para IPv4 quanto para IPv6 para200
, adicionar:ipv4.dns-priority=200 ipv6.dns-priority=200
Você pode definir os parâmetros para um valor entre
-2147483647
e2147483647
. Note que a definição dos parâmetros para0
permite os padrões embutidos (50
para conexões VPN e100
para outras conexões).
Recarregue o serviço
NetworkManager
:#
systemctl reload NetworkManager
Recursos adicionais
- Para detalhes adicionais sobre a definição de valores padrão para todas as conexões NetworkManager, consulte
Connection Section
na página de manualNetworkManager.conf(5)
.
26.3. Definindo a prioridade DNS de uma conexão NetworkManager
Esta seção descreve como definir a ordem dos servidores DNS quando o NetworkManager cria ou atualiza o arquivo /etc/resolv.conf
.
Observe que a definição de prioridades DNS só faz sentido se você tiver múltiplas conexões com diferentes servidores DNS configurados. Se você tiver apenas uma conexão com múltiplos servidores DNS configurados, configure manualmente os servidores DNS na ordem preferida no perfil de conexão.
Pré-requisitos
- O sistema tem múltiplas conexões NetworkManager configuradas.
- O sistema ou não tem nenhum parâmetro
dns
definido no arquivo/etc/NetworkManager/NetworkManager.conf
ou o parâmetro está definido paradefault
.
Procedimento
Opcionalmente, exibir as conexões disponíveis:
#
nmcli connection show
NAME UUID TYPE DEVICE Example_con_1 d17ee488-4665-4de2-b28a-48befab0cd43 ethernet enp1s0 Example_con_2 916e4f67-7145-3ffa-9f7b-e7cada8f6bf7 ethernet enp7s0 ...Estabelecer os parâmetros
ipv4.dns-priority
eipv6.dns-priority
. Por exemplo, para definir os dois parâmetros para10
para a conexãoExample_con_1
:#
nmcli connection modify Example_con_1 ipv4.dns-priority 10 ipv6.dns-priority 10
- Opcionalmente, repetir a etapa anterior para outras conexões.
Reative a conexão que você atualizou:
#
nmcli connection up Example_con_1
Etapas de verificação
Exibir o conteúdo do arquivo
/etc/resolv.conf
para verificar se a ordem do servidor DNS está correta:#
cat /etc/resolv.conf
Capítulo 27. Configuração de rede ip com arquivos ifcfg
Esta seção descreve como configurar uma interface de rede manualmente através da edição dos arquivos ifcfg
.
Os arquivos de configuração de interface (ifcfg) controlam as interfaces de software para dispositivos de rede individuais. Como o sistema inicia, ele
usa esses arquivos para determinar quais interfaces devem ser criadas e como configurá-las. Estes arquivos são normalmente nomeados ifcfg-name
, onde o sufixo name se refere ao nome do dispositivo que o arquivo de configuração controla. Por convenção, o sufixo ifcfg
é o mesmo que a seqüência dada pela diretiva DEVICE
no próprio arquivo de configuração.
27.1. Configuração de uma interface com configurações de rede estática usando arquivos ifcfg
Este procedimento descreve como configurar uma interface de rede usando os arquivos ifcfg
.
Procedimento
Para configurar uma interface com configurações de rede estática usando arquivos
ifcfg
, para uma interface com o nomeenp1s0
, crie um arquivo com o nomeifcfg-enp1s0
no diretório/etc/sysconfig/network-scripts/
que contém:Para configuração em
IPv4
:DEVICE=enp1s0 BOOTPROTO=none ONBOOT=yes PREFIX=24 IPADDR=10.0.1.27 GATEWAY=10.0.1.1
Para configuração em
IPv6
:DEVICE=enp1s0 BOOTPROTO=none ONBOOT=yes IPV6INIT=yes IPV6ADDR=2001:db8:1::2/64
Recursos adicionais
- Para mais informações sobre as conexões de teste, ver Capítulo 39, Teste de configurações básicas de rede.
- Para mais
IPv6
ifcfg opções de configuração, veja nm-settings-ifcfg-rh(5) página do homem.
27.2. Configuração de uma interface com configurações dinâmicas de rede usando arquivos ifcfg
Este procedimento descreve como configurar uma interface de rede com configurações dinâmicas de rede usando
arquivos ifcfg
.
Procedimento
Para configurar uma interface chamada em1 com configurações dinâmicas de rede usando arquivos
ifcfg
, crie um arquivo com o nomeifcfg-em1
no diretório/etc/sysconfig/network-scripts/
que contém:DEVICE=em1 BOOTPROTO=dhcp ONBOOT=yes
Para configurar uma interface para enviar um nome de host diferente para o servidor
DHCP
, adicione a seguinte linha ao arquivoifcfg
:DHCP_HOSTNAME=hostname
Para configurar uma interface para enviar um outro nome de domínio totalmente qualificado (FQDN) para o servidor
DHCP
, adicione a seguinte linha ao arquivoifcfg
:DHCP_FQDN=fully.qualified.domain.name
Apenas uma diretriz,
DHCP_HOSTNAME
ouDHCP_FQDN
, deve ser usada em um determinado arquivoifcfg
. No caso de serem especificadosDHCP_HOSTNAME
eDHCP_FQDN
, somente esta última é utilizada.Para configurar uma interface para utilizar determinados servidores
DNS
, adicione as seguintes linhas ao arquivoifcfg
:PEERDNS=no DNS1=ip-address DNS2=ip-address
onde ip-address é o endereço de um servidor
DNS
. Isto fará com que o serviço de rede atualize/etc/resolv.conf
com os servidoresDNS
especificados. Apenas umDNS
endereço de servidor é necessário, o outro é opcional.
27.3. Gerenciamento de todo o sistema e perfis de conexão privada com arquivos ifcfg
Este procedimento descreve como configurar os arquivos ifcfg
para gerenciar os perfis de conexão privada e de todo o sistema.
Procedimento
As permissões correspondem à diretriz USERS
nos arquivos ifcfg
. Se a diretiva USERS
não estiver presente, o perfil da rede estará disponível para todos os usuários.
Como exemplo, modifique o arquivo
ifcfg
com a seguinte linha, que tornará a conexão disponível apenas para os usuários listados:USUÁRIOS="joe bob alice
Capítulo 28. Usando o NetworkManager para desativar o IPv6 para uma conexão específica
Esta seção descreve como desativar o protocolo IPv6 em um sistema que usa o NetworkManager para gerenciar as interfaces de rede. Se você desabilitar o IPv6, o
NetworkManager define automaticamente os valores correspondentes de sysctl
no Kernel.
O serviço NetworkManager estabelece certos valores sysctl
quando inicia uma conexão. Para evitar comportamentos inesperados, não defina manualmente os valores sysctl
para desativar o IPv6.
Pré-requisitos
- O sistema usa o NetworkManager para gerenciar as interfaces de rede, que é o padrão no Red Hat Enterprise Linux 8.
- O sistema roda o Red Hat Enterprise Linux 8.1 ou posterior.
28.1. Desabilitando IPv6 em uma conexão usando nmcli
Use esta seção para desativar o protocolo IPv6 usando o utilitário nmcli
.
Procedimento
Opcionalmente, exibir a lista de conexões de rede:
# nmcli connection show NAME UUID TYPE DEVICE Example 7a7e0151-9c18-4e6f-89ee-65bb2d64d365 ethernet enp1s0 ...
-
Definir o parâmetro
ipv6.method
da conexão paradisabled
:# nmcli connection modify Example ipv6.method {\i1}"disabled
Reiniciar a conexão de rede:
# nmcli conexão acima Example
Etapas de verificação
Digite o comando
ip address show
para exibir as configurações de IP do dispositivo:# ip address show enp1s0 2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 52:54:00:6b:74:be brd ff:ff:ff:ff:ff:ff inet 192.0.2.1/24 brd 192.10.2.255 scope global noprefixroute enp1s0 valid_lft forever preferred_lft forever
Se não for exibida a entrada
inet6
, o IPv6 é desativado no dispositivo.Verifique se o
/proc/sys/net/ipv6/conf/enp1s0/disable_ipv6
contém agora o valor1
:# cat /proc/sys/net/ipv6/conf/enp1s0/disable_ipv6 1
O valor
1
significa que o IPv6 está desabilitado para o dispositivo.
Capítulo 29. Configuração manual do arquivo /etc/resolv.conf
Por default, o NetworkManager no Red Hat Enterprise Linux (RHEL) 8 atualiza dinamicamente o arquivo /etc/resolv.conf
com as configurações DNS dos perfis de conexão ativos do NetworkManager. Esta seção descreve diferentes opções
sobre como desativar este recurso para configurar manualmente as configurações do DNS em /etc/resolv.conf
.
29.1. Desativação do processamento DNS na configuração do NetworkManager
Esta seção descreve como desativar o processamento DNS na configuração do NetworkManager para configurar manualmente o arquivo /etc/resolv.conf
.
Procedimento
Como usuário root, crie o arquivo
/etc/NetworkManager/conf.d/90-dns-none.conf
com o seguinte conteúdo, utilizando um editor de texto:[main] dns=none
Recarregue o serviço
NetworkManager
:# systemctl reload NetworkManager
Depois de recarregar o serviço, o NetworkManager não atualiza mais o arquivo
/etc/resolv.conf
. Entretanto, o último conteúdo do arquivo é preservado.- Opcionalmente, remova o comentário
Generated by NetworkManager
de/etc/resolv.conf
para evitar confusão.
Etapas de verificação
- Editar o arquivo
/etc/resolv.conf
e atualizar manualmente a configuração. Recarregue o serviço
NetworkManager
:# systemctl reload NetworkManager
Exibir o arquivo
/etc/resolv.conf
:# cat /etc/resolv.conf
Se você desativou com sucesso o processamento DNS, o NetworkManager não anulou as configurações manuais.
Recursos adicionais
- Para mais detalhes, consulte a descrição do parâmetro
dns
na página de manualNetworkManager.conf(5)
.
29.2. Substituindo /etc/resolv.conf por um link simbólico para configurar manualmente as configurações do DNS
O NetworkManager não atualiza automaticamente a configuração do DNS se /etc/resolv.conf
for um link simbólico. Esta seção descreve como substituir /etc/resolv.conf
por um link simbólico para um arquivo alternativo com
a configuração do DNS.
Pré-requisitos
- A opção
rc-manager
não está definida parafile
. Para verificar, use o comandoNetworkManager --print-config
.
Procedimento
- Crie um arquivo, como
/etc/resolv.conf.manually-configured
, e adicione a configuração DNS para seu ambiente a ele. Use os mesmos parâmetros e sintaxe que no original/etc/resolv.conf
. Remover o arquivo
/etc/resolv.conf
:# rm /etc/resolv.conf
Criar um link simbólico chamado
/etc/resolv.conf
que se refere a/etc/resolv.conf.manually-configured
:# ln -s /etc/resolv.conf.manualmente-configurado /etc/resolv.conf
Recursos adicionais
- Para detalhes sobre os parâmetros que você pode definir em
/etc/resolv.conf
, consulte a página de manualresolv.conf(5)
. - Para mais detalhes sobre por que o NetworkManager não processa configurações DNS se
/etc/resolv.conf
é um link simbólico, veja a descrição do parâmetrorc-manager
na página de manualNetworkManager.conf(5)
.
Capítulo 30. Configuração das configurações do link 802.3
Você pode configurar as configurações de conexão 802.3 de uma conexão Ethernet modificando os seguintes parâmetros de configuração:
-
802-3-ethernet.auto-negotiate
-
802-3-ethernet.speed
-
802-3-ethernet.duplex
Você pode configurar as configurações do link 802.3 para os seguintes modos principais:
- Ignorar a negociação do link
- Fazer valer a ativação da auto-negociação
- Configurar manualmente os links
speed
eduplex
30.1. Configuração das configurações de ligação 802.3 com a ferramenta nmcli
Este procedimento descreve como configurar as configurações do link 802.3 usando a ferramenta nmcli
.
Pré-requisitos
- O NetworkManager deve ser instalado e em funcionamento.
Procedimento
Para ignorar a negociação do link, defina os seguintes parâmetros:
~]# conexão nmcli modificar connection_name 802-3-ethernet.auto-negociate no 802-3-ethernet.speed 0 802-3-ethernet.duplex \i
Observe que o parâmetro de auto-negociação não é desativado mesmo que os parâmetros de velocidade e duplex não estejam definidos e o parâmetro de auto-negociação esteja definido como não.
Para impor a ativação da auto-negociação, digite o seguinte comando:
~]# conexão nmcli modificar connection_name 802-3-ethernet.auto-negociar sim 802-3-ethernet.speed 0 802-3-ethernet.duplex ""
Isso permite negociar todos os modos de velocidade e duplex disponíveis suportados pelo NIC.
Você também pode habilitar a auto-negociação enquanto faz publicidade e permitir apenas um modo velocidade/duplex. Isto pode ser útil se você quiser aplicar a configuração de links
1000BASE-T
e10GBASE-T
Ethernet, uma vez que estas normas exigem a auto-negociação ativada. Para fazer cumprir a norma1000BASE-T
:~]# conexão nmcli modificar connection_name 802-3-ethernet.auto-negociate sim 802-3-ethernet.speed 1000 802-3-ethernet.duplex full
-
Para definir manualmente as configurações de velocidade e link duplex, digite o seguinte comando:
~]# conexão nmcli modificar connection_name 802-3-ethernet.auto-negociar sem 802-3-ethernet.speed [velocidade em Mbit/s] 802-3-ethernet.duplex [full|half]
Capítulo 31. Configuração dos recursos de descarga de etool
As placas de interface de rede podem usar o motor de descarga TCP (TOE) para descarregar o processamento de certas operações para o controlador da rede para melhorar o rendimento da rede.
Esta seção descreve como ativar os recursos de descarga.
31.1. Recursos de descarregamento suportados pelo NetworkManager
Você pode configurar os seguintes recursos para descarregar ethtool
usando o NetworkManager:
- ethtool.feature-esp-hw-offload
- ethtool.feature-esp-tx-csum-hw-offload
- ethtool.feature-fcoe-mtu
- ethtool.feature-gro
- ethtool.feature-gso
- ethtool.feature-highdma
- ethtool.feature-hw-tc-offload
- ethtool.feature-l2-fwd-offload
- ethtool.feature-loopback
- ethtool.feature-lro
- ethtool.feature-ntuple
- ethtool.feature-rx
- ethtool.feature-rx-all
- ethtool.feature-rx-fcs
- ethtool.feature-rx-gro-hw
- ethtool.feature-rx-udp_tunnel-port-offload
- ethtool.feature-rx-vlan-filter
- ethtool.feature-rx-vlan-stag-filter
- ethtool.feature-rx-vlan-stag-hw-parse
- etool.extirpar características
- ethtool.feature-rxvlan
- ethtool.feature-sg
- ethtool.feature-tls-hw-record
- ethtool.feature-tls-hw-tx-offload
- ethtool.feature-tso
- ethtool.feature-tx
- ethtool.feature-tx-checksum-fcoe-crc
- ethtool.feature-tx-checksum-ip-generic
- ethtool.feature-tx-checksum-ipv4
- ethtool.feature-tx-checksum-ipv6
- ethtool.feature-tx-checksum-sctp
- ethtool.feature-tx-esp-segmentation
- ethtool.feature-tx-fcoe-segmentation
- ethtool.feature-tx-gre-csum-segmentação
- ethtool.feature-tx-gregmentation
- ethtool.feature-tx-gso-parcial
- ethtool.feature-tx-gso-robust
- ethtool.feature-tx-ipxip4-segmentation
- ethtool.feature-tx-ipxip6-segmentação
- ethtool.feature-tx-nocache-copy
- ethtool.feature-tx-scatter-gather
- ethtool.feature-tx-scatter-gather-fraglist
- ethtool.feature-tx-sctp-segmentation
- ethtool.feature-tx-tcp-ecn-segmentation
- ethtool.feature-tx-tcp-mangleid-segmentation
- ethtool.feature-tx-tcp-segmentation
- ethtool.feature-tx-tcp6-segmentação
- ethtool.feature-tx-udp-segmentation
- ethtool.feature-tx-udp_tnl-csum-segmentation
- ethtool.feature-tx-udp_tnl-segmentation
- ethtool.feature-tx-vlan-stag-hw-insert
- ethtool.feature-txvlan
Para detalhes sobre os recursos individuais de descarga, veja a documentação do utilitário ethtool
e a documentação do kernel.
31.2. Configuração de um recurso de descarga de etool usando o NetworkManager
Esta seção descreve como habilitar e desabilitar os recursos de descarregar ethtool
usando o NetworkManager, bem como como remover a configuração de um recurso de um perfil de conexão NetworkManager.
Procedimento
Por exemplo, para ativar o recurso de descarga RX e desativar a descarga TX no perfil de conexão
enp1s0
, entre:# nmcli con modificar enp1s0 ethtool.feature-rx em ethtool.feature-tx off
Este comando permite explicitamente a descarga do RX e desativa a descarga do TX.
-
Para remover a configuração de um recurso de descarga que você ativou ou desativou anteriormente, defina o parâmetro do recurso para
ignore
. Por exemplo, para remover a configuração para TX offload, entre:# nmcli con modificar enp1s0 ethtool.feature-tx ignore
Reativar o perfil da rede:
# nmcli conexão acima enp1s0
Etapas de verificação
Use o comando
ethtool -k
para exibir as características atuais de descarga de um dispositivo de rede:# etool -k network_device
31.3. Utilização de funções do sistema para definir as características do etool
Você pode usar a função do Sistema RHEL networking
para configurar ethtool
recursos de uma conexão NetworkManager.
Quando você executa uma peça que usa o Sistema Função networking
RHEL, o Sistema Função substitui um perfil de conexão existente com o mesmo nome se as
configurações não coincidirem com as especificadas na peça. Portanto, sempre especifique toda a configuração do perfil de conexão de rede na peça, mesmo que, por exemplo, a configuração IP já exista. Caso contrário, o papel redefine estes valores com seus padrões.
Dependendo se já existe, o procedimento cria ou atualiza o perfil de conexão enp1s0
com as seguintes configurações:
- Um endereço IPv4 estático -
198.51.100.20
com uma máscara de sub-rede/24
- Um endereço IPv6 estático -
2001:db8:1::1
com uma máscara de sub-rede/64
- Um gateway padrão IPv4 -
198.51.100.254
- Um gateway padrão IPv6 -
2001:db8:1::fffe
- Um servidor DNS IPv4 -
198.51.100.200
- Um servidor DNS IPv6 -
2001:db8:1::ffbb
- Um domínio de busca DNS -
example.com
ethtool
apresenta:- Genéricos recebem descarregar (GRO): desativado
- Segmentação genérica de descarga (GSO): habilitada
- Segmentação do TX Stream Control Transmission Protocol (SCTP): desativado
Pré-requisitos
- Os pacotes
ansible
erhel-system-roles
estão instalados no nó de controle. - Se você usar um usuário remoto diferente do root ao executar o playbook, este usuário tem as permissões apropriadas
sudo
no nó gerenciado.
Procedimento
Se o anfitrião no qual você deseja executar as instruções no playbook ainda não estiver inventariado, adicione o IP ou nome deste anfitrião ao arquivo
/etc/ansible/hosts
Inventário possível:node.example.com
Crie o playbook
~/configure-ethernet-device-with-ethtool-features.yml
com o seguinte conteúdo:--- - name. Configure an Ethernet connection with ethtool features hosts: node.example.com become: true tasks: - include_role: name: linux-system-roles.network vars: network_connections: - name: enp1s0 type: ethernet autoconnect: yes ip: address: - 198.51.100.20/24 - 2001:db8:1::1/64 gateway4: 198.51.100.254 gateway6: 2001:db8:1::fffe dns: - 198.51.100.200 - 2001:db8:1::ffbb dns_search: - example.com ethtool: feature: gro: "no" gso: "yes" tx_sctp_segmentation: "no" state: up
Execute o livro de brincadeiras:
Para se conectar como usuário
root
ao host gerenciado, entre:#
ansible-playbook -u root ~/configure-ethernet-device-with-ethtool-features.yml
Para conectar-se como usuário ao host administrado, entre:
#
ansible-playbook -u user_name --ask-become-pass ~/configure-ethernet-device-with-ethtool-features.yml
A opção
--ask-become-pass
garante que o comandoansible-playbook
solicita a senhasudo
do usuário definido no-u user_name
opção.
Se você não especificar o
-u user_name
ansible-playbook
se conecta ao host gerenciado como o usuário que está atualmente conectado ao nó de controle.
Recursos adicionais
-
ethtool
Para uma lista completa dos recursos e detalhes sobre os parâmetros usados emnetwork_connections
, e para informações adicionais sobre a função do sistemanetwork
, consulte o arquivo/usr/share/ansible/roles/rhel-system-roles.network/README.md
. - Para obter detalhes sobre o comando
ansible-playbook
, consulte a página de manualansible-playbook(1)
.
Capítulo 32. Configuração de coalesceamento de etool
Usando a coalescência de interrupção, o sistema coleta pacotes de rede e gera uma única interrupção para vários pacotes. Isto aumenta a quantidade de dados enviados ao kernel com uma interrupção de hardware, o que reduz a carga de interrupção, e maximiza a produção.
Esta seção fornece diferentes opções para definir as configurações de coalescência do ethtool
.
32.1. Coalesce configurações suportadas pelo NetworkManager
Você pode definir as seguintes configurações ethtool
coalescer usando o
NetworkManager:
- [parâmetro]`coalescer-adaptativo-rx'
- [parâmetro]`coalescer-adaptativo-tx
- [parâmetro]`coalesce-pkt-taxa alta''
- [parâmetro]`coalesce-pkt-rate-low
- [parâmetro]`coalesce-rx-frames''
- [parâmetro]`coalesce-rx-frames-elevados''
- [parâmetro]`coalesce-rx-frames-irq'
- [parâmetro]`coalesce-rx-frames-low'
- [parâmetro]`coalesce-rx-usecs'
- [parâmetro]`coalesce-rx-usecs-high''
- [parâmetro]`coalesce-rx-usecs-irq'
- [parâmetro]`coalesce-rx-usecs-low'
- parâmetro]`coalescer-intervalo da amostra''
- [parâmetro]`coalesce-stats-block-usecs'
- [parâmetro]`coalesce-tx-frames''
- [parâmetro]`coalesce-tx-frames-high
- [parâmetro]`coalesce-tx-frames-irq'
- [parâmetro]`coalesce-tx-frames-low'
- [parâmetro]`coalesce-tx-usecs'
- [parâmetro]`coalesce-tx-usecs-high
- [parâmetro]`coalesce-tx-usecs-irq'
- [parâmetro]`coalesce-tx-usecs-low'
32.2. Configuração de coalesceamento de ethtool usando o NetworkManager
Esta seção descreve como configurar ethtool
coalesce as configurações usando o NetworkManager, bem como como remover a configuração de um perfil de conexão NetworkManager.
Procedimento
Por exemplo, para definir o número máximo de pacotes recebidos para adiar para
128
no perfil de conexãoenp1s0
, entre:# conexão nmcli modificar enp1s0 ethtool.coalesce-rx-frames 128
Para remover um ajuste de coalescência, defina o ajuste para
ignore
. Por exemplo, para remover a configuraçãoethtool.coalesce-rx-frames
, entre:# conexão nmcli modificar enp1s0 ethtool.coalesce-rx-frames ignorar
Para reativar o perfil da rede:
# nmcli conexão acima enp1s0
Etapas de verificação
Use o comando
ethtool -c
para exibir as características atuais de descarga de um dispositivo de rede:# ettool -c network_device
Capítulo 33. Configuração de MACsec
A seção a seguir fornece informações sobre como configurar Media Control Access Security
(MACsec
), que é uma tecnologia de segurança padrão 802.1AE IEEE para comunicação segura em todo o tráfego em links Ethernet.
33.1. Introdução ao MACsec
Media Access Control Security
(MACsec
, IEEE 802.1AE) codifica e autentica todo o tráfego em LANs com o algoritmo GCM-AES-128. MACsec
pode proteger não apenas IP
mas também o Protocolo de Resolução de Endereços (ARP), Neighbor Discovery (ND), ou DHCP
. Enquanto IPsec
opera na camada de rede (camada 3) e SSL
ou TLS
na camada de aplicação (camada 7),
MACsec
opera na camada de link de dados (camada 2). Combine MACsec
com protocolos de segurança para outras camadas de rede para tirar proveito das diferentes características de segurança que estes padrões oferecem.
33.2. Usando MACsec com a ferramenta nmcli
Este procedimento mostra como configurar MACsec
com a ferramenta nmcli
.
Pré-requisitos
- O NetworkManager deve estar funcionando.
- Você já tem um CAK hexadecimal de 16 bytes (
$MKA_CAK
) e um CKN hexadecimal de 32 bytes ($MKA_CKN
).
Procedimento
Para adicionar uma nova conexão usando
nmcli
, entre:~]# nmcli connection add type macsec \ con-name test-macsec+ ifname macsec0 \ connection.autoconnect no \ macsec.parent enp1s0 macsec.mode psk \ macsec.mka-cak $MKA_CAK \ macsec.mka-ckn $MKA_CKN
Substitua macsec0 pelo nome do dispositivo que você deseja configurar.
Para ativar a conexão, entre:
~]# nmcli conexão up test-macsec
Após esta etapa, o dispositivo macsec0 é configurado e pode ser utilizado para a criação de redes.
33.3. Usando MACsec com wpa_supplicant
Este procedimento mostra como habilitar MACsec
com um switch que realiza a autenticação usando um par pré-partilhado de Chave de Conectividade de
Associação/CAK Name (CAK/CKN).
Procedimento
Criar um par CAK/CKN. Por exemplo, o seguinte comando gera uma chave de 16 bytes em notação hexadecimal:
~]$
dd if=/dev/urandom count=16 bs=1 2> /dev/null | hexdump -e '1/2 "%02x"'
Crie o arquivo de configuração
wpa_supplicant.conf
e acrescente as seguintes linhas a ele:ctrl_interface=/var/run/wpa_supplicant eapol_version=3 ap_scan=0 fast_reauth=1 network={ key_mgmt=NONE eapol_flags=0 macsec_policy=1 mka_cak=0011... # 16 bytes hexadecimal mka_ckn=2233... # 32 bytes hexadecimal }
Use os valores da etapa anterior para completar as linhas
mka_cak
emka_ckn
no arquivo de configuraçãowpa_supplicant.conf
.Para mais informações, consulte a página de manual
wpa_supplicant.conf(5)
.Assumindo que você está usando wlp61s0 para se conectar à sua rede, comece wpa_supplicant usando o seguinte comando:
~]# wpa_supplicant -i wlp61s0 -Dmacsec_linux -c wpa_supplicant.conf
Capítulo 34. Usando diferentes servidores DNS para diferentes domínios
Por
default, o Red Hat Enterprise Linux (RHEL) envia todas as solicitações DNS para o primeiro servidor DNS especificado no arquivo /etc/resolv.conf
. Se este servidor não responder, a RHEL usa o próximo servidor neste arquivo.
Em ambientes onde um servidor DNS não pode resolver todos os domínios, os administradores podem configurar a RHEL para enviar solicitações DNS de um domínio específico para um servidor DNS selecionado. Por exemplo, você pode configurar um servidor DNS para resolver consultas
para example.com
e outro servidor DNS para resolver consultas para example.net
. Para todas as outras solicitações DNS, a RHEL utiliza o servidor DNS configurado na conexão com o gateway padrão.
No RHEL 8, a Red Hat fornece systemd-resolved
como uma prévia tecnológica sem suporte.
34.1. Envio de solicitações DNS para um domínio específico para um servidor DNS selecionado
Esta seção configura o serviço systemd-resolved
e o NetworkManager para enviar consultas ao DNS de um domínio específico para um servidor DNS selecionado.
Se você completar o procedimento nesta seção, a RHEL utiliza o serviço DNS fornecido por systemd-resolved
no arquivo /etc/resolv.conf
. O serviço systemd-resolved
inicia um serviço DNS que escuta na porta 53
endereço IP 127.0.0.53
. O serviço encaminha dinamicamente as solicitações DNS para os servidores DNS
correspondentes especificados no NetworkManager.
O endereço 127.0.0.53
só é acessível a partir do sistema local e não a partir da rede.
Pré-requisitos
- O sistema tem múltiplas conexões NetworkManager configuradas.
Um servidor DNS e um domínio de busca são configurados nas conexões NetworkManager, responsáveis pela resolução de um domínio específico
Por exemplo, se o servidor DNS especificado em uma conexão VPN deve resolver as consultas para o domínio
example.com
, o perfil da conexão VPN deve ter:- Configurou um servidor DNS que pode resolver
example.com
- Configurou o domínio de busca para
example.com
nos parâmetrosipv4.dns-search
eipv6.dns-search
- Configurou um servidor DNS que pode resolver
Procedimento
Inicie e habilite o serviço
systemd-resolved
:# systemctl - agora habilita sistema-resolvido
Edite o arquivo
/etc/NetworkManager/NetworkManager.conf
, e defina a seguinte entrada na seção[main]
:dns=resolvido pelo sistema
Recarregue o serviço
NetworkManager
:# systemctl reload NetworkManager
Etapas de verificação
Verifique se a entrada
nameserver
no arquivo/etc/resolv.conf
se refere a127.0.0.53
:# cat /etc/resolv.conf nameserver 127.0.0.53
Verifique se o serviço
systemd-resolved
ouve na porta53
no endereço IP local127.0.0.53
:# netstat -tulpn | grep "127.0.0.53:53" tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 1050/systemd-resolv udp 0 0 127.0.0.53:53 0.0.0.0:* 1050/systemd-resolv
Recursos adicionais
- Para mais detalhes, consulte a descrição do parâmetro
dns
na página de manualNetworkManager.conf(5)
.
Capítulo 35. Começando com IPVLAN
Este documento descreve o driver IPVLAN.
35.1. Visão geral do IPVLAN
IPVLAN é um driver para um dispositivo de rede virtual que pode ser usado em ambiente de contêineres para acessar a rede anfitriã. IPVLAN expõe um único endereço MAC à rede externa, independentemente do número de dispositivos IPVLAN criados dentro da rede host. Isto significa que um usuário pode ter vários dispositivos IPVLAN em vários contêineres e o switch correspondente lê um único endereço MAC. O driver IPVLAN é útil quando o switch local impõe restrições ao número total de endereços MAC que ele pode gerenciar.
35.2. Modos IPVLAN
Os seguintes modos estão disponíveis para IPVLAN:
L2 mode
No IPVLAN L2 mode, os dispositivos virtuais recebem e respondem às solicitações do Protocolo de Resolução de Endereços (ARP). A estrutura
netfilter
funciona apenas dentro do contêiner que possui o dispositivo virtual. Nonetfilter
as cadeias são executadas no espaço de nomes padrão no tráfego do contêiner. O uso de L2 mode proporciona bom desempenho, mas menos controle sobre o tráfego da rede.L3 mode
Em L3 mode, os dispositivos virtuais processam apenas L3 tráfego e acima. Os dispositivos virtuais não respondem à solicitação da ARP e os usuários devem configurar manualmente as entradas vizinhas para os endereços IPVLAN nos pares relevantes. O tráfego de saída de um contêiner relevante é desembarcado na cadeia
netfilter
POSTROUTING e OUTPUT no namespace padrão, enquanto o tráfego de entrada é rosqueado da mesma forma que L2 mode. O uso de L3 mode proporciona um bom controle, mas diminui o desempenho do tráfego de rede.L3S mode
Em L3S mode, os dispositivos virtuais processam da mesma forma que em L3 mode, exceto que tanto a saída como a entrada de um contêiner relevante são desembarcadas na cadeia
netfilter
no namespace padrão. L3S mode comporta-se de forma semelhante a L3 mode, mas proporciona maior controle da rede.
O dispositivo virtual IPVLAN não recebe tráfego broadcast e multicast no caso de L3 e L3S modes.
35.3. Visão geral do MACVLAN
O driver MACVLAN permite criar múltiplos dispositivos de rede virtual sobre um único NIC, cada um deles identificado por seu próprio endereço MAC único. Os pacotes que aterrissam no NIC físico são desmultiplexados em direção ao dispositivo MACVLAN relevante através do endereço MAC do destino. Os dispositivos MACVLAN não adicionam nenhum nível de encapsulamento.
35.4. Comparação entre IPVLAN e MACVLAN
A tabela a seguir mostra as principais diferenças entre MACVLAN e IPVLAN.
MACVLAN | IPVLAN |
---|---|
Utiliza endereço MAC para cada dispositivo MACVLAN. O excesso de endereços MAC da tabela MAC no switch pode causar a perda da conectividade. | Utiliza um único endereço MAC que não limita o número de dispositivos IPVLAN. |
As regras do Netfilter para namespace global não podem afetar o tráfego para ou do dispositivo MACVLAN em um namespace infantil. | É possível controlar o tráfego de ou para o dispositivo IPVLAN em L3 mode e L3S mode. |
Note que tanto IPVLAN quanto MACVLAN não exigem nenhum nível de incapsulação.
35.5. Criação e configuração do dispositivo IPVLAN usando iproute2
Este procedimento mostra como configurar o dispositivo IPVLAN usando o iproute2.
Procedimento
Para criar um dispositivo IPVLAN, digite o seguinte comando:
~]# link ip adicionar link real_NIC_device nome IPVLAN_device tipo ipvlan mode l2
Note que o controlador de interface de rede (NIC) é um componente de hardware que conecta um computador a uma rede.
Exemplo 35.1. Criação de um dispositivo IPVLAN
~]# ip link add link enp0s31f6 name my_ipvlan type ipvlan mode l2 ~]# ip link 47: my_ipvlan@enp0s31f6: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000 link/ether e8:6a:6e:8a:a2:44 brd ff:ff:ff:ff:ff:ff
Para atribuir um endereço
IPv4
ouIPv6
à interface, digite o seguinte comando:~]# ip address add dev IPVLAN_device IP_address/subnet_mask_prefix
No caso de configurar um dispositivo IPVLAN em L3 mode ou L3S mode, faça as seguintes configurações:
Configurar a configuração do vizinho para o colega remoto no host remoto:
~]# ip neigh add dev peer_device IPVLAN_device_IP_address lladdr MAC_address
onde MAC_address é o endereço MAC do verdadeiro NIC no qual se baseia um dispositivo IPVLAN.
Configure um dispositivo IPVLAN para L3 mode com o seguinte comando:
~]# ip neigh add dev real_NIC_device peer_IP_address lladdr peer_MAC_address
Para L3S mode:
~]# ip route dev adicionar real_NIC_device peer_IP_address/32
em que o endereço IP representa o endereço do par remoto.
Para colocar um dispositivo IPVLAN ativo, digite o seguinte comando:
~]# ip link set dev IPVLAN_device up
Para verificar se o dispositivo IPVLAN está ativo, execute o seguinte comando no host remoto:
~]# ping IP_address
onde o IP_address usa o endereço IP do dispositivo IPVLAN.
Capítulo 36. Configuração de encaminhamento e encaminhamento virtual (VRF)
Com o encaminhamento e encaminhamento virtual (VRF), os administradores podem usar várias tabelas de encaminhamento simultaneamente no mesmo host. Para isso, o VRF separa uma rede na camada 3. Isto permite que o administrador isole o tráfego usando tabelas de roteamento separadas e independentes por domínio VRF. Esta técnica é similar às LANs virtuais (VLAN), que dividem uma rede na camada 2, onde o sistema operacional usa diferentes tags VLAN para isolar o tráfego compartilhando o mesmo meio físico.
Um benefício do VRF sobre a partição na camada 2 é que as escalas de roteamento são melhores considerando o número de pares envolvidos.
O Red Hat Enterprise Linux usa um dispositivo virtual vrt
para cada domínio VRF e adiciona rotas a um domínio VRF ao adicionar
dispositivos de rede existentes a um dispositivo VRF. Endereços e rotas previamente anexados ao dispositivo original serão movidos dentro do domínio VRF.
Observe que cada domínio VRF é isolado um do outro.
36.1. Reutilização permanente do mesmo endereço IP em interfaces diferentes
Este procedimento descreve como usar permanentemente o mesmo endereço IP em diferentes interfaces em um servidor, usando a função VRF.
Para que os pares remotos possam contatar ambas as interfaces VRF enquanto reutilizam o mesmo endereço IP, as interfaces de rede devem pertencer a domínios de transmissão diferentes. Um domínio de transmissão em uma rede é um conjunto de nós, que recebem o tráfego de transmissão enviado por qualquer um deles. Na maioria das configurações, todos os nós conectados ao mesmo switch pertencem ao mesmo domínio de radiodifusão.
Pré-requisitos
- Você está logado como usuário do
root
. - As interfaces de rede não são configuradas.
Procedimento
Criar e configurar o primeiro dispositivo VRF:
Criar uma conexão para o dispositivo VRF e atribuí-la a uma tabela de roteamento. Por exemplo, para criar um dispositivo VRF chamado
vrf0
que é atribuído à tabela de roteamento1001
:# nmcli connection add type vrf ifname vrf0 con-name vrf0 tabela 1001 ipv4.method disabled ipv6.method disabled
Habilite o dispositivo
vrf0
:# nmcli conexão acima vrf0
Atribuir um dispositivo de rede ao VRF recém-criado. Por exemplo, para adicionar o dispositivo
enp1s0
Ethernet ao dispositivovrf0
VRF e atribuir um endereço IP e a máscara de sub-rede aenp1s0
, entre:# nmcli connection add type ethernet con-name vrf.enp1s0 ifname enp1s0 master vrf0 ipv4.method manual ipv4.address 192.0.2.1/24
Ativar a conexão
vrf.enp1s0
:# nmcli conexão acima vrf.enp1s0
Criar e configurar o próximo dispositivo VRF:
Criar o dispositivo VRF e atribuí-lo a uma tabela de roteamento. Por exemplo, para criar um dispositivo VRF chamado
vrf1
que é atribuído à tabela de roteamento1002
, entre:# nmcli connection add type vrf ifname vrf1 con-name vrf1 tabela 1002 ipv4.method disabled ipv6.method disabled
Ativar o dispositivo
vrf1
:# nmcli conexão acima vrf1
Atribuir um dispositivo de rede ao VRF recém-criado. Por exemplo, para adicionar o dispositivo
enp7s0
Ethernet ao dispositivovrf1
VRF e atribuir um endereço IP e a máscara de sub-rede aenp7s0
, entre:# nmcli connection add type ethernet con-name vrf.enp7s0 ifname enp7s0 master vrf1 ipv4.method manual ipv4.address 192.0.2.1/24
Ativar o dispositivo
vrf.enp7s0
:# nmcli conexão acima vrf.enp7s0
36.2. Reutilização temporária do mesmo endereço IP em interfaces diferentes
O procedimento nesta seção descreve como usar temporariamente o mesmo endereço IP em diferentes interfaces em um servidor, usando o recurso de encaminhamento e encaminhamento virtual (VRF). Use este procedimento apenas para fins de teste, pois a configuração é temporária e perdida após o reinício do sistema.
Para que os pares remotos possam contatar ambas as interfaces VRF enquanto reutilizam o mesmo endereço IP, as interfaces de rede devem pertencer a domínios de transmissão diferentes. Um domínio de difusão em uma rede é um conjunto de nós que recebem o tráfego de difusão enviado por qualquer um deles. Na maioria das configurações, todos os nós conectados ao mesmo switch pertencem ao mesmo domínio de radiodifusão.
Pré-requisitos
- Você está logado como usuário do
root
. - As interfaces de rede não são configuradas.
Procedimento
Criar e configurar o primeiro dispositivo VRF:
Criar o dispositivo VRF e atribuí-lo a uma tabela de roteamento. Por exemplo, para criar um dispositivo VRF chamado
blue
que é atribuído à tabela de roteamento1001
:# ip link add dev azul tipo vrf tabela 1001
Habilite o dispositivo
blue
:# ip link set dev blue up
Atribuir um dispositivo de rede ao dispositivo VRF. Por exemplo, para adicionar o dispositivo
enp1s0
Ethernet ao dispositivoblue
VRF:# ip link set dev enp1s0 master blue
Habilite o dispositivo
enp1s0
:# ip link set dev enp1s0 up
Atribuir um endereço IP e uma máscara de sub-rede ao dispositivo
enp1s0
. Por exemplo, para configurá-la para192.0.2.1/24
:# ip address add dev enp1s0 192.0.2.1/24
Criar e configurar o próximo dispositivo VRF:
Criar o dispositivo VRF e atribuí-lo a uma tabela de roteamento. Por exemplo, para criar um dispositivo VRF chamado
red
que é atribuído à tabela de roteamento1002
:# ip link add dev vermelho tipo vrf tabela 1002
Habilite o dispositivo
red
:# ip link set dev red up
Atribuir um dispositivo de rede ao dispositivo VRF. Por exemplo, para adicionar o dispositivo
enp7s0
Ethernet ao dispositivored
VRF:# ip link set dev enp7s0 master red
Habilite o dispositivo
enp7s0
:# ip link set dev enp7s0 up
Atribua ao dispositivo
enp7s0
o mesmo endereço IP e máscara de sub-rede que você usou paraenp1s0
no domínioblue
VRF:# ip address add dev enp7s0 192.0.2.1/24
- Opcionalmente, criar outros dispositivos VRF, como descrito acima.
Capítulo 37. Definindo os protocolos de roteamento para seu sistema
Esta seção descreve como usar o Free Range Routing (FRRouting, ou FRR) para habilitar e definir os protocolos de roteamento necessários para seu sistema.
37.1. Introdução ao FRRouting
Free Range
Routing (FRRouting, ou FRR) é uma pilha de protocolos de roteamento, que é fornecida pelo pacote frr
, disponível no repositório AppStream.
FRR substitui Quagga que era usado em versões anteriores da RHEL. Como tal, FRR fornece serviços de roteamento baseados em TCP/IP com suporte a múltiplos protocolos de roteamento IPv4 e IPv6.
Os protocolos suportados são:
- Protocolo Border Gateway (BGP)
- Sistema Intermediário a Sistema Intermediário (IS-IS)
- Abrir primeiro o caminho mais curto (OSPF)
- Multicast Independente de Protocolo (PIM)
- Protocolo de Informação de Roteamento (RIP)
- Routing Information Protocol next generation (RIPng)
- Protocolo de roteamento de portal interior aprimorado (EIGRP)
- Próximo Protocolo de Resolução do Lúpulo (NHRP)
- Detecção de Encaminhamento Bidirecional (BFD)
- Roteamento baseado em políticas (PBR)
FRR é um conjunto dos seguintes serviços:
- zebra
- bgpd
- isisd
- ospfd
- ospf6d
- pimd
- ripd
- ripngd
- eigrpd
- nhrpd
- bfdd
- pbrd
- estáticod
- fabricd
Se frr
estiver instalado, o sistema pode atuar como um roteador dedicado, que troca informações de roteamento com outros
roteadores tanto na rede interna quanto externa, utilizando os protocolos de roteamento.
37.2. Estabelecendo o FRRouting
Pré-requisitos
- Certifique-se de que o pacote
frr
esteja instalado em seu sistema:
# yum instalar frr
Procedimento
Edite o arquivo de configuração
/etc/frr/daemons
, e habilite os daemons necessários para seu sistema.Por exemplo, para habilitar o daemon
ripd
, inclua a seguinte linha:ripd=yes
O daemon
zebra
deve estar sempre habilitado, de modo que você deve definirzebra=yes
para poder usar FRR.Por padrão,
/etc/frr/daemons
contém[daemon_name]=no
entradas para todos os daemons. Portanto, todos os demônios estão desativados, e a partir de FRR após uma nova instalação do sistema não tem efeito.Iniciar o serviço
frr
:# systemctl start frr
Opcionalmente, você também pode definir FRR para iniciar automaticamente na inicialização:
# systemctl habilita frr
37.3. Modificando a configuração do FRR
Esta seção descreve:
- Como ativar um daemon adicional após a instalação FRR
- Como desativar um daemon depois de ter se instalado FRR
Possibilitando um daemon adicional
Procedimento
Para habilitar um ou mais demônios adicionais:
Edite o arquivo de configuração
/etc/frr/daemons
e modifique a linha dos daemons necessários para declararyes
em vez deno
.Por exemplo, para habilitar o daemon
ripd
:ripd=yes
Recarregue o serviço
frr
:# systemctl reload frr
Desabilitando um daemon
Procedimento
Para desativar um ou mais demônios:
Edite o arquivo de configuração
/etc/frr/daemons
e modifique a linha dos daemons necessários para declararno
em vez deyes
.Por exemplo, para desativar o daemon
ripd
:ripd=não
Recarregue o serviço
frr
:# systemctl reload frr
37.4. Modificar uma configuração de um determinado daemon
Com a configuração padrão, cada daemon de roteamento em FRR só pode atuar como um roteador simples.
Para qualquer configuração adicional de um daemon, use o seguinte procedimento.
Procedimento
Dentro do diretório
/etc/frr/
, crie um arquivo de configuração para o daemon necessário, e nomeie o arquivo da seguinte forma:[daemon_name].conf
Por exemplo, para configurar ainda mais o daemon
eigrpd
, crie o arquivoeigrpd.conf
no diretório mencionado.Povoar o novo arquivo com o conteúdo necessário.
Para exemplos de configuração de FRR daemons, consulte o diretório
/usr/share/doc/frr/
.Recarregue o serviço
frr
:# systemctl reload frr
Capítulo 38. Monitoramento e ajuste do buffer de anéis RX
Os buffers de anel de recepção (RX) são buffers compartilhados entre o driver do dispositivo e a placa de interface de rede (NIC), e armazenam os pacotes recebidos até que o driver do dispositivo possa processá-los.
Você pode aumentar o tamanho do dispositivo Ethernet RX ring buffer se a taxa de queda de pacotes fizer com que as aplicações sejam relatadas:
- uma perda de dados,
- cerca de cacho,
- desempenho lento,
- tempo esgotado, e
- backups falhados.
Esta seção descreve como identificar o número de pacotes descartados e aumentar o buffer do anel RX para reduzir uma alta taxa de queda de pacotes.
38.1. Exibindo o número de pacotes descartados
O utilitário ethtool
permite que os administradores consultem, configurem ou controlem as configurações do driver da rede.
A exaustão do buffer do anel RX causa um incremento nos contadores, como "descarte" ou "queda" na saída de ethtool -S interface_name
.
Os pacotes descartados indicam que o buffer disponível está se enchendo mais rápido do que o kernel pode processar os pacotes.
Este procedimento descreve como exibir contadores de queda usando ethtool
.
Procedimento
Para exibir contadores de queda para o
enp1s0
interface, entre:US$ etool -S enp1s0
38.2. Aumentar o buffer do anel RX para reduzir uma alta taxa de queda de pacotes
A utilidade ethtool
ajuda a aumentar o buffer RX para reduzir uma alta taxa de queda de pacotes.
Procedimento
Para visualizar o tamanho máximo do tampão de anel RX:
# ethtool -g enp1s0 Ring parameters for enp1s0: Pre-set maximums: RX: 4080 RX Mini: 0 RX Jumbo: 16320 TX: 255 Current hardware settings: RX: 255 RX Mini: 0 RX Jumbo: 0 TX: 255
Se os valores na seção
Pre-set maximums
forem superiores aos da seçãoCurrent hardware settings
, aumente o buffer de anéis RX:Para mudar temporariamente o buffer de anéis RX do dispositivo
enp1s0
para4080
, entre:# ethtool -G enp1s0 rx 4080
Para alterar permanentemente o buffer de anéis RX, crie um script de despacho NetworkManager.
Para obter detalhes, veja o artigo Como fazer com que as configurações de etool NIC sejam persistentes (aplicar automaticamente na inicialização) e criar um script do despachante.
Dependendo do driver que sua placa de interface de rede utiliza, a mudança no buffer de anel pode interromper em breve a conexão de rede.
Recursos adicionais
- Para maiores informações sobre estatísticas que cobrem mais razões para descarte de pacotes indesejados, veja o ifconfig and ip commands report packet drops in RHEL7 artigo.
- Should I be concerned about a 0.05% packet drop rate?
- A página do homem
ethtool(8)
.
Capítulo 39. Teste de configurações básicas de rede
Esta seção descreve como realizar testes básicos de rede.
39.1. Usando o utilitário ping para verificar a conexão IP com outros hosts
O utilitário ping
envia pacotes ICMP para um host remoto. Você pode usar esta funcionalidade para testar se a conexão IP a um host diferente funciona.
Procedimento
Pingando o endereço IP de um host na mesma sub-rede, tal como seu gateway padrão:
# ping 192.0.2.3
Se o comando falhar, verifique as configurações padrão do gateway.
Pingar um endereço IP de um host em uma sub-rede remota:
# ping 198.162.3.1
Se o comando falhar, verifique as configurações padrão do gateway e certifique-se de que o gateway encaminha os pacotes entre as redes conectadas.
39.2. Usando o utilitário hospedeiro para verificar a resolução do nome
Este procedimento descreve como verificar a resolução do nome no Red Hat Enterprise Linux 8.
Procedimento
Use o utilitário
host
para verificar se a resolução do nome funciona. Por exemplo, para resolver oclient.example.com
hostname para um endereço IP, digite:# host client.example.com
Se o comando retornar um erro, tal como
connection timed out
ouno servers could be reached
, verifique suas configurações de DNS.
Capítulo 40. Introdução ao NetworkManager Debugging
O aumento dos níveis de registro para todos ou certos domínios ajuda a registrar mais detalhes das operações que o NetworkManager realiza. Os
administradores podem usar estas informações para solucionar problemas. O NetworkManager fornece diferentes níveis e domínios para produzir informações de registro. O arquivo /etc/NetworkManager/NetworkManager.conf
é o principal arquivo de configuração do NetworkManager. Os logs são armazenados no diário.
Esta seção fornece informações sobre como permitir o registro de depuração para o NetworkManager e usar diferentes níveis de registro e domínios para configurar a quantidade de detalhes de registro.
40.1. Níveis e domínios de depuração
Você pode usar os parâmetros levels
e domains
para gerenciar a depuração para o NetworkManager. O nível define o nível de verbosidade, enquanto que os domínios definem a categoria das mensagens para registrar os logs com determinada severidade (level
).
Níveis de log | Descrição |
---|---|
| Não registra nenhuma mensagem sobre o NetworkManager |
| Registra apenas erros críticos |
| Avisos de registros que podem refletir a operação |
| Registra várias mensagens informativas que são úteis para rastrear o estado e as operações |
| Permite o registro verboso para fins de depuração |
| Possibilita mais extração verbosa do que o nível |
Observe que níveis subsequentes registram todas as mensagens de níveis anteriores. Por exemplo, definir o nível de log para INFO
também registra as mensagens contidas nos níveis de log ERR
e WARN
.
Recursos adicionais
- Para obter detalhes em
domains
, consulte a página de manualNetworkManager.conf(5)
.
40.2. Definição do nível de registro do NetworkManager
Por padrão, todos os domínios de log são definidos para registrar o nível de log INFO
. Desabilite a limitação da taxa antes de coletar os logs de debug. Com a limitação de taxa, systemd-journald
deixa cair mensagens se houver muitas delas em um curto espaço de tempo. Isto pode ocorrer quando o nível de log é TRACE
.
Este procedimento desativa a limitação da taxa e permite o registro de logs de depuração para todos os domínios (TODOS).
Procedimento
Para desativar a limitação de taxas, edite o arquivo
/etc/systemd/journald.conf
, descomente o parâmetroRateLimitBurst
na seção[Journal]
, e defina seu valor como0
:RateLimitBurst=0
Reinicie o serviço
systemd-journald
.#
systemctl restart systemd-journald
Crie o arquivo
/etc/NetworkManager/conf.d/95-nm-debug.conf
com o seguinte conteúdo:[logging] domains=ALL:DEBUG
O parâmetro
domains
pode conter múltiplos pares separados por vírguladomain:level
.Reinicie o serviço NetworkManager.
#
systemctl restart NetworkManager
40.3. Ajuste temporário dos níveis de registro em tempo de execução usando nmcli
Você pode alterar o nível de registro em tempo de execução usando nmcli
. Entretanto, a Red Hat recomenda permitir a
depuração usando arquivos de configuração e reiniciar o NetworkManager. A atualização da depuração levels
e domains
usando o arquivo .conf
ajuda a depurar problemas de inicialização e captura todos os logs a partir do estado inicial.
Procedimento
Opcional: Exibir as configurações atuais de registro:
#
nmcli general logging
LEVEL DOMAINS INFO PLATFORM,RFKILL,ETHER,WIFI,BT,MB,DHCP4,DHCP6,PPP,WIFI_SCAN,IP4,IP6,A UTOIP4,DNS,VPN,SHARING,SUPPLICANT,AGENTS,SETTINGS,SUSPEND,CORE,DEVICE,OLPC, WIMAX,INFINIBAND,FIREWALL,ADSL,BOND,VLAN,BRIDGE,DBUS_PROPS,TEAM,CONCHECK,DC B,DISPATCHPara modificar o nível de registro e os domínios, use as seguintes opções:
Para definir o nível de log para todos os domínios para o mesmo
LEVEL
, entre:#
nmcli general logging level LEVEL domains ALL
Para mudar o nível para domínios específicos, entre:
#
nmcli general logging level LEVEL domains DOMAINS
Observe que atualizar o nível de registro usando este comando desabilita o registro para todos os outros domínios.
Para alterar o nível de domínios específicos e preservar o nível de todos os outros domínios, entre:
#
nmcli general logging level KEEP domains DOMAIN:LEVEL,DOMAIN:LEVEL
40.4. Visualização dos logs do NetworkManager
Você pode visualizar os logs do NetworkManager para a solução de problemas.
Procedimento
Para ver os logs, entre:
#
journalctl -u NetworkManager -b
Recursos adicionais
- A página do homem
NetworkManager.conf(5)
- A página do homem
journalctl
Capítulo 41. Captura de pacotes de rede
Para depurar problemas de rede e comunicações, você pode capturar pacotes de rede. As seções seguintes fornecem instruções e informações adicionais sobre a captura de pacotes de rede.
41.1. Usando o xdpdump para capturar pacotes de rede, incluindo pacotes descartados por programas XDP
O utilitário xdpdump
captura os pacotes da rede. Ao contrário do utilitário tcpdump
, xdpdump
usa um programa estendido de Filtro de Pacotes de Berkeley (eBPF) para esta tarefa. Isto permite que xdpdump
também capture pacotes descartados por programas Express Data Path (XDP). Os utilitários de espaço do usuário, como tcpdump
, não são capazes de capturar estes
pacotes descartados, assim como os pacotes originais modificados por um programa XDP.
Você pode usar xdpdump
para depurar programas XDP que já estão anexados a uma interface. Portanto, o utilitário pode capturar pacotes antes que um programa XDP seja iniciado e depois que ele tenha terminado. No último caso, xdpdump
também captura a ação do XDP. Por padrão, xdpdump
captura os pacotes recebidos na entrada do programa XDP.
A Red Hat fornece o site xdpdump
como uma prévia
tecnológica sem suporte.
Note que xdpdump
não tem capacidade de filtragem de pacotes ou decodificação. Entretanto, você pode usá-lo em combinação com tcpdump
para a decodificação de pacotes.
O procedimento descreve como capturar todos os pacotes na interface enp1s0
e escrevê-los no arquivo /root/capture.pcap
.
Pré-requisitos
- Um driver de rede que suporta programas XDP.
- Um programa XDP é carregado para a interface
enp1s0
. Se nenhum programa for carregado,xdpdump
captura os pacotes de forma semelhantetcpdump
o faz, para compatibilidade retroativa.
Procedimento
Para capturar os pacotes na interface
enp1s0
e escrevê-los no arquivo/root/capture.pcap
, entre:#
xdpdump -i enp1s0 -w /root/capture.pcap
- Para parar de capturar os pacotes, pressione Ctrl+C.
Recursos adicionais
- Para mais detalhes sobre
xdpdump
, consulte a página de manualxdpdump(8)
. - Se você é um desenvolvedor e está interessado no código fonte de
xdpdump
, baixe e instale o RPM (SRPM) de origem correspondente no Portal do Cliente da Red Hat.
41.2. Recursos adicionais
- Como capturar pacotes de rede com a solução de base de conhecimento tcpdump?
Capítulo 42. Usando uma versão específica do kernel na RHEL
O kernel é um componente central de um sistema operacional Linux que gerencia os recursos do sistema, e fornece a interface entre aplicações de hardware e software. Em alguns casos, o kernel pode afetar a funcionalidade da rede, por isso é sempre recomendável usar a versão mais recente do kernel. Se necessário, também é possível rebaixar a versão do kernel para uma versão anterior do mesmo kernel x-stream e selecionar uma versão específica enquanto o sistema é inicializado para a solução de problemas.
Esta seção explica como selecionar um kernel no carregador de inicialização do GRUB caso você atualize ou diminua o kernel.
42.1. Iniciando a RHEL usando uma versão anterior do kernel
Por padrão, após a atualização, o sistema inicia a última versão do kernel. O Red Hat Enterprise Linux permite ter três versões do kernel instaladas ao mesmo tempo. Isto está definido no arquivo /etc/dnf/dnf.conf
(installonly_limit=3
).
Se você observar qualquer problema quando o sistema for carregado com o novo kernel, você pode reiniciá-lo com o kernel anterior e restaurar a máquina de produção. Entre em contato com o suporte para solucionar o problema.
Procedimento
- Inicie o sistema.
- No carregador de inicialização GRUB, você vê os kernels instalados. Use as teclas ↑ e ↓ para selecionar um kernel, e pressione Enter para inicializá-lo.
Recursos adicionais
- Alterando o kernel padrão para inicializar usando a ferramenta
grubby
. - Para mais informações sobre a instalação e atualização do Kernel, consulte a seção Atualização do Kernel com yum.
Capítulo 43. Prestação de serviços de DHCP
O Dynamic Host Configuration Protocol (DHCP) é um protocolo de rede que atribui automaticamente informações IP aos clientes.
Esta seção explica informações gerais sobre o serviço dhcpd
, bem como como configurar um servidor DHCP e DHCP relay.
Se um procedimento requer diferentes passos para fornecer DHCP em redes IPv4 e IPv6, as seções deste capítulo contêm procedimentos para ambos os protocolos.
43.1. As diferenças ao usar o dhcpd para DHCPv4 e DHCPv6
O serviço dhcpd
suporta o fornecimento de DHCPv4 e DHCPv6 em um servidor. Entretanto, você precisa de uma instância separada de dhcpd
com arquivos de configuração separados para fornecer DHCP para cada protocolo.
DHCPv4
- Arquivo de configuração
/etc/dhcp/dhcpd.conf
- Nome do serviço Systemd
dhcpd
-
Arquivo de configuração
/etc/dhcp/dhcpd6.conf
- Nome do serviço Systemd
dhcpd6
43.2. O banco de dados de locação do serviço dhcpd
Um aluguel DHCP é o período de tempo para o qual o serviço dhcpd
aloca um endereço de rede a um cliente. O serviço dhcpd
armazena os aluguéis de DHCP nos seguintes bancos de dados:
-
Para DHCPv4
/var/lib/dhcpd/dhcpd.leases
- Para DHCPv6
/var/lib/dhcpd/dhcpd6.leases
A atualização manual dos arquivos do banco de dados pode corromper os bancos de dados.
Os bancos de dados do arrendamento contêm informações sobre os arrendamentos atribuídos, tais como o endereço IP atribuído a um endereço MAC (Media Access Control) ou o carimbo de tempo quando o arrendamento expira. Note que todos os carimbos de tempo nos bancos de dados de arrendamento estão em Tempo Universal Coordenado (UTC).
O serviço dhcpd
recria as bases de dados periodicamente:
O serviço renomeia os arquivos existentes:
-
/var/lib/dhcpd/dhcpd.leases
para/var/lib/dhcpd/dhcpd.leases~
-
/var/lib/dhcpd/dhcpd6.leases
para/var/lib/dhcpd/dhcpd6.leases~
-
- O serviço escreve todos os arrendamentos conhecidos para os arquivos recém-criados
/var/lib/dhcpd/dhcpd.leases
e/var/lib/dhcpd/dhcpd6.leases
.
Recursos adicionais
- Para mais detalhes sobre o que está armazenado no
banco de dados do arrendamento, consulte a página de manual
dhcpd.leases(5)
. - Seção 43.10, “Restaurando um banco de dados de arrendamento corrupto”
43.3. Comparação do DHCPv6 com o radvd
Em uma rede IPv6, somente mensagens publicitárias de roteadores fornecem informações sobre um gateway padrão IPv6. Como conseqüência, se você quiser usar DHCPv6 em sub-redes que requerem uma configuração padrão de gateway, você deve configurar adicionalmente um serviço de propaganda de roteador, como o Router Advertisement Daemon (radvd
).
O serviço
radvd
usa bandeiras em pacotes de propaganda de roteadores para anunciar a disponibilidade de um servidor DHCPv6.
Esta seção compara DHCPv6 e radvd
, e fornece informações sobre a configuração radvd
.
DHCPv6 | radvd | |
---|---|---|
Fornece informações sobre o gateway padrão | não | sim |
Garante endereços aleatórios para proteger a privacidade | sim | não |
Envia outras opções de configuração de rede | sim | não |
Mapas de endereços de controle de acesso de mídia (MAC) para endereços IPv6 | sim | não |
43.4. Configuração do serviço radvd para roteadores IPv6
O daemon de propaganda do roteador (radvd
) envia mensagens de propaganda do roteador que são necessárias para a autoconfiguração do IPv6 sem estado. Isto permite que os usuários configurem automaticamente seus endereços, configurações, rotas e escolham um roteador padrão com
base nestes anúncios.
O procedimento nesta seção explica como configurar radvd
.
Pré-requisitos
- Você está logado como usuário do
root
.
Procedimento
Instale o pacote
radvd
:# yum instalar radvd
Edite o arquivo
/etc/radvd.conf
, e adicione a seguinte configuração:interface enp1s0 { AdvSendAdvert on; AdvManagedFlag on; AdvOtherConfigFlag on; prefix 2001:db8:0:1::/64 { }; };
Estas configurações configuram
radvd
para enviar mensagens de propaganda de roteador no dispositivoenp1s0
para a sub-rede2001:db8:0:1::/64
. A configuraçãoAdvManagedFlag on
define que o cliente deve receber o endereço IP de um servidor DHCP, e o parâmetroAdvOtherConfigFlag
definido paraon
define que os clientes também devem receber informações sem endereço do servidor DHCP.Opcionalmente, configure o
radvd
para iniciar automaticamente quando o sistema for inicializado:# systemctl habilita radvd
Iniciar o serviço
radvd
:# systemctl start radvd
Opcionalmente, exibir o conteúdo dos pacotes de publicidade do roteador e os valores configurados que
radvd
envia:# radvdump
Recursos adicionais
- Para mais detalhes sobre a configuração
radvd
, consulte a página de manualradvd.conf(5)
. - Para um exemplo de configuração de
radvd
, veja o arquivo/usr/share/doc/radvd/radvd.conf.example
.
43.5. Configuração de interfaces de rede para os servidores DHCP
Por padrão, o serviço dhcpd
processa solicitações apenas em interfaces de rede que tenham um endereço IP na sub-rede definida no arquivo de configuração do serviço.
Por exemplo, no cenário a seguir, dhcpd
ouve apenas na interface de rede enp0s1
:
- Você tem apenas uma definição
subnet
para a rede 192.0.2.0/24 no arquivo/etc/dhcp/dhcpd.conf
. - A interface de rede
enp0s1
está conectada à sub-rede 192.0.2.0/24. - A interface
enp7s0
está conectada a uma sub-rede diferente.
Somente siga o procedimento desta seção se o servidor DHCP contiver várias interfaces de rede conectadas à mesma rede, mas o serviço deve escutar somente em interfaces específicas.
Dependendo se você deseja fornecer DHCP para IPv4, IPv6, ou ambos os protocolos, veja o procedimento a seguir:
- Redes IPv4
- Redes IPv6
Pré-requisitos
- Você está logado como usuário do
root
. - O pacote
dhcp-server
está instalado.
Procedimento
Para redes IPv4:
Copie o arquivo
/usr/lib/systemd/system/dhcpd.service
para o diretório/etc/systemd/system/
:# cp /usr/lib/systemd/systemd/system/dhcpd.service /etc/systemd/systemd/system/
Não edite o arquivo
/usr/lib/systemd/system/dhcpd.service
. Futuras atualizações do pacotedhcp-server
podem anular as mudanças.Edite o arquivo
/etc/systemd/system/dhcpd.service
, e anexe os nomes da interface, quedhcpd
deve ouvir o comando no parâmetroExecStart
:ExecStart=/usr/sbin/dhcpd -f -cf /etcc/dhcp/dhcpd.conf -user dhcpd -group dhcpd --no-pid $DHCPDARGS enp0s1 enp7s0
Este exemplo configura que
dhcpd
ouve apenas noenp0s1
e interfacesenp7s0
.Recarregar a configuração do gerenciador
systemd
:# systemctl daemon-reload
Reinicie o serviço
dhcpd
:# systemctl restart dhcpd.service
Para redes IPv6:
Copie o arquivo
/usr/lib/systemd/system/dhcpd6.service
para o diretório/etc/systemd/system/
:# cp /usr/lib/systemd/systemd/system/dhcpd6.service /etc/systemd/systemd/system/
Não edite o arquivo
/usr/lib/systemd/system/dhcpd6.service
. Futuras atualizações do pacotedhcp-server
podem anular as mudanças.Edite o arquivo
/etc/systemd/system/dhcpd6.service
, e anexe os nomes da interface, quedhcpd
deve ouvir o comando no parâmetroExecStart
:ExecStart=/usr/sbin/dhcpd -f -6 -cf /etcc/dhcp/dhcpd6.conf -user dhcpd -group dhcpd --no-pid $DHCPDARGS enp0s1 enp7s0
Este exemplo configura que
dhcpd
ouve apenas noenp0s1
e interfacesenp7s0
.Recarregar a configuração do gerenciador
systemd
:# systemctl daemon-reload
Reinicie o serviço
dhcpd6
:# systemctl restart dhcpd6.service
43.6. Configuração do serviço DHCP para sub-redes diretamente conectadas ao servidor DHCP
Use o seguinte procedimento se o servidor DHCP estiver diretamente conectado à sub-rede para a qual o servidor deve responder às solicitações DHCP. Este é o caso se uma interface de rede do servidor tiver um endereço IP desta subrede atribuído.
Dependendo se você deseja fornecer DHCP para IPv4, IPv6, ou ambos os protocolos, veja o procedimento a seguir:
- Redes IPv4
- Redes IPv6
Pré-requisitos
- Você está logado como usuário do
root
. - O pacote
dhcpd-server
está instalado.
Procedimento
Para redes IPv4:
Edite o arquivo
/etc/dhcp/dhcpd.conf
:Opcionalmente, adicionar parâmetros globais que
dhcpd
usa como padrão se nenhuma outra diretriz contiver essas configurações:option domain-name "example.com"; default-lease-time 86400;
Este exemplo define o nome de domínio padrão para a conexão com
example.com
, e o tempo de locação padrão para86400
segundos (1 dia).Adicione a declaração
authoritative
em uma nova linha:autoritária;
Sem a declaração
authoritative
, o serviçodhcpd
não respondeDHCPREQUEST
mensagens comDHCPNAK
se um cliente pedir um endereço que esteja fora do pool.Para cada sub-rede IPv4 conectada diretamente a uma interface do servidor, acrescente uma declaração em
subnet
:subnet 192.0.2.0 netmask 255.255.255.0 { range 192.0.2.20 192.0.2.100; option domain-name-servers 192.0.2.1; option routers 192.0.2.1; option broadcast-address 192.0.2.255; max-lease-time 172800; }
Este exemplo acrescenta uma declaração de sub-rede para a rede 192.0.2.0/24. Com esta configuração, o servidor DHCP atribui as seguintes configurações a um cliente que envia uma solicitação DHCP a partir desta sub-rede:
- Um endereço IPv4 livre a partir da faixa definida no parâmetro
range
- IP do servidor DNS para esta sub-rede
192.0.2.1
- Porta de entrada padrão para esta sub-rede
192.0.2.1
- Endereço de transmissão para esta sub-rede
192.0.2.255
- O tempo máximo de locação, após o qual os
clientes nesta sub-rede liberam o IP e enviam uma nova solicitação para o servidor:
172800
segundos (2 dias)
- Um endereço IPv4 livre a partir da faixa definida no parâmetro
Opcionalmente, configure que o site
dhcpd
seja iniciado automaticamente quando o sistema for inicializado:# systemctl habilita o dhcpd
Iniciar o serviço
dhcpd
:# systemctl start dhcpd
Para redes IPv6:
Edite o arquivo
/etc/dhcp/dhcpd6.conf
:Opcionalmente, adicionar parâmetros globais que
dhcpd
usa como padrão se nenhuma outra diretriz contiver essas configurações:option dhcp6.domain-search "example.com"; default-lease-time 86400;
Este exemplo define o nome de domínio padrão para a conexão com
example.com
, e o tempo de locação padrão para86400
segundos (1 dia).Adicione a declaração
authoritative
em uma nova linha:autoritária;
Sem a declaração
authoritative
, o serviçodhcpd
não respondeDHCPREQUEST
mensagens comDHCPNAK
se um cliente pedir um endereço que esteja fora do pool.Para cada sub-rede IPv6 conectada diretamente a uma interface do servidor, adicione uma declaração em
subnet
:subnet6 2001:db8:0:1::/64 { range6 2001:db8:0:1::20 2001:db8:0:1::100; option dhcp6.name-servers 2001:db8:0:1::1; max-lease-time 172800; }
Este exemplo acrescenta uma declaração de sub-rede para a rede 2001:db8:0:1::/64. Com esta configuração, o servidor DHCP atribui as seguintes configurações a um cliente que envia uma solicitação DHCP a partir desta sub-rede:
- Um endereço IPv6 gratuito da faixa definida no parâmetro
range6
. - O IP do servidor DNS para esta sub-rede é
2001:db8:0:1::1
. O tempo máximo de locação, após o qual os clientes nesta sub-rede liberam o IP e enviam uma nova solicitação ao servidor é de
172800
segundos (2 dias).Note que IPv6 requer o uso de mensagens publicitárias de roteador para identificar o gateway padrão.
- Um endereço IPv6 gratuito da faixa definida no parâmetro
Opcionalmente, configure que o site
dhcpd6
seja iniciado automaticamente quando o sistema for inicializado:# systemctl habilita o dhcpd6
Iniciar o serviço
dhcpd6
:# systemctl start dhcpd6
Recursos adicionais
- Para obter uma lista de todos os parâmetros que você pode definir em
/etc/dhcp/dhcpd.conf
e/etc/dhcp/dhcpd6.conf
, consulte a página de manualdhcp-options(5)
. - Para mais detalhes sobre a declaração
authoritative
, consulte a seçãoThe authoritative statement
na página de manualdhcpd.conf(5)
. - Por exemplo, configurações, consulte os arquivos
/usr/share/doc/dhcp-server/dhcpd.conf.example
e/usr/share/doc/dhcp-server/dhcpd6.conf.example
.
43.7. Configuração do serviço DHCP para sub-redes que não estão diretamente conectadas ao servidor DHCP
Use o seguinte procedimento se o servidor DHCP não estiver diretamente conectado à sub-rede para a qual o servidor deve responder as solicitações DHCP. Este é o caso se um agente de retransmissão DHCP encaminhar solicitações ao servidor DHCP, porque nenhuma das interfaces do servidor DHCP está diretamente conectada à subrede que o servidor deve servir.
Dependendo se você deseja fornecer DHCP para IPv4, IPv6, ou ambos os protocolos, veja o procedimento a seguir:
- Redes IPv4
- Redes IPv6
Pré-requisitos
- Você está logado como usuário do
root
. - O pacote
dhcpd-server
está instalado.
Procedimento
Para redes IPv4:
Edite o arquivo
/etc/dhcp/dhcpd.conf
:Opcionalmente, adicionar parâmetros globais que
dhcpd
usa como padrão se nenhuma outra diretriz contiver essas configurações:option domain-name "example.com"; default-lease-time 86400;
Este exemplo define o nome de domínio padrão para a conexão com
example.com
, e o tempo de locação padrão para86400
segundos (1 dia).Adicione a declaração
authoritative
em uma nova linha:autoritária;
Sem a declaração
authoritative
, o serviçodhcpd
não respondeDHCPREQUEST
mensagens comDHCPNAK
se um cliente pedir um endereço que esteja fora do pool.Adicione uma declaração em
shared-network
, como a seguinte, para sub-redes IPv4 que não estão diretamente conectadas a uma interface do servidor:shared-network example { option domain-name-servers 192.0.2.1; ... subnet 192.0.2.0 netmask 255.255.255.0 { range 192.0.2.20 192.0.2.100; option routers 192.0.2.1; } subnet 198.51.100.0 netmask 255.255.255.0 { range 198.51.100.20 198.51.100.100; option routers 198.51.100.1; } ... }
Este exemplo acrescenta uma declaração de rede compartilhada, que contém uma declaração
subnet
tanto para as redes 192.0.2.0/24 como para as 198.51.100.0/24. Com esta configuração, o servidor DHCP atribui as seguintes configurações a um cliente que envia uma solicitação DHCP de uma destas sub-redes:- O IP do servidor DNS para clientes de ambas as sub-redes é:
192.0.2.1
. - Um endereço IPv4 livre da faixa definida no parâmetro
range
, dependendo de qual sub-rede o cliente enviou a solicitação. - O gateway padrão é
192.0.2.1
ou198.51.100.1
, dependendo de qual sub-rede o cliente enviou a solicitação.
- O IP do servidor DNS para clientes de ambas as sub-redes é:
Adicione uma declaração
subnet
para a sub-rede à qual o servidor está diretamente conectado e que é usada para alcançar as sub-redes remotas especificadas emshared-network
acima:subnet 203.0.113.0 netmask 255.255.255.0 { }
Se o servidor não fornecer serviço DHCP para esta sub-rede, a declaração
subnet
deve estar vazia, como mostrado no exemplo. Sem uma declaração para a subrede diretamente conectada,dhcpd
não inicia.
Opcionalmente, configure que o site
dhcpd
seja iniciado automaticamente quando o sistema for inicializado:# systemctl habilita o dhcpd
Iniciar o serviço
dhcpd
:# systemctl start dhcpd
Para redes IPv6:
Edite o arquivo
/etc/dhcp/dhcpd6.conf
:Opcionalmente, adicionar parâmetros globais que
dhcpd
usa como padrão se nenhuma outra diretriz contiver essas configurações:option dhcp6.domain-search "example.com"; default-lease-time 86400;
Este exemplo define o nome de domínio padrão para a conexão com
example.com
, e o tempo de locação padrão para86400
segundos (1 dia).Adicione a declaração
authoritative
em uma nova linha:autoritária;
Sem a declaração
authoritative
, o serviçodhcpd
não respondeDHCPREQUEST
mensagens comDHCPNAK
se um cliente pedir um endereço que esteja fora do pool.Adicione uma declaração em
shared-network
, como a seguinte, para sub-redes IPv6 que não estão diretamente conectadas a uma interface do servidor:shared-network example { option domain-name-servers 2001:db8:0:1::1:1 ... subnet6 2001:db8:0:1::1:0/120 { range6 2001:db8:0:1::1:20 2001:db8:0:1::1:100 } subnet6 2001:db8:0:1::2:0/120 { range6 2001:db8:0:1::2:20 2001:db8:0:1::2:100 } ... }
Este exemplo acrescenta uma declaração de rede compartilhada que contém uma declaração
subnet6
tanto para as redes 2001:db8:0:1::1:0/120 como para 2001:db8:0:1::2:0/120. Com esta configuração, o servidor DHCP atribui as seguintes configurações a um cliente que envia uma solicitação DHCP de uma destas sub-redes:- O IP do servidor DNS para clientes de ambas as sub-redes é
2001:db8:0:1::1:1
. Um endereço IPv6 gratuito da faixa definida no parâmetro
range6
, dependendo de qual sub-rede o cliente enviou a solicitação.Note que IPv6 requer o uso de mensagens publicitárias de roteador para identificar o gateway padrão.
- O IP do servidor DNS para clientes de ambas as sub-redes é
Adicione uma declaração
subnet6
para a sub-rede à qual o servidor está diretamente conectado e que é usada para alcançar as sub-redes remotas especificadas emshared-network
acima:subnet6 2001:db8:0:1::50:0/120 { }
Se o servidor não fornecer serviço DHCP para esta sub-rede, a declaração
subnet6
deve estar vazia, como mostrado no exemplo. Sem uma declaração para a subrede diretamente conectada,dhcpd
não inicia.
Opcionalmente, configure que o site
dhcpd6
seja iniciado automaticamente quando o sistema for inicializado:# systemctl habilita o dhcpd6
Iniciar o serviço
dhcpd6
:# systemctl start dhcpd6
Recursos adicionais
- Para obter uma lista de todos os parâmetros que você pode definir em
/etc/dhcp/dhcpd.conf
e/etc/dhcp/dhcpd6.conf
, consulte a página de manualdhcp-options(5)
. - Para mais detalhes sobre a declaração
authoritative
, consulte a seçãoThe authoritative statement
na página de manualdhcpd.conf(5)
. - Por exemplo, configurações, consulte os arquivos
/usr/share/doc/dhcp-server/dhcpd.conf.example
e/usr/share/doc/dhcp-server/dhcpd6.conf.example
. - Seção 43.11, “Instalação de um agente de relé DHCP”
43.8. Atribuição de um endereço estático a um host usando DHCP
Usando uma declaração host
, você pode configurar o servidor DHCP para atribuir um endereço IP fixo a um endereço MAC (Media Access Control) de um host. Por exemplo, use este método para sempre atribuir o mesmo endereço IP a um servidor ou dispositivo de rede.
Se você configurar um endereço IP fixo para um
endereço MAC, o endereço IP deve estar fora do grupo de endereços que você especificou nos parâmetros fixed-address
e fixed-address6
.
Dependendo se você deseja configurar endereços fixos para IPv4, IPv6, ou ambos os protocolos, veja o procedimento a seguir:
- Redes IPv4
- Redes IPv6
Pré-requisitos
- O serviço
dhcpd
está configurado e funcionando. - Você está logado como usuário do
root
.
Procedimento
Para redes IPv4:
Edite o arquivo
/etc/dhcp/dhcpd.conf
:Adicione uma declaração em
host
:host server.example.com { hardware ethernet 52:54:00:72:2f:6e; fixed-address 192.0.2.130; }
Este exemplo configura o servidor DHCP para sempre atribuir o endereço IP
192.0.2.130
ao host com o endereço MAC52:54:00:72:2f:6e
.O serviço
dhcpd
identifica os sistemas pelo endereço MAC especificado no parâmetrofixed-address
, e não pelo nome na declaraçãohost
. Como conseqüência, você pode definir este nome para qualquer string que não corresponda a outras declarações dehost
. Para configurar o mesmo sistema para múltiplas redes, use um nome diferente, caso contrário,dhcpd
não inicia.- Opcionalmente, adicione outros ajustes à declaração
host
que são específicos para este host.
Reinicie o serviço
dhcpd
:# systemctl start dhcpd
Para redes IPv6:
Edite o arquivo
/etc/dhcp/dhcpd6.conf
:Adicione uma declaração em
host
:host server.example.com { hardware ethernet 52:54:00:72:2f:6e; fixed-address6 2001:db8:0:1::200; }
Este exemplo configura o servidor DHCP para sempre atribuir o endereço IP
2001:db8:0:1::20
ao host com o endereço MAC52:54:00:72:2f:6e
.O serviço
dhcpd
identifica os sistemas pelo endereço MAC especificado no parâmetrofixed-address6
, e não pelo nome na declaraçãohost
. Como conseqüência, você pode definir este nome para qualquer string, desde que seja exclusivo para outras declaraçõeshost
. Para configurar o mesmo sistema para múltiplas redes, use um nome diferente porque, caso contrário,dhcpd
não inicia.- Opcionalmente, adicione outros ajustes à declaração
host
que são específicos para este host.
Reinicie o serviço
dhcpd6
:# systemctl start dhcpd6
Recursos adicionais
- Para obter uma lista de todos os parâmetros que você pode definir em
/etc/dhcp/dhcpd.conf
e/etc/dhcp/dhcpd6.conf
, consulte a página de manualdhcp-options(5)
. - Por exemplo, configurações, consulte os arquivos
/usr/share/doc/dhcp-server/dhcpd.conf.example
e/usr/share/doc/dhcp-server/dhcpd6.conf.example
.
43.9. Utilização de uma declaração de grupo para aplicar parâmetros a múltiplos hosts, sub-redes e redes compartilhadas ao mesmo tempo
Usando uma declaração em group
, você pode aplicar os mesmos parâmetros a vários hosts, sub-redes e redes compartilhadas.
Observe que o procedimento nesta seção descreve o uso de uma declaração group
para anfitriões, mas os passos são os mesmos para sub-redes e redes compartilhadas.
Dependendo se você deseja configurar um grupo para IPv4, IPv6, ou ambos os protocolos, veja o procedimento a seguir:
- Redes IPv4
- Redes IPv6
Pré-requisitos
- O serviço
dhcpd
está configurado e funcionando. - Você está logado como usuário do
root
.
Recursos adicionais
- Para obter uma lista de todos os parâmetros que você pode definir em
/etc/dhcp/dhcpd.conf
e/etc/dhcp/dhcpd6.conf
, consulte a página de manualdhcp-options(5)
. - Por exemplo, configurações, consulte os arquivos
/usr/share/doc/dhcp-server/dhcpd.conf.example
e/usr/share/doc/dhcp-server/dhcpd6.conf.example
.
43.10. Restaurando um banco de dados de arrendamento corrupto
Se o servidor DHCP
registrar um erro relacionado ao banco de dados do arrendamento, como Corrupt lease file - possible data loss!
, você pode restaurar o banco de dados do arrendamento a partir da cópia do serviço dhcpd
criado. Note que esta cópia pode não refletir o último status do banco de dados.
Se você remover o banco de dados do arrendamento ao invés de substituí-lo por um backup, você perde todas as informações sobre os arrendamentos atualmente atribuídos. Como conseqüência, o servidor DHCP poderia atribuir arrendamentos a clientes que tenham sido previamente atribuídos a outros anfitriões e que ainda não tenham expirado. Isto leva a conflitos de IP.
Dependendo se você deseja restaurar o DHCPv4, DHCPv6, ou ambos os bancos de dados, veja o procedimento a seguir:
- Restaurando o banco de dados de arrendamento DHCPv4
- Restaurando o banco de dados de arrendamento DHCPv6
Pré-requisitos
- Você está logado como usuário do
root
. - O banco de dados do arrendamento é corrupto.
Procedimento
Restaurando o banco de dados de arrendamento DHCPv4:
Pare o serviço
dhcpd
:# sistemactl stop dhcpd
Renomear o banco de dados de arrendamento corrupto:
# mv /var/lib/dhcpd/dhcpd.leases /var/lib/dhcpd/dhcpd.leases.corrupt
Restaurar a cópia do banco de dados de arrendamento que o serviço
dhcp
criou quando atualizou o banco de dados de arrendamento:# cp -p /var/lib/dhcpd/dhcpd.leases~ /var/lib/dhcpd/dhcpd.leases
Se você tiver um backup mais recente do banco de dados do arrendamento, restaure este backup em seu lugar.
Iniciar o serviço
dhcpd
:# systemctl start dhcpd
Restaurando o banco de dados de arrendamento DHCPv6:
Pare o serviço
dhcpd6
:# systemctl stop dhcpd6
Renomear o banco de dados de arrendamento corrupto:
# mv /var/lib/dhcpd/dhcpd6.leases /var/lib/dhcpd/dhcpd6.leases.corrupt
-
Restaurar a cópia do banco de dados de arrendamento que o serviço
dhcp
criou quando atualizou o banco de dados de arrendamento:# cp -p /var/lib/dhcpd/dhcpd6.leases~ /var/lib/dhcpd/dhcpd6.leases
Se você tiver um backup mais recente do banco de dados do arrendamento, restaure este backup em seu lugar.
Iniciar o serviço
dhcpd6
:# systemctl start dhcpd6
43.11. Instalação de um agente de relé DHCP
O DHCP Relay Agent (dhcrelay
) permite o retransmissão de solicitações DHCP e BOOTP de uma sub-rede sem servidor DHCP para um ou mais servidores DHCP em outras sub-redes. Quando um cliente DHCP solicita informações, o Agente de Relay DHCP encaminha a solicitação para a lista de servidores DHCP especificada. Quando um servidor DHCP retorna uma resposta, o Agente de Relay DHCP encaminha esta solicitação para o cliente.
Dependendo se você deseja configurar um relé DHCP para IPv4, IPv6, ou ambos os protocolos, veja o procedimento a seguir:
- Redes IPv4
- Redes IPv6
Pré-requisitos
- Você está logado como usuário do
root
.
Procedimento
Para redes IPv4:
Instale o pacote
dhcp-relay
:# yum instalar dhcp-relay
Copie o arquivo
/lib/systemd/system/dhcrelay.service
para o diretório/etc/systemd/system/
:# cp /lib/systemd/systemd/system/dhcrelay.service /etc/systemd/systemd/system/
Não edite o arquivo
/usr/lib/systemd/system/dhcrelay.service
. Atualizações futuras do pacotedhcp-relay
podem anular as mudanças.Editar o arquivo
/etc/systemd/system/dhcrelay.service
, e anexar o-i interface
juntamente com uma lista de endereços IP dos servidores DHCPv4 responsáveis pela sub-rede:ExecStart=/usr/sbin/sbin/dhcrelay -d --no-pid -i enp1s0 192.0.2.1
Com estes parâmetros adicionais,
dhcrelay
ouve os pedidos de DHCPv4 na interfaceenp1s0
e os encaminha para o servidor DHCP com o IP192.0.2.1
.Recarregar a configuração do gerenciador
systemd
:# systemctl daemon-reload
Opcionalmente, configure que o serviço
dhcrelay
seja iniciado quando o sistema inicia:# systemctl habilita o dhcrelay.service
Iniciar o serviço
dhcrelay
:# systemctl start dhcrelay.service
Para redes IPv6:
Instale o pacote
dhcp-relay
:# yum instalar dhcp-relay
Copie o arquivo
/lib/systemd/system/dhcrelay.service
para o diretório/etc/systemd/system/
e nomeie o arquivodhcrelay6.service
:# cp /lib/systemd/system/dhcrelay.service /etc/systemd/system/dhcrelay6.service
Não edite o arquivo
/usr/lib/systemd/system/dhcrelay.service
. Atualizações futuras do pacotedhcp-relay
podem anular as mudanças.Editar o arquivo
/etc/systemd/system/dhcrelay6.service
, e anexar o-l receiving_interface
e-u outgoing_interface
parâmetros:ExecStart=/usr/sbin/sbin/dhcrelay -d --no-pid -l enp1s0 -u enp7s0
Com estes parâmetros adicionais,
dhcrelay
ouve os pedidos de DHCPv6 na interfaceenp1s0
e os encaminha para a rede conectada à interfaceenp7s0
.Recarregar a configuração do gerenciador
systemd
:# systemctl daemon-reload
Opcionalmente, configure que o serviço
dhcrelay6
seja iniciado quando o sistema inicia:# systemctl habilita o dhcrelay6.service
Iniciar o serviço
dhcrelay6
:# systemctl start dhcrelay6.service
Recursos adicionais
- Para mais detalhes sobre
dhcrelay
, consulte a página de manualdhcrelay(8)
.
Capítulo 44. Usando e configurando o firewalld
A firewall é uma forma de proteger as máquinas de qualquer tráfego indesejado do exterior. Ele permite aos usuários controlar o tráfego de entrada da rede nas máquinas host, definindo um conjunto de firewall rules. Estas regras são usadas para ordenar o tráfego de entrada e ou bloqueá-lo ou permitir a passagem.
Note que firewalld
com nftables
backend não suporta a passagem das regras personalizadas nftables
para firewalld
, usando a opção --direct
.
44.1. Quando usar firewalld, nftables, ou iptables
A seguir, uma breve visão geral em que cenário você deve usar uma das seguintes utilidades:
-
firewalld
: Use o utilitáriofirewalld
para casos simples de uso de firewall. O utilitário é fácil de usar e cobre os casos de uso típico para estes cenários. -
nftables
: Use o utilitárionftables
para criar firewalls complexos e de desempenho crítico, como para toda uma rede. -
iptables
: O utilitárioiptables
no Red Hat Enterprise Linux 8 usa a API do kernelnf_tables
ao invés do back endlegacy
. A APInf_tables
fornece compatibilidade retroativa para que scripts que usam os comandosiptables
ainda funcionem no Red Hat Enterprise Linux 8. Para novos scripts de firewall, a Red Hat recomenda usarnftables
.
Para evitar que os diferentes serviços de firewall influenciem uns aos outros, execute apenas um deles em um host RHEL, e desabilite os outros serviços.
44.2. Começando com firewalld
44.2.1. firewalld
firewalld
é um daemon de serviço de firewall que fornece um firewall dinâmico personalizável baseado em host com uma interface D-Bus
. Sendo dinâmico, ele permite criar, alterar e apagar as regras sem a necessidade de reiniciar o daemon de firewall cada vez que as regras são alteradas.
firewalld
utiliza os conceitos de zones e services, que
simplificam a gestão do tráfego. As zonas são conjuntos de regras pré-definidas. As interfaces e fontes de rede podem ser atribuídas a uma zona. O tráfego permitido depende da rede à qual seu computador está conectado e do nível de segurança que esta rede é atribuída. Os serviços de firewall são regras predefinidas que cobrem todas as configurações necessárias para permitir o tráfego de entrada para um serviço específico e se aplicam dentro de uma zona.
Os serviços utilizam um ou mais
ports ou addresses para comunicação em rede. Os firewalls filtram a comunicação com base em portas. Para permitir o tráfego de rede para um serviço, suas portas devem ser open. firewalld
bloqueia todo o tráfego nas portas que não estão explicitamente definidas como abertas. Algumas zonas, tais como trusted, permitem todo o tráfego por padrão.
Recursos adicionais
-
firewalld(1)
página do homem
44.2.2. Zonas
firewalld
pode ser usado para separar as redes em diferentes zonas de acordo com o nível de confiança que o usuário decidiu colocar nas interfaces e no tráfego dentro daquela rede. Uma conexão só pode ser parte de uma zona, mas uma zona pode ser usada para muitas conexões de rede.
NetworkManager
notifica firewalld
sobre a zona de
uma interface. Você pode atribuir zonas para interfaces com:
-
NetworkManager
- ferramenta
firewall-config
-
firewall-cmd
ferramenta de linha de comando - O console web RHEL
Os três últimos só podem editar os arquivos de configuração NetworkManager
apropriados. Se você mudar a zona da interface usando o console web, firewall-cmd
ou firewall-config
, a solicitação é encaminhada para NetworkManager
e não é tratada porfirewalld
.
As zonas pré-definidas são
armazenadas no diretório /usr/lib/firewalld/zones/
e podem ser aplicadas instantaneamente a qualquer interface de rede disponível. Estes arquivos são copiados para o diretório /etc/firewalld/zones/
somente após serem modificados. As configurações padrão das zonas pré-definidas são as seguintes:
block
Qualquer conexão de rede que chegue é rejeitada com uma mensagem proibida para IPv4
e para IPv6
. Somente conexões de rede iniciadas de dentro do sistema são possíveis. dmz
Para computadores em sua zona desmilitarizada que são de acesso público com acesso limitado à sua rede interna. Somente conexões de entrada selecionadas são aceitas. drop
Qualquer pacote de rede recebido é descartado sem nenhuma notificação. Somente as conexões de rede de saída são possíveis. external
Para uso em redes externas com mascaramento habilitado, especialmente para roteadores. Você não confia nos outros
computadores da rede para não danificar seu computador. Somente conexões de entrada selecionadas são aceitas. home
Para uso em casa quando você confia principalmente nos outros computadores da rede. Somente as conexões de entrada selecionadas são aceitas. internal
Para uso em redes internas quando você confia principalmente nos outros computadores da rede. Somente as conexões de entrada selecionadas são aceitas. public
Para uso em áreas públicas onde você não confia em outros computadores na rede. Somente conexões de entrada selecionadas são aceitas. trusted
Todas as conexões de rede são aceitas. work
Para uso no trabalho, onde você confia principalmente nos outros computadores da rede. Somente as conexões de entrada selecionadas são aceitas.
Uma dessas zonas é definida como a zona default.
Quando as conexões de interface são adicionadas a NetworkManager
, elas são atribuídas à zona padrão. Na instalação, a zona padrão em firewalld
é definida como a zona public
. A zona padrão pode ser alterada.
Os nomes das zonas de rede devem ser auto-explicativos e permitir que os usuários tomem rapidamente uma decisão razoável. Para evitar quaisquer problemas de segurança, revisar a configuração padrão da zona e desativar quaisquer serviços desnecessários de acordo com suas necessidades e avaliações de risco.
Recursos adicionais
-
firewalld.zone(5)
página do homem
44.2.3. Serviços pré-definidos
Um serviço pode ser uma lista de portas locais, protocolos, portas de origem e destinos, bem como uma lista de módulos de ajuda de firewall carregados automaticamente se um serviço for ativado. O uso de serviços economiza tempo dos usuários porque eles podem realizar várias tarefas, tais como abrir portas, definir protocolos, permitir o envio de pacotes e mais, em uma única etapa, em vez de configurar tudo, um após o outro.
As opções de configuração de serviço e informações genéricas do arquivo estão descritas na página de manual firewalld.service(5)
. Os serviços são especificados por meio de arquivos de configuração XML individuais, que são nomeados no formato a seguir service-name.xml
. Os nomes dos protocolos são
preferidos aos nomes dos serviços ou aplicativos em firewalld
.
Os serviços podem ser adicionados e removidos usando a ferramenta gráfica firewall-config
, firewall-cmd
, e firewall-offline-cmd
.
Alternativamente, você pode editar os arquivos XML no diretório /etc/firewalld/services/
. Se um serviço não for adicionado ou alterado pelo usuário, então nenhum arquivo XML correspondente é encontrado em /etc/firewalld/services/
. Os arquivos no diretório /usr/lib/firewalld/services/
podem ser usados como modelos se você quiser adicionar ou alterar um serviço.
Recursos adicionais
-
firewalld.service(5)
página do homem
44.3. Instalando a ferramenta de configuração firewall-config GUI
Para usar a ferramenta de configuração firewall-config
GUI, instale o pacote firewall-config
.
Procedimento
Digite o seguinte comando como
root
:# yum instalar firewall-configurar
Alternativamente, em
GNOME, use the Super key and type `Software
para lançar o aplicativoSoftware Sources
. Digitefirewall
na caixa de busca, que aparece após selecionar o botão de busca no canto superior direito. Selecione o itemFirewall
nos resultados da busca e clique no botão Instalar.- Para executar
firewall-config
, use o comandofirewall-config
ou pressione a tecla Super para entrar noActivities Overview
, digitefirewall
, e pressione Enter.
44.4. Visualizando o status atual e as configurações de firewalld
44.4.1. Visualizando o status atual de firewalld
O serviço de firewall, firewalld
, é instalado no
sistema por padrão. Use a interface firewalld
CLI para verificar se o serviço está sendo executado.
Procedimento
Para ver o status do serviço:
# firewall-cmd --state
Para mais informações sobre o status do serviço, use o sub-comando
systemctl status
:# systemctl status firewalld firewalld.service - firewalld - dynamic firewall daemon Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor pr Active: active (running) since Mon 2017-12-18 16:05:15 CET; 50min ago Docs: man:firewalld(1) Main PID: 705 (firewalld) Tasks: 2 (limit: 4915) CGroup: /system.slice/firewalld.service └─705 /usr/bin/python3 -Es /usr/sbin/firewalld --nofork --nopid
44.4.2. Visualizando os ajustes firewalld atuais
44.4.2.1. Visualização de serviços permitidos usando GUI
Para visualizar a lista de serviços utilizando o gráfico firewall-config pressione a tecla Super para entrar na Visão Geral das Atividades, digite firewall
, e pressione Enter. O
firewall-config aparece a ferramenta. Agora você pode visualizar a lista de serviços na guia Services
.
Alternativamente, para iniciar a ferramenta gráfica de configuração de firewall usando a linha de comando, digite o seguinte comando:
$ firewall-config
A janela Firewall Configuration
se abre. Note que este comando pode ser executado como um usuário normal, mas ocasionalmente você é solicitado a obter uma senha de administrador.
44.4.2.2. Visualizando as configurações firewalld
usando CLI
Com o cliente CLI, é possível obter diferentes visões das configurações atuais do firewall. A opção --list-all
mostra uma visão completa das configurações do firewalld
.
firewalld
utiliza zonas para gerenciar o tráfego. Se uma zona não for especificada pela opção --zone
, o comando é efetivo na zona
padrão atribuída à interface de rede ativa e à conexão.
Para listar todas as informações relevantes para a zona padrão:
# firewall-cmd --list-all public target: default icmp-block-inversion: no interfaces: sources: services: ssh dhcpv6-client ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
Para especificar a zona para a qual devem ser exibidas as configurações, acrescente o --zone=zone-name
argumento para o comando firewall-cmd --list-all
, por exemplo:
# firewall-cmd --list-all --zone=home home target: default icmp-block-inversion: no interfaces: sources: services: ssh mdns samba-client dhcpv6-client ... [trimmed for clarity]
Para ver as configurações para determinadas informações, tais como serviços ou portos, use uma opção específica. Consulte as páginas do manual firewalld
ou obtenha uma lista das opções usando a ajuda
do comando:
# firewall-cmd --help Usage: firewall-cmd [OPTIONS...] General Options -h, --help Prints a short help text and exists -V, --version Print the version string of firewalld -q, --quiet Do not print status messages Status Options --state Return and print firewalld state --reload Reload firewall and keep state information ... [trimmed for clarity]
Por exemplo, para ver quais serviços são permitidos na zona atual:
# firewall-cmd --list-services ssh dhcpv6-client
Listar as configurações para uma determinada subparte usando a ferramenta CLI pode, às vezes, ser difícil de interpretar. Por exemplo, você permite o serviço SSH
e firewalld
abre a porta necessária (22) para o serviço. Mais tarde, se você listar os serviços permitidos, a lista mostra o serviço SSH
, mas se você listar as portas abertas, ela não mostra nenhuma. Portanto,
recomenda-se usar a opção --list-all
para garantir que você receba uma informação completa.
44.5. Iniciando o firewalld
Procedimento
Para iniciar
firewalld
, digite o seguinte comando comoroot
:# systemctl unmask firewalld # systemctl start firewalld
Para garantir que
firewalld
comece automaticamente no início do sistema, digite o seguinte comando comoroot
:# systemctl habilita firewalld
44.6. Parando a firewalld
Procedimento
Para parar
firewalld
, digite o seguinte comando comoroot
:# systemctl stop firewalld
Para evitar que o
firewalld
comece automaticamente no início do sistema:# systemctl desativar firewalld
Para garantir que o firewalld não seja iniciado, acesse a interface
firewalld
D-Bus
e também se outros serviços exigiremfirewalld
:# Systemctl máscara firewalld
44.7. Tempo de execução e ajustes permanentes
Quaisquer mudanças comprometidas no modo runtime só se aplicam enquanto firewalld
estiver em funcionamento. Quando firewalld
é reiniciado, as configurações revertem para seus valores
permanent.
Para tornar as mudanças persistentes através de reinicializações, aplicá-las novamente usando a opção --permanent
. Alternativamente, para fazer alterações persistentes enquanto firewalld
estiver em execução, use a opção --runtime-to-permanent
firewall-cmd
.
Se você definir as regras enquanto firewalld
estiver funcionando usando apenas a opção --permanent
, elas não se tornam efetivas antes de firewalld
ser reiniciado. Entretanto, reiniciar firewalld
fecha todas as portas
abertas e pára o tráfego da rede.
Modificando configurações em tempo de execução e configuração permanente usando CLI
Usando o CLI, você não modifica as configurações do firewall em ambos os modos ao mesmo tempo. Você modifica apenas o tempo de execução ou o modo permanente. Para modificar as configurações do firewall no modo permanente, use a opção --permanent
com o comando firewall-cmd
.
# firewall-cmd --permanente <outras opções>
Sem esta opção, o comando modifica o modo de tempo de execução.
Para alterar as configurações em ambos os modos, você pode usar dois métodos:
Alterar as configurações de tempo de execução e depois torná-las permanentes como a seguir:
# firewall-cmd <other options> # firewall-cmd --runtime-to-permanent
Definir configurações permanentes e recarregar as configurações no modo tempo de execução:
# firewall-cmd --permanent <other options> # firewall-cmd --reload
O primeiro método permite testar as configurações antes de aplicá-las no modo permanente.
É possível, especialmente em
sistemas remotos, que uma configuração incorreta resulte em um bloqueio do usuário fora de uma máquina. Para evitar tais situações, use a opção --timeout
. Após um determinado período de tempo, qualquer mudança reverte para seu estado anterior. O uso desta opção exclui a opção --permanent
.
Por exemplo, para adicionar o serviço SSH
por 15 minutos:
# firewall-cmd --add-service=ssh --timeout 15m
44.8. Verificação da configuração firewalld permanente
Em certas situações, por exemplo, após editar manualmente os arquivos de configuração firewalld
, os administradores querem verificar se as mudanças estão corretas. Esta seção descreve como verificar a configuração permanente do serviço firewalld
.
Pré-requisitos
- O serviço
firewalld
está funcionando.
Procedimento
Verificar a configuração permanente do serviço
firewalld
:# firewall-cmd --check-config success
Se a configuração permanente for válida, o comando retorna
success
. Em outros casos, o comando retorna um erro com mais detalhes, tais como os seguintes:# firewall-cmd --check-config Error: INVALID_PROTOCOL: 'public.xml': 'tcpx' not from {'tcp'|'udp'|'sctp'|'dccp'}
44.9. Controle do tráfego da rede usando firewalld
44.9.1. Desabilitação de todo o tráfego em caso de emergência usando CLI
Em uma situação de emergência, como um ataque ao sistema, é possível desativar todo o tráfego da rede e cortar o atacante.
Procedimento
Para desativar imediatamente o tráfego em rede, ligue o modo de pânico:
# firewall-cmd --panic-on
A ativação do modo de pânico interrompe todo o tráfego em rede. Por este motivo, ele deve ser usado somente quando você tiver acesso físico à máquina ou se estiver logado usando um console serial.
A desativação do modo de pânico reverte o firewall para suas configurações permanentes. Para desativar o modo de pânico:
# firewall-cmd --panic-off
Para ver se o modo de pânico está ligado ou desligado, use:
# firewall-cmd --query-panic
44.9.2. Controle de tráfego com serviços pré-definidos usando CLI
O método mais simples para controlar o tráfego é adicionar um serviço pré-definido a firewalld
. Isto abre todas as portas necessárias e modifica outras configurações de acordo com o service definition file.
Procedimento
Verifique se o serviço já não é permitido:
# firewall-cmd --list-services ssh dhcpv6-client
Liste todos os serviços pré-definidos:
# firewall-cmd --get-services RH-Satellite-6 amanda-client amanda-k5-client bacula bacula-client bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc ceph ceph-mon cfengine condor-collector ctdb dhcp dhcpv6 dhcpv6-client dns docker-registry ... [trimmed for clarity]
Acrescente o serviço aos serviços permitidos:
# firewall-cmd --add-service=<service-namee>
Faça com que as novas configurações sejam persistentes:
# Firewall-cmd - tempo de execução a permanente
44.9.3. Controle de tráfego com serviços pré-definidos usando GUI
Para ativar ou desativar um serviço pré-definido ou personalizado:
- Comece o firewall-config e selecionar a zona de rede cujos serviços devem ser configurados.
- Selecione a guia
Services
. - Selecione a caixa de seleção para cada tipo de serviço em que você deseja confiar ou desmarque a caixa de seleção para bloquear um serviço.
Para editar um serviço:
- Comece o firewall-config ferramenta.
- Selecione
Permanent
a partir do menu etiquetadoConfiguration
. Ícones adicionais e botões de menu aparecem na parte inferior da janela Serviços. - Selecione o serviço que você deseja configurar.
As guias Ports
, Protocols
, e Source Port
permitem adicionar, alterar e remover portas, protocolos e porta de origem para o serviço selecionado. A aba módulos é para configurar
Netfilter módulos auxiliares. A aba Destination
permite limitar o tráfego a um endereço de destino específico e ao Protocolo Internet (IPv4
ou IPv6
).
Não é possível alterar as configurações de serviço no modo Runtime
.
44.9.4. Adicionando novos serviços
Os serviços podem ser adicionados e removidos
usando o gráfico firewall-config firewall-cmd
, e firewall-offline-cmd
. Alternativamente, você pode editar os arquivos XML em /etc/firewalld/services/
. Se um serviço não for adicionado ou alterado pelo usuário, então nenhum arquivo XML correspondente é encontrado em /etc/firewalld/services/
. Os arquivos /usr/lib/firewalld/services/
podem ser usados como modelos se você quiser adicionar ou alterar um serviço.
Os nomes dos serviços devem ser alfanuméricos e podem, adicionalmente, incluir apenas os caracteres
_
(sublinhado) e -
(traço).
Procedimento
Para adicionar um novo serviço em um terminal, use firewall-cmd
, ou firewall-offline-cmd
no caso de não estar ativo firewalld
.
Digite o seguinte comando para adicionar um serviço novo e vazio:
$
firewall-cmd --new-service=service-name --permanent
Para adicionar um novo serviço usando um arquivo local, use o seguinte comando:
$
firewall-cmd --new-service-from-file=service-name.xml --permanent
Você pode mudar o nome do serviço com o
--name=service-name
opção.Assim que as configurações do serviço são alteradas, uma cópia atualizada do serviço é colocada em
/etc/firewalld/services/
.Como
root
, você pode digitar o seguinte comando para copiar um serviço manualmente:# cp /usr/lib/firewalld/services/services/service-name.xml /etc/firewalld/services/service-name.xml
firewalld
carrega arquivos de /usr/lib/firewalld/services
em primeiro lugar. Se os arquivos forem colocados em /etc/firewalld/services
e forem válidos, então estes substituirão os arquivos correspondentes de /usr/lib/firewalld/services
. Os arquivos anulados em /usr/lib/firewalld/services
são usados assim que os arquivos correspondentes
em /etc/firewalld/services
forem removidos ou se firewalld
tiver sido solicitado a carregar os padrões dos serviços. Isto se aplica somente ao ambiente permanente. Uma recarga é necessária para obter estas falhas também no ambiente de tempo de execução.
44.9.5. Controle de portos usando CLI
Os portos são dispositivos lógicos que permitem a um sistema operacional receber e distinguir o tráfego da rede e encaminhá-lo de acordo com os serviços do sistema. Estes são normalmente representados por um daemon que escuta no porto, ou seja, espera por qualquer tráfego que chegue a este porto.
Normalmente, os serviços de sistema escutam nos portos padrão que lhes são reservados. O daemon httpd
, por exemplo, ouve no porto 80. Entretanto, os administradores de sistema, por padrão, configuram daemons para ouvir em diferentes portas para aumentar a segurança ou por
outras razões.
44.9.5.1. Abertura de um porto
Através de portas abertas, o sistema é acessível do exterior, o que representa um risco de segurança. Geralmente, mantenha as portas fechadas e só as abra se elas forem necessárias para determinados serviços.
Procedimento
Para obter uma lista de portos abertos na zona atual:
Liste todos os portos permitidos:
# firewall-cmd --list-ports
Adicione uma porta aos portos permitidos para abri-la para o tráfego de entrada:
# firewall-cmd --add-port=port-number/port-type
Faça com que as novas configurações sejam persistentes:
# Firewall-cmd - tempo de execução a permanente
Os tipos de portos são tcp
, udp
, sctp
, ou dccp
. O tipo deve corresponder ao tipo de comunicação em rede.
44.9.5.2. Fechamento de um porto
Quando uma porta aberta não for mais necessária, feche essa porta em firewalld
. É altamente recomendado fechar todas as portas desnecessárias assim que elas não forem utilizadas, pois deixar uma porta aberta representa um risco à segurança.
Procedimento
Para fechar um porto, removê-lo da lista de portos permitidos:
Liste todos os portos permitidos:
# firewall-cmd --list-ports [WARNING] ==== This command will only give you a list of ports that have been opened as ports. You will not be able to see any open ports that have been opened as a service. Therefore, you should consider using the --list-all option instead of --list-ports. ====
Retirar o porto dos portos permitidos para fechá-lo para o tráfego de entrada:
# firewall-cmd --remove-port=port-number/port-type
Faça com que as novas configurações sejam persistentes:
# Firewall-cmd - tempo de execução a permanente
44.9.6. Abertura de portos usando GUI
Para permitir o tráfego através do firewall até uma determinada porta:
- Comece o firewall-config e selecione a zona de rede cujas configurações você deseja alterar.
- Selecione a aba
Ports
e clique no botão Adicionar, no lado direito. A janelaPort and Protocol
se abre. - Digite o número da porta ou intervalo de portas a permitir.
- Selecione
tcp
ouudp
a partir da lista.
44.9.7. Controle de tráfego com protocolos usando GUI
Para permitir o tráfego através do firewall usando um determinado protocolo:
- Comece o firewall-config e selecione a zona de rede cujas configurações você deseja alterar.
- Selecione a aba
Protocols
e clique no botãoAdd
no lado direito. A janelaProtocol
se abre. - Selecione um protocolo da lista ou selecione a caixa de seleção
Other Protocol
e digite o protocolo no campo.
44.9.8. Abertura de portas de origem usando GUI
Permitir o tráfego através do firewall a partir de uma determinada porta:
- Inicie a ferramenta de configuração de firewall e selecione a zona de rede cujas configurações você deseja alterar.
- Selecione a aba
Source Port
e clique no botãoAdd
no lado direito. A janelaSource Port
se abre. - Digite o número da porta ou intervalo de portas a permitir. Selecione
tcp
ouudp
da lista.
44.10. Trabalhando com zonas firewalld
As zonas representam um conceito para gerenciar o tráfego de entrada de forma mais transparente. As zonas são conectadas a interfaces de rede ou designadas a uma gama de endereços de origem. As regras de firewall são gerenciadas independentemente para cada zona, o que permite definir configurações complexas de firewall e aplicá-las ao tráfego.
44.10.1. Listagem de zonas
Procedimento
Para ver quais zonas estão disponíveis em seu sistema:
# firewall-cmd --get-zones
O comando
firewall-cmd --get-zones
exibe todas as zonas que estão disponíveis no sistema, mas não mostra nenhum detalhe para zonas específicas.Para ver informações detalhadas para todas as zonas:
# firewall-cmd --list-all-zonas
Para ver informações detalhadas para uma zona específica:
# firewall-cmd --zone=zone-name --list-all
44.10.2. Modificação de configurações firewalld para uma determinada zona
Os sites Seção 44.9.2, “Controle de tráfego com serviços pré-definidos usando CLI” e Seção 44.9.5, “Controle de portos usando CLI” explicam como adicionar serviços ou modificar portos no escopo da zona de trabalho atual. S vezes, é necessário estabelecer regras em uma zona diferente.
Procedimento
- Para trabalhar em uma zona diferente, use o
--zone=zone-name
opção. Por exemplo, para permitir o serviçoSSH
na zona public:
# firewall-cmd --add-service=ssh --zone=public
44.10.3. Mudando a zona padrão
Os administradores de sistema atribuem uma zona a uma interface de rede em seus arquivos de configuração. Se uma interface não for atribuída a uma zona específica,
ela será atribuída à zona padrão. Após cada reinício do serviço firewalld
, firewalld
carrega as configurações para a zona padrão e a torna ativa.
Procedimento
Para configurar a zona padrão:
Exibir a zona padrão atual:
# firewall-cmd --get-default-zone
Defina a nova zona padrão:
# firewall-cmd --set-default-zone zone-nome
Seguindo este procedimento, a configuração é permanente, mesmo sem a opção
--permanent
.
44.10.4. Atribuição de uma interface de rede a uma zona
É possível definir diferentes conjuntos de regras para diferentes zonas e, em seguida, alterar as configurações rapidamente alterando a zona da interface que está sendo utilizada. Com várias interfaces, uma zona específica pode ser definida para cada uma delas para distinguir o tráfego que está passando por elas.
Procedimento
Para atribuir a zona a uma interface específica:
Relacione as zonas ativas e as interfaces atribuídas a elas:
# firewall-cmd --get-active-zones
Atribuir a interface a uma zona diferente:
# firewall-cmd --zone=zone_name --change-interface=interface_name --permanente
44.10.5. Atribuição de uma zona a uma conexão usando nmcli
Este procedimento descreve como adicionar uma zona
firewalld a uma conexão NetworkManager usando o utilitário nmcli
.
Procedimento
Atribuir a zona ao perfil de conexão do NetworkManager:
# nmcli conexão modificar profile connection.zone zone_name
Recarregue a conexão:
# nmcli conexão acima profile
44.10.6. Atribuição manual de uma zona a uma conexão de rede em um arquivo ifcfg
Quando a conexão é gerenciada por NetworkManagerdeve estar ciente de uma zona que utiliza. Para cada conexão de rede, uma zona pode ser especificada, o que proporciona a flexibilidade de várias configurações de firewall de acordo com a localização do computador com dispositivos portáteis. Assim, as zonas e configurações podem ser especificadas para diferentes locais, como empresa ou residência.
Procedimento
Para definir uma zona para uma conexão, edite o
/etc/sysconfig/network-scripts/ifcfg-connection_name
e acrescentar uma linha que atribua uma zona a esta conexão:ZONA=zone_name
44.10.7. Criando uma nova zona
Para usar zonas personalizadas, criar uma nova zona e usá-la como uma zona pré-definida. Novas zonas requerem a opção --permanent
, caso contrário o comando não funciona.
Procedimento
Para criar uma nova zona:
Criar uma nova zona:
# firewall-cmd --new-zone=zone-name
Verifique se a nova zona é adicionada a seus ajustes permanentes:
# firewall-cmd --get-zones
Faça com que as novas configurações sejam persistentes:
# Firewall-cmd - tempo de execução a permanente
44.10.8. Arquivos de configuração de zona
Zonas também podem ser criadas usando um zone configuration file. Esta abordagem pode ser útil quando você precisa criar uma nova zona, mas quer reutilizar as configurações de uma zona diferente e apenas alterá-las um pouco.
Um arquivo de configuração de zona firewalld
contém as informações para uma zona. Estas são a descrição da zona, serviços, portos, protocolos, icmp-blocks, mascarada, forward-ports e regras de linguagem rica em um formato de arquivo XML. O nome do arquivo tem que ser zone-name.xml
onde o comprimento de
zone-name é atualmente limitado a 17 caracteres. Os arquivos de configuração da zona estão localizados nos diretórios /usr/lib/firewalld/zones/
e /etc/firewalld/zones/
.
O exemplo a seguir mostra uma configuração que permite um serviço (SSH
) e uma faixa de portas, tanto para os protocolos TCP
como para UDP
:
<?xml version="1.0" encoding="utf-8"?> <zone> <short>My zone</short> <description>Here you can describe the characteristic features of the zone.</description> <service name="ssh"/> <port port="1025-65535" protocol="tcp"/> <port port="1025-65535" protocol="udp"/> </zone>
Para alterar as configurações dessa zona, adicionar ou remover seções para adicionar portos, encaminhar portos, serviços, e assim por diante.
Recursos adicionais
- Para mais informações, consulte as páginas do manual
firewalld.zone
.
44.10.9. Utilização de metas de zona para definir o comportamento padrão para o tráfego de entrada
Para cada zona, você pode definir um comportamento padrão que trata do tráfego de entrada que não é especificado. Tal
comportamento é definido pela definição do objetivo da zona. Há quatro opções - default
, ACCEPT
, REJECT
, e DROP
. Ao definir o alvo para ACCEPT
, você aceita todos os pacotes de entrada, exceto aqueles desabilitados por uma regra específica. Se você definir a meta para REJECT
ou DROP
, você desabilita todos os pacotes de entrada, exceto aqueles que você permitiu em regras específicas. Quando os pacotes são rejeitados, a máquina de origem é informada sobre a rejeição, enquanto não
há informação enviada quando os pacotes são descartados.
Procedimento
Estabelecer uma meta para uma zona:
Liste as informações para a zona específica para ver o alvo padrão:
$ firewall-cmd --zone=zone-name --list-all
Estabelecer uma nova meta na zona:
# firewall-cmd --permanent --zone=zone-name --set-target=<default|ACCEPT|REJECT|DROP>
44.11. Utilização de zonas para gerenciar o tráfego de entrada, dependendo de uma fonte
44.11.1. Utilização de zonas para gerenciar o tráfego de entrada, dependendo de uma fonte
Você pode usar zonas para gerenciar o tráfego de entrada com base em sua fonte. Isso permite classificar o tráfego de entrada e encaminhá-lo através de diferentes zonas para permitir ou não serviços que podem ser alcançados por esse tráfego.
Se você adicionar uma fonte a uma zona, a zona se torna ativa e qualquer tráfego de entrada dessa fonte será direcionado através dela. Você pode especificar configurações diferentes para cada zona, que são aplicadas ao tráfego de acordo com as fontes dadas. Você pode usar mais zonas mesmo que você tenha apenas uma interface de rede.
44.11.2. Adicionando uma fonte
Para encaminhar o tráfego de entrada para uma fonte específica, acrescente a fonte a essa zona. A fonte pode ser um endereço IP ou uma máscara IP na notação Classless Inter-domain Routing (CIDR).
Caso você acrescente múltiplas zonas com uma faixa de rede sobreposta, elas são ordenadas alfanumericamente pelo nome da zona e somente a primeira é considerada.
Para definir a fonte na zona atual:
# firewall-cmd --add-source=<source>
Para definir o endereço IP de origem para uma zona específica:
# firewall-cmd --zone=zone-name --add-source=<source>
O procedimento a seguir permite todo o tráfego de entrada do site 192.168.2.15 na zona trusted
:
Procedimento
Liste todas as zonas disponíveis:
# firewall-cmd --get-zones
Adicione a fonte IP à zona de confiança no modo permanente:
# firewall-cmd --zone=trusted --add-source=192.168.2.15
Faça com que as novas configurações sejam persistentes:
# Firewall-cmd - tempo de execução a permanente
44.11.3. Remoção de uma fonte
A remoção de uma fonte da zona corta o tráfego proveniente da mesma.
Procedimento
Liste as fontes permitidas para a zona requerida:
# firewall-cmd --zone=zone-name --list-fontes
Remover a fonte da zona permanentemente:
# firewall-cmd --zone=zone-name --remove-source=<source>
Faça com que as novas configurações sejam persistentes:
# Firewall-cmd - tempo de execução a permanente
44.11.4. Adicionando uma porta de origem
Para permitir a ordenação do tráfego com base em um porto de origem, especifique um porto de origem usando a opção --add-source-port
. Você também pode combinar isto com
a opção --add-source
para limitar o tráfego a um determinado endereço IP ou faixa IP.
Procedimento
Para adicionar uma porta de origem:
# firewall-cmd --zone=zone-name --add-source-port=<port-name>/<tcp|udp|sctp|dccp>
44.11.5. Remoção de uma porta de origem
Ao remover um porto de origem, você desabilita a ordenação do tráfego com base em um porto de origem.
Procedimento
Para remover um porto de origem:
# firewall-cmd --zone=zone-name --remove-source-port=<port-name>/<tcp|udp|sctp|dccp>
44.11.6. Usando zonas e fontes para permitir um serviço apenas para um domínio específico
Para permitir que o tráfego de uma rede específica utilize um serviço em uma máquina, utilize zonas e fonte. O seguinte procedimento permite que o tráfego de 192.168.1.0/24 possa chegar ao serviço HTTP enquanto qualquer outro tráfego é bloqueado.
Procedimento
Liste todas as zonas disponíveis:
# firewall-cmd --get-zones block dmz drop external home internal public trusted work
Adicione a fonte à zona de confiança para encaminhar o tráfego proveniente da fonte através da zona:
# firewall-cmd --zone=trusted --add-source=192.168.1.0/24
Adicione o serviço http na zona de confiança:
# firewall-cmd --zone=trusted --add-service=http
Faça com que as novas configurações sejam persistentes:
# Firewall-cmd - tempo de execução a permanente
Verifique se a zona de confiança está ativa e se o serviço é permitido nela:
# firewall-cmd --zone=trusted --list-all trusted (active) target: ACCEPT sources: 192.168.1.0/24 services: http
44.11.7. Configuração do tráfego aceito por uma zona com base em um protocolo
Você pode permitir que o tráfego de entrada seja aceito por uma zona com base em um protocolo. Todo o tráfego usando o protocolo especificado é aceito por uma zona, na qual você pode aplicar outras regras e filtragem.
44.11.7.1. Adicionando um protocolo a uma zona
Ao acrescentar um protocolo a uma determinada zona, você permite que todo tráfego com este protocolo seja aceito por esta zona.
Procedimento
Para acrescentar um protocolo a uma zona:
# firewall-cmd --zone=zone-name --add-protocol=port-name/tcp|udp|sctp|dccp|igmp
Para receber tráfego multicast, use o valor igmp
com a opção --add-protocol
.
44.11.7.2. Remoção de um protocolo de uma zona
Ao remover um protocolo de uma determinada zona, você deixa de aceitar todo o tráfego com base neste protocolo pela zona.
Procedimento
Para remover um protocolo de uma zona:
# firewall-cmd --zone=zone-name --remove-protocol=port-name/tcp|udp|sctp|dccp|igmp
44.12. Configuração de mascaramento de endereços IP
O procedimento a seguir descreve como habilitar o mascaramento de IP em seu sistema. O mascaramento de IP esconde máquinas individuais atrás de um gateway ao acessar a Internet.
Procedimento
Para verificar se o mascaramento IP está habilitado (por exemplo, para a zona
external
), digite o seguinte comando comoroot
:# firewall-cmd --zone=externo --query-masquerade
O comando imprime
yes
com status de saída0
se habilitado. Ele imprimeno
com status de saída1
caso contrário. Sezone
for omitido, será usada a zona padrão.Para ativar o mascaramento de IP, digite o seguinte comando como
root
:# firewall-cmd --zone=external --add-masquerade
- Para tornar esta configuração persistente, repita o comando adicionando a opção
--permanent
.
Para desativar o mascaramento de IP, digite o seguinte comando como root
:
# firewall-cmd --zone=externo --remove-masquerade --permanente
44.13. Encaminhamento de portas
A redirecionamento de portas usando este método só funciona para tráfego baseado em IPv4. Para a configuração do redirecionamento IPv6, é preciso usar regras ricas.
Para redirecionar para um sistema externo, é necessário permitir o mascaramento. Para mais informações, consulte Configuração de mascaramento de endereços IP.
44.13.1. Adicionando uma porta para redirecionar
Usando firewalld
, você
pode configurar o redirecionamento de portos para que qualquer tráfego de entrada que chegue a um determinado porto em seu sistema seja entregue a outro porto interno de sua escolha ou a um porto externo em outra máquina.
Pré-requisitos
- Antes de redirecionar o tráfego de um porto para outro porto, ou outro endereço, você tem que saber três coisas: qual porta os pacotes chegam, qual protocolo é usado e onde você quer redirecioná-los.
Procedimento
Para redirecionar um porto para outro porto:
# firewall-cmd --add-forward-port=port=port-number:proto=tcp|udp|sctp|dccp:toport=port-number
Para redirecionar uma porta para outra porta em um endereço IP diferente:
Acrescentar o porto a ser encaminhado:
# firewall-cmd --add-forward-port=port=port-number:proto=tcp|udp:toport=port-number:toaddr=IP
Habilitar o mascaramento:
# firewall-cmd --add-masquerade
44.13.2. Redirecionando a porta TCP 80 para a porta 88 na mesma máquina
Siga os passos para redirecionar a porta TCP 80 para a porta 88.
Procedimento
Redirecionar a porta 80 para a porta 88 para tráfego TCP:
# firewall-cmd --add-forward-port=port=80:proto=tcp:toport=88
Faça com que as novas configurações sejam persistentes:
# Firewall-cmd - tempo de execução a permanente
Verifique se o porto está redirecionado:
# firewall-cmd --list-all
44.13.3. Remoção de um porto redirecionado
Para remover um porto redirecionado:
# firewall-cmd --remove-forward-port=port=port-number:proto=<tcp|udp>:toport=port-number:toaddr=<IP>
Para remover um porto redirecionado para um endereço diferente, use o seguinte procedimento.
Procedimento
Retirar o porto encaminhado:
# firewall-cmd --remove-forward-port=port=port-number:proto=<tcp|udp>:toport=port-number:toaddr=<IP>
Desabilitar o mascaramento:
# firewall-cmd --remove-masquerade
44.13.4. Remoção da porta TCP 80 encaminhada para a porta 88 na mesma máquina
Para remover o redirecionamento do porto:
Procedimento
Listar portos redirecionados:
~]# firewall-cmd --list-forward-ports port=80:proto=tcp:toport=88:toaddr=
Remover a porta redirecionada do firewall::
~]# firewall-cmd --remove-forward-port=port=80:proto=tcp:toport=88:toaddr=
Faça com que as novas configurações sejam persistentes:
~]# firewall-cmd --operabilidade a permanente
44.14. Gerenciamento de solicitações do ICMP
O Internet Control Message Protocol
(ICMP
) é um protocolo de suporte que é usado por vários dispositivos de rede para enviar mensagens de erro e informações operacionais indicando um problema de conexão, por exemplo, que um serviço solicitado não está disponível. ICMP
difere dos protocolos de transporte como TCP e UDP porque não é usado para trocar dados entre sistemas.
Infelizmente, é possível usar as mensagens ICMP
,
especialmente echo-request
e echo-reply
, para revelar informações sobre sua rede e usar indevidamente tais informações para vários tipos de atividades fraudulentas. Portanto, firewalld
permite bloquear as solicitações ICMP
para proteger as informações de sua rede.
44.14.1. Listagem e bloqueio de pedidos do ICMP
Listagem ICMP
solicitações
As solicitações
ICMP
estão descritas em arquivos XML individuais que estão localizados no diretório /usr/lib/firewalld/icmptypes/
. Você pode ler estes arquivos para ver uma descrição da solicitação. O comando firewall-cmd
controla a manipulação das solicitações ICMP
.
Para listar todos os tipos disponíveis em
ICMP
:# firewall-cmd --get-icmptypes
A solicitação
ICMP
pode ser usada por IPv4, IPv6 ou por ambos os protocolos. Para ver para qual protocolo a solicitaçãoICMP
é utilizada:# firewall-cmd --info-icmptype=<icmptype>
O status de uma solicitação
ICMP
mostrayes
se a solicitação estiver atualmente bloqueada ouno
se não estiver. Para ver se uma solicitaçãoICMP
está bloqueada no momento:# firewall-cmd --query-icmp-block=<icmptype>
Bloqueio ou desbloqueio ICMP
solicitações
Quando seu servidor bloqueia solicitações do ICMP
, ele não fornece as informações que normalmente forneceria. No entanto, isso não significa que nenhuma informação
seja dada. Os clientes recebem informações de que o pedido específico ICMP
está sendo bloqueado (rejeitado). O bloqueio das solicitações ICMP
deve ser considerado cuidadosamente, pois pode causar problemas de comunicação, especialmente com o tráfego IPv6.
Para ver se uma solicitação
ICMP
está atualmente bloqueada:# firewall-cmd --query-icmp-block=<icmptype>
Para bloquear um pedido em
ICMP
:# firewall-cmd --add-icmp-block=<icmptype>
Para remover o bloco para um pedido em
ICMP
:# firewall-cmd --remove-icmp-block=<icmptype>
Bloqueio de solicitações ICMP
sem fornecer qualquer tipo de informação
Normalmente, se você bloquear solicitações do ICMP
, os clientes sabem que você está bloqueando. Portanto, um potencial atacante que está farejando endereços IP ao vivo ainda é capaz de ver que seu endereço IP está online. Para esconder completamente estas informações, você tem que descartar todas as solicitações ICMP
.
-
Para bloquear e abandonar todas as solicitações
ICMP
:
Defina o objetivo de sua zona para
DROP
:# firewall-cmd --permanent --set-target=DROP
Agora, todo o tráfego, incluindo os pedidos de ICMP
, é descartado, exceto o tráfego que você permitiu explicitamente.
- Para bloquear e abandonar certas solicitações
ICMP
e permitir outras:
Defina o objetivo de sua zona para
DROP
:# firewall-cmd --permanent --set-target=DROP
Adicionar a inversão de bloco ICMP para bloquear todas as solicitações
ICMP
de uma só vez:# firewall-cmd --add-icmp-inversion-block-inversion
Adicione o bloco ICMP para aqueles pedidos do site
ICMP
que você deseja permitir:# firewall-cmd --add-icmp-block=<icmptype>
Faça com que as novas configurações sejam persistentes:
# Firewall-cmd - tempo de execução a permanente
O block inversion inverte a configuração dos bloqueios de solicitações ICMP
, de modo que todas as solicitações, que
não estavam anteriormente bloqueadas, são bloqueadas por causa do alvo de suas mudanças de zona para DROP
. As solicitações que foram bloqueadas não são bloqueadas. Isto significa que se você deseja desbloquear uma solicitação, deve usar o comando de bloqueio.
- Para reverter a inversão de bloco para um ajuste totalmente permissivo:
Defina a meta de sua zona para
default
ouACCEPT
:# firewall-cmd --permanente --set-target=default
Remover todos os blocos adicionados para pedidos em
ICMP
:# firewall-cmd --remove-icmp-block=<icmptype>
Remova a inversão de bloco
ICMP
:# firewall-cmd --remove-icmp-block-inversion
Faça com que as novas configurações sejam persistentes:
# Firewall-cmd - tempo de execução a permanente
44.14.2. Configuração do filtro ICMP usando o GUI
- Para ativar ou desativar um filtro
ICMP
, inicie o firewall-config e selecionar a zona de rede cujas mensagens devem ser filtradas. Selecione a abaICMP Filter
e selecione a caixa de seleção para cada tipo de mensagemICMP
que você deseja filtrar. Desmarque a caixa de seleção para desativar um filtro. Esta configuração é por direção e o padrão permite tudo. - Para editar um tipo
ICMP
, inicie o firewall-config e selecione o modoPermanent
a partir do menu etiquetadoConfiguration
. Ícones adicionais aparecem na parte inferior da janela Serviços. Selecione Sim no diálogo seguinte para habilitar o mascaramento e para fazer o encaminhamento para outra máquina funcionando. - Para ativar a inversão do
ICMP Filter
, clique na caixa de seleçãoInvert Filter
, à direita. Somente os tipos marcados comICMP
são agora aceitos, todos os outros são rejeitados. Em uma zona utilizando o alvo DROP, eles são descartados.
44.15. Configuração e controle de conjuntos IP usando firewalld
Para ver a lista de tipos de conjunto IP suportados por firewalld
, digite o seguinte comando como root.
~]# firewall-cmd --get-ipset-types hash:ip hash:ip,mark hash:ip,port hash:ip,port,ip hash:ip,port,net hash:mac hash:net hash:net,iface hash:net,net hash:net,port hash:net,port,net
44.15.1. Configuração das opções do conjunto IP usando CLI
Os conjuntos IP podem ser usados nas zonas firewalld
como fontes e também como fontes em regras ricas. No Red Hat Enterprise Linux, o método preferido é usar os conjuntos de IPs criados com firewalld
em uma regra direta.
Para listar os conjuntos de IPs conhecidos por
firewalld
no ambiente permanente, use o seguinte comando comoroot
:# firewall-cmd --permanente --get-ipsets
Para adicionar um novo conjunto IP, use o seguinte comando usando o ambiente permanente como
root
:# firewall-cmd --permanent --new-ipset=test --type=hash:net success
O comando anterior cria um novo conjunto IP com o nome test e o tipo
hash:net
paraIPv4
. Para criar um conjunto de IP para uso comIPv6
, adicione a opção--option=family=inet6
. Para tornar o novo ajuste efetivo no ambiente de tempo de execução, recarreguefirewalld
.Liste o novo conjunto IP com o seguinte comando:
root
:# firewall-cmd --permanent --get-ipsets test
Para obter mais informações sobre o conjunto IP, use o seguinte comando como
root
:# firewall-cmd --permanent --info-ipset=test test type: hash:net options: entries:
Observe que o conjunto IP não tem nenhuma entrada no momento.
Para adicionar uma entrada ao conjunto IP test, use o seguinte comando como
root
:# firewall-cmd --permanent --ipset=test --add-entry=192.168.0.1 success
O comando anterior adiciona o endereço IP 192.168.0.1 ao conjunto IP.
Para obter a lista de entradas atuais no conjunto IP, use o seguinte comando como
root
:# firewall-cmd --permanent --ipset=test --get-entries 192.168.0.1
Gerar um arquivo contendo uma lista de endereços IP, por exemplo:
# cat > iplist.txt <<EOL 192.168.0.2 192.168.0.3 192.168.1.0/24 192.168.2.254 EOL
O arquivo com a lista de endereços IP para um conjunto IP deve conter uma entrada por linha. Linhas começando com um hash, um ponto e vírgula, ou linhas vazias são ignoradas.
Para adicionar os endereços do arquivo iplist.txt, use o seguinte comando como
root
:# firewall-cmd --permanent --ipset=test --add-entries-from-file=iplist.txt success
Para ver a lista ampliada de entradas do conjunto IP, use o seguinte comando como
root
:# firewall-cmd --permanent --ipset=test --get-entries 192.168.0.1 192.168.0.2 192.168.0.3 192.168.1.0/24 192.168.2.254
Para remover os endereços do conjunto IP e verificar a lista de entradas atualizada, use os seguintes comandos como
root
:# firewall-cmd --permanent --ipset=test --remove-entries-from-file=iplist.txt success # firewall-cmd --permanent --ipset=test --get-entries 192.168.0.1
Você pode adicionar o conjunto IP como fonte a uma zona para lidar com todo o tráfego vindo de qualquer um dos endereços listados no conjunto IP com uma zona. Por exemplo, para adicionar o conjunto de IP test como fonte à zona drop para descartar todos os pacotes vindos de todas as entradas listadas no conjunto de IP test, use o seguinte comando como
root
:# firewall-cmd --permanent --zone=drop --add-source=ipset:test success
O prefixo
ipset:
na fonte mostrafirewalld
que a fonte é um conjunto IP e não um endereço IP ou uma faixa de endereços.
Apenas a criação e remoção de conjuntos IP é limitada ao ambiente permanente, todas as outras opções de conjuntos IP podem ser usadas também no ambiente de tempo de execução sem a opção --permanent
.
A Red Hat não recomenda o uso de conjuntos IP que não são
gerenciados através de firewalld
. Para utilizar tais conjuntos IP, é necessária uma regra direta permanente para referenciar o conjunto, e um serviço personalizado deve ser adicionado para criar estes conjuntos IP. Este serviço precisa ser iniciado antes do firewalld iniciar, caso contrário firewalld
não é capaz de adicionar as regras diretas usando estes conjuntos. Você pode adicionar as regras diretas permanentes com o arquivo /etc/firewalld/direct.xml
.
44.16. Priorizando regras ricas
Por padrão, as regras ricas são organizadas com base em sua ação de regras. Por exemplo, as regras deny
têm precedência sobre as regras allow
. O parâmetro priority
nas regras ricas fornece aos administradores um controle granulado fino sobre as regras ricas e sua ordem de execução.
44.16.1. Como o parâmetro prioritário organiza as regras em diferentes cadeias
Você pode definir o parâmetro priority
em uma regra rica para qualquer número entre -32768
e 32767
, e valores mais baixos têm maior precedência.
O serviço firewalld
organiza regras com base em seu valor prioritário em diferentes cadeias:
- Prioridade
inferior a 0: a regra é redirecionada para uma corrente com o sufixo
_pre
. - Prioridade maior que 0: a regra é redirecionada para uma cadeia com o sufixo
_post
. - Prioridade igual a 0: com base na ação, a regra é redirecionada para uma cadeia com o
_log
,_deny
, ou_allow
a ação.
Dentro destas subdivisões, firewalld
ordena as regras com base em seu valor prioritário.
44.16.2. Estabelecendo a prioridade de uma regra rica
O procedimento descreve um exemplo de como criar uma regra rica que usa o parâmetro priority
para registrar todo o tráfego que não é permitido ou negado por outras regras. Você pode usar esta regra para sinalizar tráfego inesperado.
Procedimento
Acrescente uma regra rica com uma precedência muito baixa para registrar todo o tráfego que não tenha sido igualado por outras regras:
# firewall-cmd --add-rich-rule='rule priority=32767 log prefix="UNEXPECTED: "\valor limite="5/m"''
O comando limita adicionalmente o número de entradas de registro a
5
por minuto.Opcionalmente, exibir a regra
nftables
que o comando na etapa anterior criou:# nft list chain inet firewalld filter_IN_public_post table inet firewalld { chain filter_IN_public_post { log prefix "UNEXPECTED: " limit rate 5/minute } }
44.17. Configuração do bloqueio do firewall
Aplicações ou serviços locais são capazes de alterar a configuração do firewall se estiverem rodando como root
(por exemplo, libvirt). Com este recurso, o administrador pode bloquear a configuração do firewall para que nenhuma aplicação ou apenas as aplicações que são adicionadas à lista de bloqueio permitam solicitar mudanças no firewall. As configurações de bloqueio padrão são desabilitadas. Se ativada, o usuário pode ter certeza de que não há
alterações indesejadas na configuração do firewall feitas por aplicações ou serviços locais.
44.17.1. Configuração de bloqueio usando CLI
Para consultar se o bloqueio está ativado, use o seguinte comando como
root
:# firewall-cmd --query-lockdown
O comando imprime
yes
com status de saída0
se o bloqueio estiver ativado. Ele imprimeno
com status de saída1
caso contrário.Para ativar o bloqueio, digite o seguinte comando como
root
:# firewall-cmd --lockdown-on
Para desativar o bloqueio, use o seguinte comando como
root
:# firewall-cmd --lockdown-off
44.17.2. Configuração das opções de listas de bloqueio usando CLI
A lista de permissão de bloqueio pode conter comandos, contextos de segurança, usuários e IDs de usuários. Se uma entrada de comando na lista de permissões terminar com um asterisco "*", então todas as linhas de comando que começam com esse comando serão iguais. Se o {\i1}"*" não estiver lá, então o comando absoluto, incluindo os argumentos, deve coincidir.
O contexto é o contexto de segurança (SELinux) de uma aplicação ou serviço em execução. Para obter o contexto de uma aplicação ou serviço em execução, use o seguinte comando:
$
ps -e --context
Esse comando retorna todas as aplicações em execução. Encaneie a saída através do grep ferramenta para obter a aplicação de interesse. Por exemplo:
$ ps -e --contextos | grep example_program
Para listar todas as linhas de comando que estão na lista de permissão, digite o seguinte comando como
root
:# firewall-cmd --list-lockdown-whitelist-commands
Para adicionar um comando command à lista de permissão, digite o seguinte comando como
root
:# firewall-cmd --add-lockdown-whitelist-command='/usr/bin/python3 -Es /usr/bin/command'
Para remover um comando command da lista de permissão, digite o seguinte comando como
root
:# firewall-cmd --remove-lockdown-whitelist-command='/usr/bin/python3 -Es /usr/bin/command'
Para saber se o comando command está na lista de permissão, digite o seguinte comando como
root
:# firewall-cmd --query-lockdown-whitelist-command='/usr/bin/python3 -Es /usr/bin/command'
O comando imprime
yes
com status de saída0
se for verdade. Ele imprimeno
com status de saída1
caso contrário.Para listar todos os contextos de segurança que estão na lista de permissão, digite o seguinte comando como
root
:# firewall-cmd --list-lockdown-whitelist-contexts
Para adicionar um contexto context à lista de permissão, digite o seguinte comando como
root
:# firewall-cmd --add-lockdown-whitelist-context=contexto
Para remover um contexto context da lista de permissão, digite o seguinte comando como
root
:# firewall-cmd --remove-lockdown-whitelist-context=contexto
Para saber se o contexto context está na lista de permissão, digite o seguinte comando como
root
:# firewall-cmd --query-lockdown-whitelist-context=contexto
Imprime
yes
com status de saída0
, se verdadeiro, imprimeno
com status de saída1
caso contrário.Para listar todos os IDs de usuário que estão na lista de permissão, digite o seguinte comando como
root
:# firewall-cmd --list-lockdown-whitelist-uids
Para adicionar um ID de usuário uid à lista de permissões, digite o seguinte comando como
root
:# firewall-cmd --add-lockdown-whitelist-uid=uid
Para remover um ID de usuário uid da lista de permissão, digite o seguinte comando como
root
:# firewall-cmd --remove-lockdown-whitelist-uid=uid
Para consultar se o ID do usuário uid está na lista de permissão, digite o seguinte comando:
$
firewall-cmd --query-lockdown-whitelist-uid=uid
Imprime
yes
com status de saída0
, se verdadeiro, imprimeno
com status de saída1
caso contrário.Para listar todos os nomes de usuários que estão na lista de permissão, digite o seguinte comando como
root
:# firewall-cmd --list-lockdown-whitelist-usuários
Para adicionar um nome de usuário user à lista de permissão, digite o seguinte comando como
root
:# firewall-cmd --add-lockdown-whitelist-user=usuário
Para remover um nome de usuário user da lista de permissão, digite o seguinte comando como
root
:# firewall-cmd --remove-lockdown-whitelist-user=usuário
Para consultar se o nome do usuário user está na lista de permissão, digite o seguinte comando:
$
firewall-cmd --query-lockdown-whitelist-user=user
Imprime
yes
com status de saída0
, se verdadeiro, imprimeno
com status de saída1
caso contrário.
44.17.3. Configuração de opções de lista de bloqueio usando arquivos de configuração
O arquivo de configuração padrão da lista de permissão contém o contexto NetworkManager
e o contexto padrão de libvirt
. O ID de usuário 0 também está na lista.
<?xml version="1.0" encoding="utf-8"?> <whitelist> <selinux context="system_u:system_r:NetworkManager_t:s0"/> <selinux context="system_u:system_r:virtd_t:s0-s0:c0.c1023"/> <user id="0"/> </whitelist>
A seguir, um exemplo de arquivo de configuração de lista de permissão que permite todos os comandos para o utilitário firewall-cmd
, para um usuário chamado user cujo ID de usuário é 815
:
<?xml version="1.0" encoding="utf-8"?> <whitelist> <command name="/usr/libexec/platform-python -s /bin/firewall-cmd*"/> <selinux context="system_u:system_r:NetworkManager_t:s0"/> <user id="815"/> <user name="user"/> </whitelist>
Este exemplo mostra tanto user id
como user name
, mas apenas uma opção é necessária. Python é o intérprete e está preparado para a linha de comando. Você também pode usar um comando específico, por exemplo:
/usr/bin/python3 /bin/firewall-cmd --lockdown-on
Nesse exemplo, somente o comando --lockdown-on
é
permitido.
No Red Hat Enterprise Linux, todos os utilitários são colocados no diretório /usr/bin/
e o diretório /bin/
está vinculado simbolicamente ao diretório /usr/bin/
. Em outras palavras, embora o caminho para firewall-cmd
quando inserido como root
possa ser resolvido para /bin/firewall-cmd
, /usr/bin/firewall-cmd
pode agora ser usado. Todos os novos scripts devem usar o novo local. Mas esteja ciente de que se os scripts que rodam como root
forem escritos para usar o caminho /bin/firewall-cmd
, então esse
caminho de comando deve ser adicionado na lista de permissão, além do caminho /usr/bin/firewall-cmd
tradicionalmente usado apenas para usuários nãoroot
.
O *
no final do atributo do nome de um comando significa que todos os comandos que começam com esta string correspondem. Se o *
não estiver lá, então o comando absoluto, incluindo argumentos, deve coincidir.
44.18. Log para pacotes negados
Com a opção LogDenied
no site firewalld
, é possível adicionar um mecanismo simples de registro para pacotes negados. Estes são os pacotes que são rejeitados ou descartados. Para alterar a configuração do registro, edite o arquivo /etc/firewalld/firewalld.conf
ou use a linha de comando ou a ferramenta de configuração GUI.
Se LogDenied
estiver habilitado, as regras de registro são adicionadas logo antes das regras de rejeição e desistência nas cadeias INPUT, FORWARD e OUTPUT
para as regras padrão e também as regras finais de rejeição e desistência nas zonas. Os valores possíveis para esta configuração são: all
, unicast
, broadcast
, multicast
, e off
. A configuração padrão é off
. Com a configuração unicast
, broadcast
, e multicast
, a correspondência pkttype
é usada para combinar com o tipo de pacote de camada de link. Com all
, todos os pacotes são registrados.
Para listar a configuração real LogDenied
com firewall-cmd, use o seguinte comando
como root
:
# firewall-cmd --get-log-denied off
Para alterar a configuração LogDenied
, use o seguinte comando como root
:
# firewall-cmd --set-log-denied=all success
Para alterar a configuração LogDenied
com a ferramenta de configuração firewalld
GUI, inicie firewall-configclique no menu Options
e selecione Change Log Denied
. A janela LogDenied
aparece. Selecione a nova configuração LogDenied
no menu e clique em OK.
44.19. Informações relacionadas
As seguintes fontes de informação fornecem recursos adicionais em relação a firewalld
.
Documentação instalada
-
firewalld(1)
página man - descreve opções de comando parafirewalld
. -
firewalld.conf(5)
página man - contém informações para configurarfirewalld
. -
firewall-cmd(1)
man page - descreve opções de comando para o cliente de linha de comandofirewalld
. -
firewall-config(1)
man page - descreve as configurações para o firewall-config ferramenta. -
firewall-offline-cmd(1)
man page - descreve as opções de comando para o cliente de linha de comando offlinefirewalld
. -
firewalld.icmptype(5)
man page - descreve arquivos de configuração XML paraICMP
filtragem. -
firewalld.ipset(5)
man page - descreve arquivos de configuração XML para os conjuntosfirewalld
IP
. -
firewalld.service(5)
man page - descreve arquivos de configuração XML para firewalld service. -
firewalld.zone(5)
man page - descreve os arquivos de configuração XML para a configuração da zonafirewalld
. -
firewalld.direct(5)
página man - descreve o arquivo de configuração da interface diretafirewalld
. -
firewalld.lockdown-whitelist(5)
man page - descreve o arquivo de configuração da listafirewalld
lockdown allowlist. -
firewalld.richlanguage(5)
man page - descreve a sintaxe da regra da linguagem ricafirewalld
. -
firewalld.zones(5)
man page - descrição geral do que são zonas e como configurá-las. -
firewalld.dbus(5)
página man - descreve a interfaceD-Bus
defirewalld
.
Documentação on-line
- http://www.firewalld.org/ -
firewalld
página inicial.
Capítulo 45. Começando com nftables
A estrutura nftables
oferece facilidades de classificação de pacotes e é o sucessor designado para as ferramentas iptables
, ip6tables
, arptables
, e ebtables
. Ela oferece inúmeras melhorias em conveniência, características e desempenho em relação às ferramentas de filtragem de pacotes anteriores, mais notadamente:
- tabelas de pesquisa em vez de processamento linear
- uma estrutura única para ambos os protocolos
IPv4
eIPv6
- regras todas aplicadas atomicamente em vez de buscar, atualizar e armazenar um conjunto completo de regras
- suporte para depuração e rastreamento no conjunto de regras (
nftrace
) e monitoramento de eventos de rastreamento (na ferramentanft
) - sintaxe mais consistente e compacta, sem extensões específicas de protocolo
- uma API Netlink para aplicações de terceiros
Da mesma forma que iptables
, nftables
utiliza tabelas para o armazenamento de
correntes. As cadeias contêm regras individuais para a realização de ações. A ferramenta nft
substitui todas as ferramentas das estruturas anteriores de filtragem de pacotes. A biblioteca libnftnl
pode ser usada para interação de baixo nível com nftables
Netlink API sobre a biblioteca libmnl
.
O efeito dos módulos sobre o conjunto de regras nftables
pode ser observado usando o comando nft
list rule set. Como estas ferramentas adicionam tabelas, correntes, regras, conjuntos e
outros objetos ao conjunto de regras nftables
, esteja ciente de que nftables
operações do conjunto de regras, como o comando nft flush ruleset
, podem afetar os conjuntos de regras instalados usando os comandos herdados anteriormente separados.
45.1. Migrando de iptables para nftables
Se você atualizou seu servidor para o RHEL 8 ou sua configuração de firewall ainda usa as
regras iptables
, você pode migrar suas regras iptables
para nftables
.
45.1.1. Quando usar firewalld, nftables, ou iptables
A seguir, uma breve visão geral em que cenário você deve usar uma das seguintes utilidades:
-
firewalld
: Use o utilitáriofirewalld
para casos simples de uso de firewall. O utilitário é fácil de usar e cobre os casos de uso típico para estes cenários. -
nftables
: Use o utilitárionftables
para criar firewalls complexos e de desempenho crítico, como para toda uma rede. -
iptables
: O utilitárioiptables
no Red Hat Enterprise Linux 8 usa a API do kernelnf_tables
ao invés do back endlegacy
. A APInf_tables
fornece compatibilidade retroativa para que scripts que usam os comandosiptables
ainda funcionem no Red Hat Enterprise Linux 8. Para novos scripts de firewall, a Red Hat recomenda usarnftables
.
Para evitar que os diferentes serviços de firewall influenciem uns aos outros, execute apenas um deles em um host RHEL, e desabilite os outros serviços.
45.1.2. Conversão de regras iptables em regras nftables
O Red Hat Enterprise Linux 8 fornece as ferramentas iptables-translate
e ip6tables-translate
para converter as
regras existentes iptables
ou ip6tables
em regras equivalentes para nftables
.
Observe que algumas extensões carecem de suporte de tradução. Se tal extensão existir, a ferramenta imprime a regra não traduzida prefixada com o sinal #
. Por exemplo:
# iptables-translate -A INPUT -j CHECKSUM --checksum-fill nft # -A INPUT -j CHECKSUM --checksum-fill
Além disso, os usuários podem usar as ferramentas iptables-restore-translate
e ip6tables-restore-translate
para traduzir um lixão de regras. Note que antes disso, os usuários podem usar os comandos iptables-save
ou ip6tables-save
para imprimir um dump das regras atuais.
Por exemplo:
# iptables-save >/tmp/iptables.dump # iptables-restore-translate -f /tmp/iptables.dump # Translated by iptables-restore-translate v1.8.0 on Wed Oct 17 17:00:13 2018 add table ip nat ...
Para mais informações e uma lista de opções e valores possíveis, digite o comando iptables-translate --help
.
45.2. Escrever e executar scripts nftables
A estrutura nftables
fornece um ambiente de script nativo que traz um grande benefício sobre o uso de scripts shell para manter as regras de firewall: a execução de scripts é atômica. Isto
significa que o sistema ou aplica o script inteiro ou impede a execução se ocorrer um erro. Isto garante que o firewall esteja sempre em um estado consistente.
Além disso, o ambiente de script nftables
permite que os administradores o façam:
- adicionar comentários
- definir variáveis
- incluir outros arquivos do conjunto de regras
Esta seção explica como utilizar estes recursos, assim como a criação e execução de scripts
nftables
.
Quando você instala o pacote nftables
, o Red Hat Enterprise Linux cria automaticamente *.nft
scripts no diretório /etc/nftables/
. Estes scripts contêm comandos que criam tabelas e cadeias vazias para diferentes propósitos. Você pode estender estes arquivos ou escrever seus scripts.
45.2.1. O cabeçalho do script necessário em nftables script
Semelhante a outros scripts, nftables
scripts requerem uma seqüência de shebang na primeira linha do script que define a diretiva do intérprete.
Um script nftables
deve sempre começar com a seguinte linha:
#!/usr/sbin/nft -f
Se você omitir o parâmetro -f
, o utilitário nft
não lê o script e exibe Error: syntax error, unexpected newline, expecting string
.
45.2.2. Formatos de scripts nftables suportados
O ambiente nftables
suporta scripts nos seguintes formatos:
Você pode escrever um script no mesmo formato que o comando
nft list ruleset
exibe o conjunto de regras:#!/usr/sbin/nft -f # Flush the rule set flush ruleset table inet example_table { chain example_chain { # Chain for incoming packets that drops all packets that # are not explicitly allowed by any rule in this chain type filter hook input priority 0; policy drop; # Accept connections to port 22 (ssh) tcp dport ssh accept } }
Você pode usar a mesma sintaxe para comandos como em
nft
comandos:#!/usr/sbin/nft -f # Flush the rule set flush ruleset # Create a table add table inet example_table # Create a chain for incoming packets that drops all packets # that are not explicitly allowed by any rule in this chain add chain inet example_table example_chain { type filter hook input priority 0 ; policy drop ; } # Add a rule that accepts connections to port 22 (ssh) add rule inet example_table example_chain tcp dport ssh accept
45.2.3. Executando nftables scripts
Para executar um script nftables
, o script deve ser executável. Somente se o script for incluído em outro script, ele não precisa ser executável. O procedimento descreve como tornar um script executável e executar o script.
Pré-requisitos
- O procedimento desta seção pressupõe que você tenha armazenado um script
nftables
no arquivo/etc/nftables/example_firewall.nft
.
Procedimento
Passos que são necessários apenas uma vez:
Opcionalmente, defina o dono do roteiro para
root
:# raiz de enxada /etc/nftables/example_firewall.nft
Tornar o roteiro executável para o proprietário:
# chmod u x /etc/nftables/example_firewall.nft
Execute o roteiro:
# /etc/nftables/example_firewall.nft
Se nenhuma saída for exibida, o sistema executou o script com sucesso.
Mesmo se
nft
executar o script com sucesso, regras colocadas incorretamente, parâmetros ausentes ou outros problemas no script podem causar que o firewall não se comporte como esperado.
Recursos adicionais
- Para detalhes sobre como definir o proprietário de um arquivo, consulte a página de manual
chown(1)
. - Para detalhes sobre a definição de permissões de um arquivo, consulte a página de manual
chmod(1)
. - Seção 45.2.7, “Carregamento automático das regras nftables quando o sistema inicia”
45.2.4. Usando comentários em scripts nftables
O ambiente nftables
interpreta tudo à direita de um personagem #
como um comentário.
Exemplo 45.1. Comentários em um roteiro nftables
Os comentários podem começar no início de uma linha, assim como ao lado de um comando:
... # Flush the rule set flush ruleset add table inet example_table # Create a table ...
45.2.5. Usando variáveis em um script nftables
Para definir uma variável em um script nftables
, use a palavra-chave define
. Você pode armazenar valores individuais e conjuntos anônimos em uma variável. Para cenários mais complexos, use conjuntos ou mapas de veredictos.
Variáveis com um único valor
O exemplo a seguir define
uma variável chamada INET_DEV
com o valor enp1s0
:
define INET_DEV = enp1s0
Você pode usar a variável no script escrevendo o sinal $
seguido do nome da variável:
...
add rule inet example_table example_chain iifname $INET_DEV tcp dport ssh accept
...
Variáveis que contêm um conjunto anônimo
O exemplo a seguir define uma variável que contém um conjunto anônimo:
define DNS_SERVERS = { 192.0.2.1, 192.0.2.2 }
Você pode usar a variável no script escrevendo o sinal $
seguido do nome da variável:
adicionar exemplo de regra inet exemplo de tabela_chain ip daddr $DNS_SERVERS aceitar
Observe que os suportes encaracolados têm uma semântica especial quando você os usa em uma regra, pois indicam que a variável representa um conjunto.
Recursos adicionais
- Para detalhes sobre os conjuntos, ver Seção 45.5, “Usando conjuntos em comandos nftables”.
- Para detalhes sobre os mapas de veredictos, veja Seção 45.6, “Usando mapas de veredictos em comandos nftables”.
45.2.6. Incluindo arquivos em um script nftables
O ambiente nftables
permite que os administradores incluam outros scripts usando a declaração include
.
Se você especificar apenas um nome de arquivo sem um caminho absoluto ou relativo, nftables
inclui arquivos do caminho de busca padrão, que está definido para /etc
no Red Hat Enterprise
Linux.
Exemplo 45.2. Incluindo arquivos do diretório de busca padrão
Para incluir um arquivo do diretório de busca padrão:
incluem "exemplo.nft"
Exemplo 45.3. Incluindo todos os arquivos *.nft de um diretório
Para incluir todos os arquivos que terminam em *.nft
que estão armazenados no diretório /etc/nftables/rulesets/
:
incluem "/etc/nftables/rulesets/*.nft\"
Observe que a declaração include
não
corresponde a arquivos que começam com um ponto.
Recursos adicionais
- Para mais detalhes, consulte a seção
Include files
na página de manualnft(8)
.
45.2.7. Carregamento automático das regras nftables quando o sistema inicia
O serviço nftables
systemd carrega
scripts de firewall que estão incluídos no arquivo /etc/sysconfig/nftables.conf
. Esta seção explica como carregar as regras de firewall quando o sistema inicia.
Pré-requisitos
- Os scripts
nftables
são armazenados no diretório/etc/nftables/
.
Procedimento
Edite o arquivo
/etc/sysconfig/nftables.conf
.- Se você melhorar
*.nft
scripts criados em/etc/nftables/
ao instalar o pacotenftables
, descomente a declaraçãoinclude
para estes scripts. Se você escrever scripts a partir do zero, adicione declarações em
include
para incluir estes scripts. Por exemplo, para carregar o/etc/nftables/example.nft
quando o serviçonftables
for iniciado, acrescente:incluem "/etc/nftables/example.nft\"
- Se você melhorar
Habilite o serviço
nftables
.# systemctl habilita nftables
Opcionalmente, inicie o serviço
nftables
para carregar as regras de firewall sem reiniciar o sistema:# systemctl start nftables
45.3. Criação e gerenciamento de tabelas, correntes e regras nftables
Esta seção explica como exibir os conjuntos de regras nftables
, e como gerenciá-los.
45.3.1. Valores padrão de prioridade da cadeia e nomes textuais
Quando você cria uma cadeia, o priority
pode definir um valor inteiro ou um nome padrão que especifica a ordem na qual as cadeias com o mesmo valor hook
atravessam.
Os nomes e valores são definidos com base em quais prioridades são utilizados pelo xtables
ao registrar suas cadeias padrão.
O comando nft list chains
exibe valores de prioridade textual por padrão. Você pode visualizar o valor numérico passando a opção -y
para o comando.
Exemplo 45.4. Usando um valor textual para definir a prioridade
O seguinte comando cria uma cadeia chamada example_chain
em example_table
usando o valor de prioridade padrão 50
:
# nft add chain inet example_table example_chain { type filter hook input priority 50 \; policy accept \; }
Como a prioridade é um valor padrão, você pode, alternativamente, usar o valor textual:
# nft add chain inet example_table example_chain { type filter hook input priority security \; policy accept \; }
Tabela 45.1. Nomes de prioridade padrão, família e matriz de compatibilidade de ganchos
Nome | Valor | Famílias | Anzóis |
---|---|---|---|
| -300 | | todos |
| -150 | | todos |
| -100 | | pré-encaminhamento |
| 0 | | todos |
| 50 | | todos |
| 100 | | pós-transplante |
Todas as famílias utilizam os mesmos valores, mas a família bridge
utiliza os seguintes valores:
Tabela 45.2. Nomes de prioridade padrão, e compatibilidade de ganchos para a família bridge
Nome | Valor | Anzóis |
---|---|---|
| -300 | pré-encaminhamento |
| -200 | todos |
| 100 | saída |
| 300 | pós-transplante |
Recursos adicionais
- Para obter detalhes sobre outras ações que você pode executar em cadeias, consulte a seção
Chains
na página de manualnft(8)
.
45.3.2. Exibição de conjuntos de regras nftables
Os conjuntos de regras do nftables
contêm
tabelas, correntes e regras. Esta seção explica como exibir esses conjuntos de regras.
Procedimento
Para exibir todos os conjuntos de regras, entre:
# nft list ruleset table inet example_table { chain example_chain { type filter hook input priority filter; policy accept; tcp dport http accept tcp dport ssh accept } }
Por padrão,
nftables
não pré-cria tabelas. Como conseqüência, exibindo a regra definida em um host sem nenhuma tabela, o comandonft list ruleset
não mostra nenhuma saída.
45.3.3. Criando uma tabela nftables
Uma tabela em nftables
é um espaço de nomes que contém uma coleção de correntes, regras, conjuntos e outros objetos. Esta seção explica como criar uma tabela.
Cada tabela deve ter uma família de endereços definida. A família de endereços de uma tabela define que tipos de endereços a tabela processa. Você pode definir uma das seguintes famílias de endereços ao criar uma tabela:
-
ip
: Combina somente pacotes IPv4. Este é o padrão se você não especificar uma família de endereços. -
ip6
: Combina apenas pacotes IPv6. -
inet
: Combina pacotes IPv4 e IPv6. -
arp
: Corresponde aos pacotes do protocolo de resolução de endereços IPv4 (ARP). -
bridge
: Combina pacotes que atravessam um dispositivo de ponte. -
netdev
: Combina pacotes de entrada.
Procedimento
Use o comando
nft add table
para criar uma nova tabela. Por exemplo, para criar uma tabela chamadaexample_table
que processa pacotes IPv4 e IPv6:# nft adicionar tabela inet exemplo_tabela
Opcionalmente, liste todas as tabelas do conjunto de regras:
# nft list tables table inet example_table
Recursos adicionais
- Para mais detalhes sobre famílias de endereços, consulte a seção
Address families
na página de manualnft(8)
. - Para detalhes sobre outras ações que você pode executar em tabelas, consulte a seção
Tables
na página de manualnft(8)
.
45.3.4. Criando uma cadeia nftables
As correntes são recipientes para regras. Existem os dois tipos de regras a seguir:
- Cadeia base: Você pode usar cadeias de base como um ponto de entrada para pacotes da pilha de rede.
- Corrente regular: Você pode usar correntes regulares como um alvo
jump
e para organizar melhor as regras.
O procedimento descreve como adicionar uma cadeia de base a uma tabela existente.
Pré-requisitos
- A tabela à qual se deseja acrescentar a nova cadeia existe.
Procedimento
Use o comando
nft add chain
para criar uma nova cadeia. Por exemplo, para criar uma cadeia chamadaexample_chain
emexample_table
:# nft add chain inet example_table example_chain { type filter hook input priority 0 {\i1}; policy accept {\i1}
Para evitar que a casca interprete os ponto-e-vírgula como o fim do comando, você deve escapar dos pontos-e-vírgula com uma barra invertida.
Esta corrente filtra os pacotes de entrada. O parâmetro
priority
especifica a ordem na qualnftables
processa cadeias com o mesmo valor de gancho. Um valor de prioridade mais baixo tem precedência sobre os mais altos. O parâmetropolicy
define a ação padrão para as regras nesta cadeia. Observe que se você estiver conectado remotamente ao servidor e definir a política padrão paradrop
, você será desconectado imediatamente se nenhuma outra regra permitir o acesso remoto.Opcionalmente, exibir todas as correntes:
# nft list chains table inet example_table { chain example_chain { type filter hook input priority filter; policy accept; } }
Recursos adicionais
- Para mais detalhes sobre famílias de endereços, consulte a seção
Address families
na página de manualnft(8)
. - Para obter detalhes sobre outras ações que você pode executar em cadeias, consulte a seção
Chains
na página de manualnft(8)
.
45.3.5. Adicionando uma regra a uma cadeia de nftables
Esta seção explica como adicionar uma regra a uma cadeia nftables
existente. Por padrão, o comando
nftables add rule
acrescenta uma nova regra ao final da cadeia.
Se você quiser inserir uma regra no início da cadeia, veja Seção 45.3.6, “Inserindo uma regra em uma cadeia de nftables”.
Pré-requisitos
- A cadeia à qual se deseja acrescentar a regra existe.
Procedimento
Para adicionar uma nova regra, use o comando
nft add rule
. Por exemplo, para adicionar uma regra aoexample_chain
noexample_table
que permite o tráfego TCP na porta 22:# nft adicionar regra inet example_table example_chain tcp dport 22 accept
Em vez do número da porta, você pode, alternativamente, especificar o nome do serviço. No exemplo, você poderia usar
ssh
em vez do número da porta22
. Observe que um nome de serviço é resolvido para um número de porta com base em sua entrada no arquivo/etc/services
.Opcionalmente, exibir todas as correntes e suas regras em
example_table
:# nft list table inet example_table table inet example_table { chain example_chain { type filter hook input priority filter; policy accept; ... tcp dport ssh accept } }
Recursos adicionais
- Para mais detalhes sobre famílias de endereços, consulte a seção
Address families
na página de manualnft(8)
. - Para detalhes sobre
outras ações que você pode executar sobre regras, consulte a seção
Rules
na página de manualnft(8)
.
45.3.6. Inserindo uma regra em uma cadeia de nftables
Esta seção explica como inserir uma regra no início de uma cadeia existente nftables
usando o comando nftables insert rule
. Se você quiser, ao invés disso, adicionar uma
regra ao final de uma cadeia, veja Seção 45.3.5, “Adicionando uma regra a uma cadeia de nftables”.
Pré-requisitos
- A cadeia à qual se deseja acrescentar a regra existe.
Procedimento
Para inserir uma nova regra, use o comando
nft insert rule
. Por exemplo, para inserir uma regra noexample_chain
noexample_table
que permite o tráfego TCP na porta 22:# nft inserir regra inet example_table example_chain tcp dport 22 accept
Você pode, alternativamente, especificar o nome do serviço em vez do número da porta. No exemplo, você poderia usar
ssh
ao invés do número da porta22
. Observe que um nome de serviço é resolvido para um número de porta com base em sua entrada no arquivo/etc/services
.Opcionalmente, exibir todas as correntes e suas regras em
example_table
:# nft list table inet example_table table inet example_table { chain example_chain { type filter hook input priority filter; policy accept; tcp dport ssh accept ... } }
Recursos adicionais
- Para mais detalhes sobre famílias de endereços, consulte a seção
Address families
na página de manualnft(8)
. - Para detalhes sobre outras ações que você pode executar sobre regras, consulte a seção
Rules
na página de manualnft(8)
.
45.4. Configuração de NAT usando nftables
Com nftables
, você pode configurar os seguintes tipos de tradução de endereços de rede (NAT):
- Mascarading
- Fonte NAT (SNAT)
- Destino NAT (DNAT)
45.4.1. Os diferentes tipos de NAT: mascaramento, NAT de origem e NAT de destino
Estes são os diferentes tipos de tradução de endereços de rede (NAT):
Mascaramento e fonte NAT (SNAT)
Use um desses tipos de NAT para alterar o endereço IP de origem dos pacotes. Por exemplo, os provedores de Internet não roteiam faixas
IP reservadas, tais como 10.0.0.0/8
. Se você utiliza faixas de IP reservadas em sua rede e os usuários devem ser capazes de alcançar servidores na Internet, mapeie o endereço IP de origem dos pacotes a partir dessas faixas para um endereço IP público.
Tanto o mascaramento quanto o SNAT são muito semelhantes. As diferenças são:
- O mascaramento utiliza automaticamente o endereço IP da interface de saída. Portanto, use o mascarading se a interface de saída usar um endereço IP dinâmico.
- SNAT define o endereço IP de origem dos pacotes para um IP especificado e não procura dinamicamente o IP da interface de saída. Portanto, o SNAT é mais rápido que o mascaramento. Use o SNAT se a interface de saída usar um endereço IP fixo.
45.4.2. Configuração de mascaramento usando nftables
O mascaramento permite que um roteador altere dinamicamente o IP de origem dos pacotes enviados através de uma interface para o endereço IP da
interface. Isto significa que se a interface recebe um novo IP atribuído, nftables
usa automaticamente o novo IP ao substituir o IP de origem.
O procedimento a seguir descreve como substituir o IP de origem dos pacotes que saem do host através da interface ens3
para o conjunto IP em ens3
.
Procedimento
Criar uma mesa:
# nft adicionar tabela nat
Acrescente as cadeias
prerouting
epostrouting
à tabela:# nft -- add chain nat prerouting { type nat hook prerouting priority -100 \; } # nft add chain nat postrouting { type nat hook postrouting priority 100 \; }
Mesmo que você não acrescente uma regra à cadeia
prerouting
, a estruturanftables
exige que esta cadeia corresponda às respostas dos pacotes recebidos.Observe que você deve passar a opção
--
para o comandonft
para evitar que o shell interprete o valor de prioridade negativa como uma opção do comandonft
.Adicione uma regra à cadeia
postrouting
que combine com os pacotes de saída na interfaceens3
:# nft add rule nat postrouting oifname"ens3" mascarada
45.4.3. Configuração da fonte NAT usando nftables
Em um roteador, Source NAT (SNAT) permite alterar o IP dos pacotes enviados através de uma interface para um endereço IP específico.
O procedimento a seguir descreve como substituir o IP de origem dos pacotes que deixam o roteador através da interface ens3
para 192.0.2.1
.
Procedimento
Criar uma mesa:
# nft adicionar tabela nat
Acrescente as cadeias
prerouting
epostrouting
à tabela:# nft -- add chain nat prerouting { type nat hook prerouting priority -100 \; } # nft add chain nat postrouting { type nat hook postrouting priority 100 \; }
Mesmo que você não acrescente uma regra à cadeia
postrouting
, a estruturanftables
exige que esta cadeia combine as respostas dos pacotes de saída.Observe que você deve passar a opção
--
para o comandonft
para evitar que o shell interprete o valor de prioridade negativa como uma opção do comandonft
.Adicione uma regra à cadeia
postrouting
que substitui o IP de origem dos pacotes de saída através deens3
por192.0.2.1
:# nft add rule nat postrouting oifname"ens3" snat to 192.0.2.1
45.4.4. Configuração do NAT de destino usando nftables
O NAT de destino permite redirecionar o tráfego em um roteador para um host que não é diretamente acessível a partir da Internet.
O procedimento a seguir descreve como
redirecionar o tráfego de entrada enviado para a porta 80
e 443
do roteador para o host com o endereço IP 192.0.2.1
.
Procedimento
Criar uma mesa:
# nft adicionar tabela nat
Acrescente as cadeias
prerouting
epostrouting
à tabela:# nft -- add chain nat prerouting { type nat hook prerouting priority -100 \; } # nft add chain nat postrouting { type nat hook postrouting priority 100 \; }
Mesmo que você não acrescente uma regra à cadeia
postrouting
, a estruturanftables
exige que esta cadeia combine as respostas dos pacotes de saída.Observe que você deve passar a opção
--
para o comandonft
para evitar que o shell interprete o valor de prioridade negativa como uma opção do comandonft
.Adicione uma regra à cadeia
prerouting
que redireciona o tráfego de entrada na interfaceens3
enviada para a porta80
e443
para o host com o IP192.0.2.1
:# nft adicionar regra nat prerouting iifname ens3 tcp dport { 80, 443 } dnat a 192.0.2.1
Dependendo de seu ambiente, adicione uma regra SNAT ou mascarada para alterar o endereço de origem:
Se a interface
ens3
utilizava endereços IP dinâmicos, acrescente uma regra de mascaramento:# nft adicionar regra nat postrouting oifname {\i1}"ens3} mascarada
Se a interface
ens3
usa um endereço IP estático, adicione uma regra SNAT. Por exemplo, se oens3
usa o endereço IP198.51.100.1
:nft adicionar a regra nat postrouting oifname {\i1}"ens3} snat a 198.51.100.1
45.5. Usando conjuntos em comandos nftables
A estrutura nftables
suporta nativamente conjuntos.
Você pode usar conjuntos, por exemplo, se uma regra deve corresponder a múltiplos endereços IP, números de porta, interfaces ou qualquer outro critério de correspondência.
45.5.1. Utilização de conjuntos anônimos em nftables
Um conjunto anônimo contém valores separados por vírgulas entre parênteses, como { 22, 80, 443 }
, que você usa diretamente em uma regra. Você também pode usar
conjuntos anônimos também para endereços IP ou qualquer outro critério de correspondência.
A desvantagem dos conjuntos anônimos é que, se você quiser mudar o conjunto, você deve substituir a regra. Para uma solução dinâmica, use os conjuntos nomeados como descrito em Seção 45.5.2, “Usando conjuntos nomeados em nftables”.
Pré-requisitos
- A cadeia
example_chain
e a tabelaexample_table
da famíliainet
existe.
Procedimento
Por exemplo, para adicionar uma regra a
example_chain
emexample_table
que permite o tráfego de entrada para a porta22
,80
e443
:# nft adicionar regra inet example_table example_chain tcp dport { 22, 80, 443 } aceitar
Opcionalmente, exibir todas as correntes e suas regras em
example_table
:# nft list table inet example_table table inet example_table { chain example_chain { type filter hook input priority filter; policy accept; tcp dport { ssh, http, https } accept } }
45.5.2. Usando conjuntos nomeados em nftables
A estrutura nftables
suporta conjuntos de nomes
mutáveis. Um conjunto nomeado é uma lista ou gama de elementos que você pode usar em múltiplas regras dentro de uma tabela. Outro benefício sobre os conjuntos anônimos é que você pode atualizar um conjunto nomeado sem substituir as regras que utilizam o conjunto.
Quando você cria um conjunto nomeado, você deve especificar o tipo de elementos que o conjunto contém. Você pode definir os seguintes tipos:
-
ipv4_addr
para um conjunto que contenha endereços ou faixas IPv4, como192.0.2.1
ou192.0.2.0/24
. -
ipv6_addr
para um conjunto que contenha endereços ou faixas IPv6, como2001:db8:1::1
ou2001:db8:1::1/64
. -
ether_addr
para um conjunto que contém uma lista de endereços de controle de acesso à mídia (MAC), tais como52:54:00:6b:66:42
. -
inet_proto
para um conjunto que contém uma lista de tipos de protocolos de Internet, comotcp
. -
inet_service
para um conjunto que contém uma lista de serviços de Internet, tais comossh
. -
mark
para um conjunto que contém uma lista de marcas de pacotes. As marcas de pacotes podem ser qualquer valor inteiro positivo de 32 bits (0
a2147483647
].
Pré-requisitos
- A cadeia
example_chain
e a tabelaexample_table
existem.
Procedimento
Criar um conjunto vazio. Os exemplos a seguir criam um conjunto para endereços IPv4:
Para criar um conjunto que possa armazenar múltiplos endereços IPv4 individuais:
# nft add set inet example_table example_set { type ipv4_addr }; }
Para criar um conjunto que possa armazenar faixas de endereços IPv4:
# nft add set inet example_table example_set { type ipv4_addr \; flags interval \; }
Para evitar que a casca interprete os ponto-e-vírgula como o fim do comando, você deve escapar dos pontos-e-vírgula com uma barra invertida.
Opcionalmente, criar regras que utilizem o conjunto. Por exemplo, o seguinte comando adiciona uma regra ao
example_chain
no siteexample_table
que irá descartar todos os pacotes de endereços IPv4 emexample_set
.# nft add rule inet example_table example_chain ip saddr @example_set drop
Como
example_set
ainda está vazio, a regra atualmente não tem efeito.Adicionar endereços IPv4 a
example_set
:Se você criar um conjunto que armazene endereços IPv4 individuais, entre:
# nft adicionar elemento inet example_table example_set { 192.0.2.1, 192.0.2.2 }
Se você criar um conjunto que armazene faixas IPv4, entre:
# nft adicionar elemento inet example_table example_set { 192.0.2.0-192.0.2.255 }
Quando você especifica uma faixa de endereços IP, você pode alternativamente usar a notação Classless Inter-Domain Routing (CIDR), como por exemplo
192.0.2.0/24
no exemplo acima.
45.6. Usando mapas de veredictos em comandos nftables
Os mapas verídicos, que também são conhecidos como dicionários, permitem que nft
execute uma ação baseada em informações de pacotes, mapeando critérios de correspondência a uma ação.
45.6.1. Usando mapas literais em nftables
Um mapa literal é um { match_criteria : action }
declaração de que você usa diretamente em uma regra. A declaração pode conter vários mapeamentos separados por vírgula.
A desvantagem de um mapa literal é que se você quiser mudar o mapa, você deve substituir a regra. Para uma solução dinâmica, use mapas de veredictos nomeados, como descrito em Seção 45.6.2, “Usando mapas de veredictos mutáveis em nftables”.
O exemplo descreve como usar um mapa literal para encaminhar tanto os pacotes TCP e UDP do protocolo IPv4 e IPv6 para diferentes cadeias a fim de contar separadamente os pacotes TCP e UDP que chegam.
Procedimento
Crie o
example_table
:# nft adicionar tabela inet exemplo_tabela
Criar a cadeia
tcp_packets
emexample_table
:# nft add chain inet exemplo_tabela tcp_packets
Adicione uma regra a
tcp_packets
que conta o tráfego nesta cadeia:# nft add rule inet example_table tcp_packets counter
Crie a cadeia
udp_packets
emexample_table
# nft add chain inet exemplo_tabela udp_packets
Adicione uma regra a
udp_packets
que conta o tráfego nesta cadeia:# nft add rule inet example_table udp_packets counter
Criar uma cadeia para o tráfego de entrada. Por exemplo, para criar uma cadeia chamada
incoming_traffic
emexample_table
que filtra o tráfego de entrada:# nft add chain inet example_table incoming_traffic { type filter hook input priority 0 { type filter hook input priority 0}; }
Adicione uma regra com um mapa literal a
incoming_traffic
:# nft add rule inet example_table incoming_traffic ip protocol vmap { tcp : jump tcp_packets, udp : jump udp_packets }
O mapa literal distingue os pacotes e os envia para as diferentes cadeias de contadores com base em seu protocolo.
Para listar os balcões de trânsito, exibir
example_table
:# nft list table inet example_table table inet example_table { chain tcp_packets { counter packets 36379 bytes 2103816 } chain udp_packets { counter packets 10 bytes 1559 } chain incoming_traffic { type filter hook input priority filter; policy accept; ip protocol vmap { tcp : jump tcp_packets, udp : jump udp_packets } } }
Os balcões da cadeia
tcp_packets
eudp_packets
exibem tanto o número de pacotes recebidos quanto o número de bytes.
45.6.2. Usando mapas de veredictos mutáveis em nftables
A estrutura nftables
suporta mapas de veredictos mutáveis. Você pode usar estes mapas em várias regras dentro de uma tabela. Outro benefício sobre os mapas literais é que você pode atualizar um mapa mutável sem substituir as regras que o utilizam.
Quando você cria um mapa de veredicto mutável, você deve especificar o tipo de elementos
-
ipv4_addr
para um mapa cuja parte correspondente contém um endereço IPv4, tal como192.0.2.1
. -
ipv6_addr
para um mapa cuja parte correspondente contém um endereço IPv6, tal como2001:db8:1::1
. -
ether_addr
para um mapa cuja parte correspondente contém um endereço de controle de acesso à mídia (MAC), tal como52:54:00:6b:66:42
. -
inet_proto
para um mapa cuja parte correspondente contém um tipo de protocolo Internet, tal comotcp
. -
inet_service
para um mapa cuja parte correspondente contém um número de porta do nome dos serviços da Internet, comossh
ou22
. -
mark
para um mapa cuja parte correspondente contém uma marca de pacote. Uma marca de pacote pode ser qualquer valor inteiro positivo de 32 bits (0
a2147483647
. -
counter
para um mapa cuja parte correspondente contém um contravalor. O valor do contador pode ser qualquer valor inteiro positivo de 64 bits. -
quota
para um mapa cuja parte correspondente contém um valor de cota. O valor da cota pode ser qualquer valor inteiro positivo de 64 bits.
O exemplo descreve como permitir ou largar pacotes de entrada com base em seu endereço IP de origem. Usando um mapa de veredicto mutável, é necessária apenas uma única regra para configurar este cenário enquanto os endereços IP e ações são armazenados dinamicamente no mapa. O procedimento também descreve como adicionar e remover entradas do mapa.
Procedimento
Criar uma mesa. Por exemplo, para criar uma tabela chamada
example_table
que processa pacotes IPv4:# nft adicionar tabela ip exemplo_tabela
Criar uma corrente. Por exemplo, para criar uma cadeia chamada
example_chain
emexample_table
:# nft add chain ip example_table example_chain { type filter hook input priority 0 {\i1}; {\i1}
Para evitar que a casca interprete os ponto-e-vírgula como o fim do comando, você deve escapar dos pontos-e-vírgula com uma barra invertida.
Criar um mapa vazio. Por exemplo, para criar um mapa para endereços IPv4:
# nft add map ip example_table example_map { type ipv4_addr : veredicto }
Criar regras que utilizem o mapa. Por exemplo, o seguinte comando adiciona uma regra a
example_chain
emexample_table
que aplica ações a endereços IPv4 que são ambos definidos emexample_map
:# nft add rule example_table example_chain ip saddr vmap @example_map
Adicionar endereços IPv4 e ações correspondentes a
example_map
:# nft adicionar elemento ip example_table example_map { 192.0.2.1 : aceitar, 192.0.2.2 : largar }
Este exemplo define os mapeamentos de endereços IPv4 para ações. Em combinação com a regra criada acima, o firewall aceita pacotes de
192.0.2.1
e deixa cair pacotes de192.0.2.2
.Opcionalmente, melhore o mapa adicionando outro endereço IP e declaração de ação:
# nft adicionar elemento ip example_table example_map { 192.0.2.3 : aceitar }
Opcionalmente, remova uma entrada do mapa:
# nft apagar elemento ip example_table example_map { 192.0.2.1 }
Opcionalmente, exibir o conjunto de regras:
# nft list ruleset table ip example_table { map example_map { type ipv4_addr : verdict elements = { 192.0.2.2 : drop, 192.0.2.3 : accept } } chain example_chain { type filter hook input priority filter; policy accept; ip saddr vmap @example_map } }
45.7. Configuração do encaminhamento de portas usando nftables
O redirecionamento de portas permite aos administradores encaminhar pacotes enviados a uma porta de destino específica para uma porta local ou remota diferente.
Por exemplo, se seu servidor web não tiver um endereço IP público, você pode definir uma regra de encaminhamento de porta em seu firewall que encaminha os pacotes recebidos na porta 80
e 443
no firewall para o servidor web. Com esta regra de firewall, os
usuários na Internet podem acessar o servidor web usando o IP ou o nome do host do firewall.
45.7.1. Encaminhamento de pacotes de entrada para uma porta local diferente
Esta seção descreve um exemplo de como encaminhar pacotes IPv4 recebidos na porta 8022
para a porta 22
no sistema local.
Procedimento
Criar uma tabela com o nome
nat
com a família de endereçosip
:# nft adicionar tabela ip nat
Acrescente as cadeias
prerouting
epostrouting
à tabela:# nft -- adicionar prerouting de corrente ip nat { tipo nat hook prerouting priority -100 }; { tipo nat hook prerouting priority -100 }; { tipo nat hook prerouting priority -100 }
Passe a opção
--
para o comandonft
para evitar que a casca interprete o valor de prioridade negativa como uma opção do comandonft
.Adicionar uma regra à cadeia
prerouting
que redireciona os pacotes recebidos na porta8022
para a porta local22
:# nft adicionar regra ip nat prerouting tcp dport 8022 redirecionar para :22
45.7.2. Encaminhamento de pacotes de entrada em uma porta local específica para um host diferente
Você pode usar uma regra de tradução de endereço de rede de destino (DNAT) para encaminhar pacotes de entrada em uma porta local para um host remoto. Isto permite aos usuários na Internet acessar um serviço que roda em um host com um endereço IP privado.
O procedimento descreve como encaminhar os pacotes IPv4 recebidos na porta local 443
para o mesmo número de porta no sistema remoto com o endereço IP 192.0.2.1
.
Pré-requisito
- Você está logado como o usuário
root
no sistema que deve encaminhar os pacotes.
Procedimento
Criar uma tabela com o nome
nat
com a família de endereçosip
:# nft adicionar tabela ip nat
Acrescente as cadeias
prerouting
epostrouting
à tabela:# nft -- add chain ip nat prerouting { type nat hook prerouting priority -100 \; } # nft add chain ip nat postrouting { type nat hook postrouting priority 100 \; }
Passe a opção
--
para o comandonft
para evitar que a casca interprete o valor de prioridade negativa como uma opção do comandonft
.Adicione uma regra à cadeia
prerouting
que redireciona os pacotes recebidos na porta443
para a mesma porta em192.0.2.1
:# nft adicionar regra ip nat prerouting tcp dport 443 dnat a 192.0.2.1
Adicione uma regra à cadeia
postrouting
para disfarçar o tráfego de saída:# nft adicionar regra ip daddr 192.0.2.1 mascarada
Habilitar o envio de pacotes:
# echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/95-IPv4-forwarding.conf # sysctl -p /etc/sysctl.d/95-IPv4-forwarding.conf
45.8. Utilização de nftables para limitar a quantidade de conexões
Você pode usar nftables
para limitar o número de conexões ou para bloquear endereços IP que tentam estabelecer uma determinada quantidade de conexões para evitar que elas usem muitos
recursos do sistema.
45.8.1. Limitando o número de conexões usando nftables
O parâmetro ct count
do utilitário nft
permite aos administradores limitar o número de conexões. O procedimento descreve um exemplo básico de como limitar as conexões de entrada.
Pré-requisitos
- A base
example_chain
emexample_table
existe.
Procedimento
Adicione uma regra que permite apenas duas conexões simultâneas à porta SSH (22) a partir de um endereço IPv4 e rejeita todas as outras conexões a partir do mesmo IP:
# nft add rule ip example_table example_chain tcp dport ssh meter example_meter { ip saddr ct count over 2 } counter reject
Opcionalmente, exibir o medidor criado na etapa anterior:
# nft list meter ip example_table example_meter table ip example_table { meter example_meter { type ipv4_addr size 65535 elements = { 192.0.2.1 : ct count over 2 , 192.0.2.2 : ct count over 2 } } }
A entrada
elements
exibe endereços que atualmente correspondem à regra. Neste exemplo,elements
lista os endereços IP que têm conexões ativas com a porta SSH. Observe que a saída não exibe o número de conexões ativas ou se as conexões foram rejeitadas.
45.8.2. Bloqueio de endereços IP que tentam mais de dez novas conexões TCP de entrada em um minuto
A estrutura nftables
permite que os
administradores atualizem dinamicamente os conjuntos. Esta seção explica como usar esta funcionalidade para bloquear temporariamente hosts que estão estabelecendo mais de dez conexões TCP IPv4 dentro de um minuto. Após cinco minutos, nftables
remove automaticamente o endereço IP da lista de negação.
Procedimento
Criar a tabela
filter
com a família de endereçosip
:# nft adicionar tabela ip filter
Acrescente a cadeia
input
à tabelafilter
:# nft add chain ip filter input { type filter hook input priority 0 { type hook input priority 0}; { type filter hook input priority 0}; { type filter hook input priority 0
Adicione um conjunto chamado
denylist
à tabelafilter
:# nft add set ip filter denylist { type ipv4_addr }; flags dynamic, timeout; timeout 5m; timeout
Este comando cria um conjunto dinâmico para endereços IPv4. O parâmetro
timeout 5m
define quenftables
remove automaticamente as entradas após 5 minutos do conjunto.Adicionar uma regra que automaticamente adiciona o endereço IP de origem dos hosts que tentam estabelecer mais de dez novas conexões TCP dentro de um minuto ao conjunto
denylist
:# nft add rule ip filter input ip protocol tcp ct state new, unracked limit rate over 10/minute add @denylist { ip saddr }
Acrescente uma regra que abandone todas as conexões de endereços IP no conjunto
denylist
:# nft add rule ip filter input ip saddr @denylist drop
45.9. Regras de depuração de nftables
A estrutura nftables
oferece diferentes opções para os administradores depurarem as regras e se os pacotes corresponderem a elas. Esta seção descreve estas opções.
45.9.1. Criando uma regra com um contador
Para identificar se uma regra é igualada, você pode usar um contador. Esta seção descreve como criar uma nova regra com um contador.
Para um procedimento que acrescenta um contrário a uma regra existente, ver Seção 45.9.2, “Adicionando um contador a uma regra existente”.
Pré-requisitos
- A cadeia à qual se deseja acrescentar a regra existe.
Procedimento
Adicione uma nova regra com o parâmetro
counter
à cadeia. O exemplo a seguir adiciona uma regra com um contador que permite o tráfego TCP na porta 22 e conta os pacotes e o tráfego que correspondem a esta regra:# nft adicionar regra inet example_table example_chain tcp dport 22 counter accept
Para exibir os valores do contador:
# nft list ruleset table inet example_table { chain example_chain { type filter hook input priority filter; policy accept; tcp dport ssh counter packets 6872 bytes 105448565 accept } }
45.9.2. Adicionando um contador a uma regra existente
Para identificar se uma regra é igualada, você pode usar um contador. Esta seção descreve como adicionar um contador a uma regra existente.
Para um procedimento para adicionar uma nova regra com um contador, ver Seção 45.9.1, “Criando uma regra com um contador”.
Pré-requisitos
- A regra à qual se deseja acrescentar o contador existe.
Procedimento
Mostrar as regras da corrente incluindo seus cabos:
# nft --handle list chain inet example_table example_chain table inet example_table { chain example_chain { # handle 1 type filter hook input priority filter; policy accept; tcp dport ssh accept # handle 4 } }
Adicione o contador substituindo a regra, mas com o parâmetro
counter
. O exemplo a seguir substitui a regra exibida na etapa anterior e adiciona um contador:# nft replace rule inet example_table example_chain handle 4 tcp dport 22 counter accept
-
Para exibir os valores do contador:
# nft list ruleset table inet example_table { chain example_chain { type filter hook input priority filter; policy accept; tcp dport ssh counter packets 6872 bytes 105448565 accept } }
45.9.3. Pacotes de monitoramento que correspondem a uma regra existente
O recurso de rastreamento em nftables
em combinação com o comando nft monitor
permite que os administradores exibam pacotes que correspondem a uma regra. O procedimento descreve como permitir o rastreamento de uma regra, bem como o
monitoramento de pacotes que correspondam a esta regra.
Pré-requisitos
- A regra à qual se deseja acrescentar o contador existe.
Procedimento
Mostrar as regras da corrente incluindo seus cabos:
# nft --handle list chain inet example_table example_chain table inet example_table { chain example_chain { # handle 1 type filter hook input priority filter; policy accept; tcp dport ssh accept # handle 4 } }
Adicione o recurso de rastreamento substituindo a regra, mas com os parâmetros
meta nftrace set 1
. O exemplo a seguir substitui a regra exibida na etapa anterior e permite o rastreamento:# nft replace rule inet example_table example_chain handle 4 tcp dport 22 meta nftrace set 1 accept
Use o comando
nft monitor
para exibir o rastreamento. O seguinte exemplo filtra a saída do comando para exibir somente as entradas que contenhaminet example_table example_chain
:# nft monitor | grep "inet example_table example_chain" trace id 3c5eb15e inet example_table example_chain packet: iif "enp1s0" ether saddr 52:54:00:17:ff:e4 ether daddr 52:54:00:72:2f:6e ip saddr 192.0.2.1 ip daddr 192.0.2.2 ip dscp cs0 ip ecn not-ect ip ttl 64 ip id 49710 ip protocol tcp ip length 60 tcp sport 56728 tcp dport ssh tcp flags == syn tcp window 64240 trace id 3c5eb15e inet example_table example_chain rule tcp dport ssh nftrace set 1 accept (verdict accept) ...
Dependendo do número de regras com rastreamento habilitado e da quantidade de tráfego correspondente, o comando
nft monitor
pode exibir uma grande quantidade de resultados. Usegrep
ou outras utilidades para filtrar a saída.
45.10. Apoio e restauração dos conjuntos de regras nftables
Esta seção descreve como fazer backup das regras nftables
em um arquivo, assim como restaurar as regras de um arquivo.
Os administradores podem usar um arquivo com as regras para, por exemplo, transferir as regras para um servidor diferente.
45.10.1. Cópia de segurança dos conjuntos de regras nftables para um arquivo
Esta seção descreve como fazer backup do conjunto de regras nftables
para um arquivo.
Procedimento
Para fazer backup das regras
nftables
:No formato
nft list ruleset
:# nft list ruleset > file.nft
No formato JSON:
# nft -j list ruleset > file.json
45.10.2. Restauração de conjuntos de regras nftables a partir de um arquivo
Esta seção descreve como restaurar os conjuntos de regras nftables
.
Procedimento
Para restaurar as regras do
nftables
:Se o arquivo a ser restaurado estiver no formato
nft list ruleset
ou contiver comandosnft
:# nft -f file.nft
Se o arquivo a ser restaurado estiver no formato JSON:
# nft -j -f file.json
Capítulo 46. Usando o xdp-filter para filtragem de tráfego de alto desempenho para evitar ataques DDoS
Comparado aos filtros de
pacotes, como nftables
, o Express Data Path (XDP) processa e descarrega os pacotes da rede diretamente na interface da rede. Portanto, o XDP determina o próximo passo para o pacote antes que ele chegue a um firewall ou outras aplicações. Como resultado, os filtros XDP requerem menos recursos e podem processar pacotes de rede a uma taxa muito maior do que os filtros de pacotes convencionais para se defender contra ataques de Negação de Serviço Distribuída (DDoS). Por exemplo, durante os testes, a
Red Hat caiu 26 milhões de pacotes de rede por segundo em um único núcleo, o que é significativamente maior do que a taxa de queda de nftables
no mesmo hardware.
O utilitário xdp-filter
permite ou deixa cair os pacotes de rede que chegam usando XDP. Você pode criar regras para filtrar o tráfego de ou para o específico:
- Endereços IP
- Endereços MAC
- Portos
Note que, mesmo que xdp-filter
tenha uma taxa significativamente maior
de processamento de pacotes, ele não tem as mesmas capacidades que, por exemplo, nftables
. Considere xdp-filter
uma utilidade conceitual para demonstrar a filtragem de pacotes usando o XDP. Além disso, você pode usar o código do utilitário para uma melhor compreensão de como escrever suas próprias aplicações XDP.
A Red Hat fornece o utilitário xdp-filter
como uma prévia tecnológica não suportada.
46.1. Eliminação de pacotes de rede que correspondem a uma regra do filtro de xdp
Esta seção descreve como usar xdp-filter
para soltar pacotes de rede:
- Para um porto de destino específico
- A partir de um endereço IP específico
- A partir de um endereço MAC específico
A política allow
de xdp-filter
define que todo o tráfego é permitido e o filtro deixa cair apenas os pacotes de rede que correspondem a uma determinada regra. Por exemplo, use este método se você souber os endereços IP de origem dos pacotes que você deseja descartar.
Pré-requisitos
- O pacote
xdp-tools
está instalado. - Um driver de rede que suporta programas XDP.
Procedimento
Carregar
xdp-filter
para processar os pacotes recebidos em uma determinada interface, comoenp1s0
:#
xdp-filter load enp1s0
Por padrão,
xdp-filter
usa a políticaallow
, e a concessionária só deixa cair o tráfego que corresponde a qualquer regra.Opcionalmente, use o
-f feature
opção para ativar apenas características particulares, tais comotcp
,ipv4
, ouethernet
. O carregamento apenas das características exigidas em vez de todas elas aumenta a velocidade de processamento da embalagem. Para habilitar múltiplas características, separá-las com uma vírgula.Se o comando falhar com um erro, o driver da rede não suporta programas XDP.
Acrescentar regras para deixar cair pacotes que correspondam a elas. Por exemplo:
Para deixar os pacotes recebidos na porta
22
, entre:#
xdp-filter port 22
Este comando acrescenta uma regra que combina com o tráfego TCP e UDP. Para corresponder apenas a um determinado protocolo, use o
-p protocol
opção.Para soltar os pacotes recebidos de
192.0.2.1
, entre:#
xdp-filter ip 192.0.2.1 -m src
Note que
xdp-filter
não suporta faixas de IP.Para soltar os pacotes recebidos do endereço MAC
00:53:00:AA:07:BE
, entre:#
xdp-filter ether 00:53:00:AA:07:BE -m src
Etapas de verificação
Use o seguinte comando para exibir estatísticas sobre pacotes descartados e permitidos:
#
xdp-filter status
Recursos adicionais
- Para mais detalhes sobre
xdp-filter
, consulte a página de manualxdp-filter(8)
. - Se você é um desenvolvedor e está interessado no código de
xdp-filter
, baixe e instale o RPM (SRPM) de origem correspondente no Portal do Cliente da Red Hat.
46.2. Soltar todos os pacotes de rede, exceto os que correspondem a uma regra do filtro xdp
Esta seção descreve como usar xdp-filter
para permitir apenas os pakets de rede:
- De e para um porto de destino específico
- De e para um endereço IP específico
- De e para o endereço MAC específico
Para isso, utilize a política deny
de xdp-filter
, que define que o filtro deixa cair todos os pacotes de rede, exceto aqueles que
correspondem a uma determinada regra. Por exemplo, use este método se você não souber os endereços IP de origem dos pacotes que você deseja descartar.
Se você definir a política padrão para deny
ao carregar xdp-filter
em uma interface, o kernel imediatamente deixa cair todos os pacotes desta interface até que você crie regras que permitam certo tráfego. Para evitar ser bloqueado fora do sistema, digite os comandos localmente ou conecte-se através de uma interface de rede diferente
com o host.
Pré-requisitos
- O pacote
xdp-tools
está instalado. - Você está logado no host localmente ou usando uma interface de rede para a qual você não planeja filtrar o tráfego.
- Um driver de rede que suporta programas XDP.
Procedimento
Carregue
xdp-filter
para processar pacotes em uma determinada interface, comoenp1s0
:#
xdp-filter load enp1s0 -p deny
Opcionalmente, use o
-f feature
opção para ativar apenas características particulares, tais comotcp
,ipv4
, ouethernet
. O carregamento apenas das características exigidas em vez de todas elas aumenta a velocidade de processamento da embalagem. Para habilitar múltiplas características, separá-las com uma vírgula.Se o comando falhar com um erro, o driver da rede não suporta programas XDP.
Adicionar regras para permitir pacotes que correspondam a elas. Por exemplo:
Para permitir pacotes de e para a porta
22
, entre:#
xdp-filter port 22
Este comando acrescenta uma regra que combina com o tráfego TCP e UDP. Para corresponder apenas a um determinado protocolo, passe o
-p protocol
opção para o comando.Para permitir pacotes de e para
192.0.2.1
, entre:#
xdp-filter ip 192.0.2.1
Note que
xdp-filter
não suporta faixas de IP.Para permitir pacotes de e para o endereço MAC
00:53:00:AA:07:BE
, entre:#
xdp-filter ether 00:53:00:AA:07:BE
A utilidade
xdp-filter
não suporta a inspeção estadual de pacotes. Isto requer que você não defina um modo usando o-m mode
ou você adiciona regras explícitas para permitir o tráfego de entrada que a máquina recebe em resposta ao tráfego de saída.
Etapas de verificação
Use o seguinte comando para exibir estatísticas sobre pacotes descartados e permitidos:
#
xdp-filter status
Recursos adicionais
- Para mais detalhes sobre
xdp-filter
, consulte a página de manualxdp-filter(8)
. - Se você é um desenvolvedor e está interessado no código de
xdp-filter
, baixe e instale o RPM (SRPM) de origem correspondente no Portal do Cliente da Red Hat.
Capítulo 47. Começando com DPDK
O Data Plane Development Kit (DPDK) fornece bibliotecas e drivers de rede para acelerar o processamento de pacotes no espaço do usuário.
Os administradores usam DPDK, por exemplo, em máquinas virtuais para usar a Virtualização de E/S de raiz única (SR-IOV) para reduzir as latências e aumentar a produção de E/S.
A Red Hat não suporta APIs DPDK experimentais.
47.1. Instalando o pacote dpdk
Esta
seção descreve como instalar o pacote dpdk
.
Pré-requisitos
- O Red Hat Enterprise Linux está instalado.
- Uma assinatura válida é designada para o anfitrião.
Procedimento
Use o utilitário
yum
para instalar o pacotedpdk
:# yum instalar dpdk
Capítulo 48. Entendendo as características da rede eBPF na RHEL
O Filtro de Pacotes Berkeley estendido (eBPF) é uma máquina virtual no kernel que permite a execução do código no espaço do kernel. Este código é executado em um ambiente restrito de sandbox com acesso apenas a um conjunto limitado de funções.
Em rede, você pode usar o eBPF para complementar ou substituir o processamento de pacotes de kernel. Dependendo do gancho usado, os programas eBPF têm, por exemplo:
- Acesso de leitura e escrita aos dados e metadados dos pacotes
- Pode procurar soquetes e rotas
- Pode definir opções de soquetes
- Pode redirecionar pacotes
48.1. Visão geral das características de rede eBPF na RHEL
Você pode anexar programas ampliados de rede Berkeley Paket Filter (eBPF) aos seguintes ganchos no RHEL:
- eXpress Data Path (XDP): Fornece acesso antecipado aos pacotes recebidos antes que a pilha do kernel em rede os processe.
-
tc
Classificador eBPF com bandeira de ação direta: Fornece um poderoso processamento de pacotes na entrada e na saída. - Grupos de controle versão 2 (cgroup v2): Permite filtrar e sobrepor operações baseadas em soquetes realizadas por programas em um grupo de controle.
- Filtragem de soquetes: Permite a filtragem de pacotes recebidos de soquetes. Esta característica também estava disponível no clássico Berkeley Packet Filter (cBPF), mas foi estendida para suportar programas eBPF.
- Stream parser: Permite dividir os fluxos em mensagens individuais, filtrá-las e redirecioná-las para soquetes.
-
SO_REUSEPORT
seleção do soquete: Fornece uma seleção programável de um soquete receptor de um grupo de soquetesreuseport
. - Dissecador de fluxo: Permite anular o modo como os cabeçalhos de pacotes de análise do núcleo em determinadas situações.
- Controle de congestionamento TCP: Permite a implementação de um algoritmo personalizado de controle de congestionamento TCP.
- Rotas com encapsulamento: Permite criar encapsulamento personalizado de túneis.
Note que a Red Hat não suporta todas as funcionalidades do eBPF que estão disponíveis no RHEL e descritas aqui. Para mais detalhes e o status de suporte dos ganchos individuais, consulte as Notas de Lançamento do RHEL 8 e a seguinte visão geral.
XDP
Você pode anexar programas do tipo BPF_PROG_TYPE_XDP
a uma interface de rede. O kernel então executa o programa nos pacotes recebidos antes que a pilha de rede do kernel
comece a processá-los. Isto permite o encaminhamento rápido de pacotes em determinadas situações, tais como queda rápida de pacotes para evitar ataques de Negação de Serviço Distribuída (DDoS) e redirecionamentos rápidos de pacotes para cenários de balanceamento de carga.
Você também pode usar o XDP para diferentes formas de monitoramento e amostragem de pacotes. O kernel permite que os programas XDP modifiquem os pacotes e os passem para processamento posterior na pilha de rede do kernel.
Os seguintes modos XDP estão disponíveis:
- Nativo (motorista) XDP: O kernel executa o programa a partir do ponto mais próximo possível durante a recepção do pacote. Neste momento, o kernel não analisou o pacote e, portanto, nenhum metadado fornecido pelo kernel está disponível. Este modo requer que o driver da interface de rede suporte XDP, mas nem todos os drivers suportam este modo nativo.
- Genéricos XDP: A pilha de rede do núcleo executa o programa XDP no início do processamento. Naquele momento, as estruturas de dados do kernel foram alocadas, e o pacote foi pré-processado. Se um pacote deve ser descartado ou redirecionado, ele requer uma sobrecarga significativa em comparação com o modo nativo. Entretanto, o modo genérico não requer suporte de driver de interface de rede e funciona com todas as interfaces de rede.
- XDP descarregado: O kernel executa o programa XDP na interface de rede ao invés de na CPU do host. Note que isto requer hardware específico, e somente certas características do eBPF estão disponíveis neste modo.
Na RHEL, carregue todos os programas XDP usando a biblioteca libxdp
. Esta biblioteca permite o uso controlado pelo sistema do XDP.
Atualmente, há algumas limitações na configuração do sistema para programas XDP. Por exemplo, é necessário desativar certos recursos de descarregamento de hardware na interface de recepção. Além disso, nem todas as características estão disponíveis com todos os drivers que suportam o modo nativo.
No RHEL 8.3, a Red Hat suporta o recurso XDP somente se todas as seguintes condições se aplicarem:
- Você carrega o programa XDP em uma arquitetura AMD ou Intel de 64 bits.
- Você usa a biblioteca
libxdp
para carregar o programa no kernel. - O programa XDP utiliza um dos seguintes códigos de retorno:
XDP_ABORTED
,XDP_DROP
, ouXDP_PASS
. - O programa XDP não utiliza a descarga de hardware XDP.
Além disso, a Red Hat fornece o seguinte uso das características do XDP como uma visualização tecnológica não suportada:
- Carregamento de programas XDP em arquiteturas que não AMD e Intel 64 bits. Note que a biblioteca
libxdp
não está disponível para outras arquiteturas que não AMD e Intel 64 bits. - Os códigos de retorno
XDP_TX
eXDP_REDIRECT
. - A descarga de hardware do XDP.
AF_XDP
Usando um programa XDP que filtra e redireciona os pacotes para um determinado soquete AF_XDP
, você pode usar um ou mais soquetes da família de protocolos AF_XDP
para copiar rapidamente os pacotes do kernel para o espaço do usuário.
No RHEL 8.3, a Red Hat fornece esta característica como uma prévia tecnológica não suportada.
Controle de tráfego
O subsistema de Controle de Tráfego (tc
) oferece os
seguintes tipos de programas de eBPF:
-
BPF_PROG_TYPE_SCHED_CLS
-
BPF_PROG_TYPE_SCHED_ACT
Estes tipos permitem escrever classificadores personalizados tc
e ações tc
no eBPF. Juntamente com as partes do ecossistema tc
, isto proporciona a capacidade de processamento poderoso de pacotes e é a parte central de várias soluções de orquestração em rede de contêineres.
Na maioria dos casos, somente o classificador é usado, como com a bandeira de ação
direta, o classificador eBPF pode executar ações diretamente do mesmo programa eBPF. A Disciplina de Enfileiramento clsact
(qdisc
) foi projetada para permitir isso no lado da entrada.
Note que o uso de um programa de dissecador de fluxo eBPF pode influenciar a operação de alguns outros classificadores qdiscs
e tc
, tais como flower
.
O recurso eBPF para tc
é totalmente suportado no RHEL 8.2 e posteriores.
Filtro de soquetes
Vários utilitários usam ou já usaram o clássico Berkeley Packet Filter (cBPF) para filtrar os pacotes recebidos em um soquete. Por exemplo, o utilitário tcpdump
permite que o usuário especifique expressões, que tcpdump
então se traduz em código cBPF.
Como alternativa ao cBPF, o kernel permite programas eBPF do tipo BPF_PROG_TYPE_SOCKET_FILTER
para o mesmo propósito.
No RHEL 8.3, a Red Hat fornece esta característica como uma prévia tecnológica não suportada.
Grupos de controle
Na RHEL, você pode usar vários tipos de programas eBPF que você pode anexar a um cgroup. O kernel executa estes programas quando um programa no cgroup em questão executa uma operação. Note que você pode usar apenas a versão 2 do cgroups.
Os seguintes programas de cgroup eBPF relacionados à rede estão disponíveis na RHEL:
-
BPF_PROG_TYPE_SOCK_OPS
: O kernel chama este programa durante um TCPconnect
e permite a configuração de operações TCP por soquete. -
BPF_PROG_TYPE_CGROUP_SOCK_ADDR
: O kernel chama este programa duranteconnect
,bind
,sendto
, erecvmsg
operações. Este programa permite a mudança de endereços IP e portas. -
BPF_PROG_TYPE_CGROUP_SOCKOPT
: O kernel chama este programa durante as operações emsetsockopt
egetsockopt
e permite mudar as opções. -
BPF_PROG_TYPE_CGROUP_SOCK
: O kernel chama este programa durante a criação de soquetes e a vinculação a endereços. Você pode usar estes programas para permitir ou negar a operação, ou apenas para inspecionar a criação de soquetes para estatísticas. -
BPF_PROG_TYPE_CGROUP_SKB
: Este programa filtra pacotes individuais na entrada e na saída, e pode aceitar ou rejeitar pacotes. -
BPF_PROG_TYPE_CGROUP_SYSCTL
: Este programa permite a filtragem do acesso aos controles do sistema (sysctl
).
No RHEL 8.3, a Red Hat fornece esta característica como uma prévia tecnológica não suportada.
Stream Parser
Um analisador de fluxo opera em um grupo de tomadas que são adicionadas a um mapa especial de eBPF. O programa eBPF processa então os pacotes que o kernel recebe ou envia nesses soquetes.
Os seguintes programas de análise de fluxos eBPF estão disponíveis na RHEL:
-
BPF_PROG_TYPE_SK_SKB
: Um programa eBPF analisa os pacotes recebidos do soquete em mensagens individuais, e instrui o kernel a soltar essas mensagens ou enviá-las para outro soquete do grupo. -
BPF_PROG_TYPE_SK_MSG
: Este programa filtra as mensagens de saída. Um programa eBPF analisa os pacotes em mensagens individuais e os aprova ou rejeita.
No RHEL 8.3, a Red Hat fornece esta característica como uma prévia tecnológica não suportada.
SO_REUSEPORT seleção de soquetes
Usando esta opção de soquete, você pode ligar vários soquetes ao mesmo endereço IP e porta. Sem o eBPF, o kernel seleciona o soquete receptor com base em um hash de conexão. Com o programa BPF_PROG_TYPE_SK_REUSEPORT
, a seleção do soquete receptor é totalmente
programável.
No RHEL 8.3, a Red Hat fornece esta característica como uma prévia tecnológica não suportada.
Dissecador de fluxo
Quando o kernel precisa processar cabeçalhos de pacotes sem passar pela decodificação do protocolo completo, eles são dissected
. Por exemplo, isto acontece no subsistema tc
, em roteamento multipath, em bonding, ou ao calcular um hash de pacote. Nesta situação o kernel analisa os cabeçalhos dos pacotes e preenche as
estruturas internas com as informações dos cabeçalhos dos pacotes. Você pode substituir este analisador interno usando o programa BPF_PROG_TYPE_FLOW_DISSECTOR
. Note que você só pode dissecar TCP e UDP sobre IPv4 e IPv6 no eBPF no RHEL.
No RHEL 8.3, a Red Hat fornece esta característica como uma prévia tecnológica não suportada.
Controle de Congestionamento TCP
Você pode escrever um algoritmo de controle de congestionamento TCP personalizado usando um grupo de
programas BPF_PROG_TYPE_STRUCT_OPS
que implementam struct tcp_congestion_oops
callbacks. Um algoritmo que é implementado desta forma está disponível para o sistema junto com os algoritmos de kernel embutidos.
No RHEL 8.3, a Red Hat fornece esta característica como uma prévia tecnológica não suportada.
Rotas com encapsulamento
Você pode anexar um dos seguintes tipos de programa eBPF a rotas na tabela de rotas como um atributo de encapsulamento de túnel:
-
BPF_PROG_TYPE_LWT_IN
-
BPF_PROG_TYPE_LWT_OUT
-
BPF_PROG_TYPE_LWT_XMIT
A funcionalidade de tal programa eBPF é limitada a configurações específicas de túneis e não permite criar uma solução genérica de encapsulamento ou decapsulamento.
No RHEL 8.3, a Red Hat fornece esta característica como uma prévia tecnológica não suportada.
Capítulo 49. Rastreamento de rede usando a coleção de compiladores BPF
Esta seção explica o que é a Coleção de Compiladores BPF (BCC), como instalar o BCC, bem como realizar diferentes operações de rastreamento de rede usando os scripts pré-criados fornecidos pelo pacote bcc-tools
. Todos estes scripts suportam o parâmetro --ebpf
para exibir o código eBPF que o utilitário carrega para o kernel. Você pode usar o código para aprender mais sobre como escrever scripts eBPF.
49.1. Uma introdução ao BCC
BPF Compiler Collection (BCC) é uma biblioteca, que facilita a criação dos programas ampliados de Filtro de Pacotes Berkeley (eBPF). A principal utilidade dos programas eBPF é analisar o desempenho do sistema operacional e o desempenho da rede sem ter problemas de overhead ou de segurança.
BCC elimina a necessidade de os usuários conhecerem detalhes técnicos
profundos do eBPF, e fornece muitos pontos de partida prontos para uso, tais como o pacote bcc-tools
com programas eBPF pré-criados.
Os programas eBPF são acionados em eventos, tais como E/S de disco, conexões TCP e criações de processo. É improvável que os programas causem o colapso, loop ou tornem-se insensíveis por funcionarem em uma máquina virtual segura no kernel.
49.2. Instalando o pacote bcc-tools
Esta seção descreve como instalar o pacote bcc-tools
, que também instala a biblioteca BPF Compiler Collection (BCC) como uma dependência.
Procedimento
Instale
bcc-tools
:#
yum install bcc-tools
As ferramentas BCC estão instaladas no diretório
/usr/share/bcc/tools/
.Opcionalmente, inspecionar as ferramentas:
#
ll /usr/share/bcc/tools/
... -rwxr-xr-x. 1 root root 4198 Dec 14 17:53 dcsnoop -rwxr-xr-x. 1 root root 3931 Dec 14 17:53 dcstat -rwxr-xr-x. 1 root root 20040 Dec 14 17:53 deadlock_detector -rw-r--r--. 1 root root 7105 Dec 14 17:53 deadlock_detector.c drwxr-xr-x. 3 root root 8192 Mar 11 10:28 doc -rwxr-xr-x. 1 root root 7588 Dec 14 17:53 execsnoop -rwxr-xr-x. 1 root root 6373 Dec 14 17:53 ext4dist -rwxr-xr-x. 1 root root 10401 Dec 14 17:53 ext4slower ...O diretório
doc
na lista acima contém documentação para cada ferramenta.
49.3. Exibição das conexões TCP adicionadas à fila de aceitação do Kernel
Após o kernel receber o pacote ACK
em um aperto de mão TCP de 3 vias, o kernel move a conexão da fila SYN
para a
fila accept
depois que o estado da conexão muda para ESTABLISHED
. Portanto, somente as conexões TCP bem sucedidas são visíveis nesta fila.
O utilitário tcpaccept
usa os recursos do eBPF para exibir todas as conexões que o kernel adiciona à fila accept
. O utilitário é leve porque rastreia a função accept()
do kernel em vez de capturar os pacotes e filtrá-los. Por exemplo, use tcpaccept
para solução de problemas gerais para exibir as novas conexões que o servidor aceitou.
Procedimento
Digite o seguinte comando para iniciar o rastreamento do kernel
accept
fila:# /usr/share/bcc/tools/tcpaccept PID COMM IP RADDR RPORT LADDR LPORT 843 sshd 4 192.0.2.17 50598 192.0.2.1 22 1107 ns-slapd 4 198.51.100.6 38772 192.0.2.1 389 1107 ns-slapd 4 203.0.113.85 38774 192.0.2.1 389 ...
Cada vez que o núcleo aceita uma conexão,
tcpaccept
exibe os detalhes das conexões.- Pressione Ctrl C para interromper o processo de rastreamento.
Recursos adicionais
- Para mais detalhes, consulte a página de manual
tcpaccept(8)
. - Para mais
detalhes sobre
tcpaccept
e exemplos, veja o arquivo/usr/share/bcc/tools/doc/tcpaccept_example.txt
. - Para exibir o script eBPF
tcpaccept8)
uploads para o kernel, use o comando/usr/share/bcc/tools/tcpaccept --ebpf
.
49.4. Rastreamento de tentativas de conexão TCP de saída
O utilitário tcpconnect
usa recursos do eBPF para rastrear tentativas de conexão TCP de saída. A saída do utilitário também
inclui conexões que falharam.
O utilitário tcpconnect
é leve porque traça, por exemplo, a função connect() do kernel em vez de capturar os pacotes e filtrá-los.
Procedimento
Digite o seguinte comando para iniciar o processo de rastreamento que exibe todas as conexões de saída:
# /usr/share/bcc/tools/tcpconnect PID COMM IP SADDR DADDR DPORT 31346 curl 4 192.0.2.1 198.51.100.16 80 31348 telnet 4 192.0.2.1 203.0.113.231 23 31361 isc-worker00 4 192.0.2.1 192.0.2.254 53 ...
Cada vez que o núcleo processa uma conexão de saída,
tcpconnect
exibe os detalhes das conexões.- Pressione Ctrl C para interromper o processo de rastreamento.
Recursos adicionais
- Para mais detalhes, consulte a página de manual
tcpconnect(8)
. - Para mais detalhes sobre
tcpconnect
e exemplos, veja o arquivo/usr/share/bcc/tools/doc/tcpconnect_example.txt
. - Para exibir o script eBPF
tcpconnect(8)
uploads para o kernel, use o comando/usr/share/bcc/tools/tcpconnect --ebpf
.
49.5. Medindo a latência das conexões TCP de saída
A latência da conexão TCP é o tempo necessário para estabelecer uma conexão. Isto normalmente envolve o processamento TCP/IP do kernel e o tempo de viagem de ida e volta da rede, e não o tempo de execução da aplicação.
O utilitário tcpconnlat
usa recursos do eBPF para medir o tempo entre um pacote
SYN
enviado e o pacote de resposta recebida.
Procedimento
Comece a medir a latência das conexões de saída:
# /usr/share/bcc/tools/tcpconnlat PID COMM IP SADDR DADDR DPORT LAT(ms) 32151 isc-worker00 4 192.0.2.1 192.0.2.254 53 0.60 32155 ssh 4 192.0.2.1 203.0.113.190 22 26.34 32319 curl 4 192.0.2.1 198.51.100.59 443 188.96 ...
Cada vez que o kernel processa uma conexão de saída,
tcpconnlat
exibe os detalhes da conexão depois que o kernel recebe o pacote de resposta.- Pressione Ctrl C para interromper o processo de rastreamento.
Recursos adicionais
- Para mais detalhes, consulte a página de manual
tcpconnlat(8)
. - Para mais detalhes sobre
tcpconnlat
e exemplos, veja o arquivo/usr/share/bcc/tools/doc/tcpconnlat_example.txt
. - Para exibir o script eBPF
tcpconnlat(8)
uploads para o kernel, use o comando/usr/share/bcc/tools/tcpconnlat --ebpf
.
49.6. Exibindo detalhes sobre pacotes TCP e segmentos que foram descartados pelo kernel
O utilitário tcpdrop
permite aos administradores exibir detalhes sobre pacotes TCP e segmentos que foram descartados pelo kernel. Use este utilitário para depurar altas taxas de pacotes descartados que podem fazer com que o sistema remoto envie retransmissões baseadas em temporizadores. Altas taxas de pacotes e segmentos descartados podem impactar o desempenho de um servidor.
Em vez de capturar e filtrar pacotes, que
consome muitos recursos, o utilitário tcpdrop
usa recursos do eBPF para recuperar as informações diretamente do kernel.
Procedimento
Digite o seguinte comando para começar a exibir detalhes sobre pacotes e segmentos TCP descartados:
# /usr/share/bcc/tools/tcpdrop TIME PID IP SADDR:SPORT > DADDR:DPORT STATE (FLAGS) 13:28:39 32253 4 192.0.2.85:51616 > 192.0.2.1:22 CLOSE_WAIT (FIN|ACK) b'tcp_drop+0x1' b'tcp_data_queue+0x2b9' ... 13:28:39 1 4 192.0.2.85:51616 > 192.0.2.1:22 CLOSE (ACK) b'tcp_drop+0x1' b'tcp_rcv_state_process+0xe2' ...
Cada vez que o kernel deixa cair pacotes TCP e segmentos,
tcpdrop
exibe os detalhes da conexão, incluindo o traço da pilha do kernel que levou ao pacote deixado cair.- Pressione Ctrl C para interromper o processo de rastreamento.
Recursos adicionais
- Para mais detalhes, consulte a página de manual
tcpdrop(8)
. - Para mais detalhes sobre
tcpdrop
e exemplos, veja o arquivo/usr/share/bcc/tools/doc/tcpdrop_example.txt
. - Para exibir o script eBPF
tcpdrop(8)
uploads para o kernel, use o comando/usr/share/bcc/tools/tcpdrop --ebpf
.
49.7. Rastreamento de sessões TCP
O utilitário tcplife
utiliza o eBPF para rastrear sessões TCP que abrem e fecham, e imprime uma linha de saída para resumir cada uma delas. Os administradores podem usar tcplife
para identificar as conexões e a quantidade de tráfego transferido.
O exemplo nesta seção descreve como exibir as conexões à porta 22
(SSH) para recuperar as
seguintes informações:
- O ID do processo local (PID)
- O nome do processo local
- O endereço IP local e o número da porta
- O endereço IP remoto e o número da porta
- A quantidade de tráfego recebido e transmitido em KB.
- O tempo em milissegundos a conexão estava ativa
Procedimento
Digite o seguinte comando para iniciar o rastreamento das conexões para a porta local
22
:/usr/share/bcc/tools/tcplife -L 22 PID COMM LADDR LPORT RADDR RPORT TX_KB RX_KB MS 19392 sshd 192.0.2.1 22 192.0.2.17 43892 53 52 6681.95 19431 sshd 192.0.2.1 22 192.0.2.245 43902 81 249381 7585.09 19487 sshd 192.0.2.1 22 192.0.2.121 43970 6998 7 16740.35 ...
Cada vez que uma conexão é fechada,
tcplife
exibe os detalhes das conexões.- Pressione Ctrl C para interromper o processo de rastreamento.
Recursos adicionais
- Para mais detalhes, consulte a página de manual
tcplife(8)
. - Para mais detalhes sobre
tcplife
e exemplos, veja o arquivo/usr/share/bcc/tools/doc/tcplife_example.txt
. - Para exibir o script
eBPF
tcplife(8)
uploads para o kernel, use o comando/usr/share/bcc/tools/tcplife --ebpf
.
49.8. Rastreamento de retransmissões TCP
O utilitário tcpretrans
exibe detalhes sobre as retransmissões TCP, tais como o endereço IP local e remoto e o número da porta, bem como o estado TCP no momento das retransmissões.
O utilitário utiliza recursos do eBPF e, portanto, tem uma sobrecarga muito baixa.
Procedimento
Use o seguinte comando para começar a exibir os detalhes da retransmissão TCP:
# /usr/share/bcc/tools/tcpretrans TIME PID IP LADDR:LPORT T> RADDR:RPORT STATE 00:23:02 0 4 192.0.2.1:22 R> 198.51.100.0:26788 ESTABLISHED 00:23:02 0 4 192.0.2.1:22 R> 198.51.100.0:26788 ESTABLISHED 00:45:43 0 4 192.0.2.1:22 R> 198.51.100.0:17634 ESTABLISHED ...
Cada vez que o núcleo chama a função de retransmissão TCP,
tcpretrans
exibe os detalhes da conexão.- Pressione Ctrl C para interromper o processo de rastreamento.
Recursos adicionais
- Para mais detalhes, consulte a página de manual
tcpretrans(8)
. - Para mais detalhes sobre
tcpretrans
e exemplos, veja o arquivo/usr/share/bcc/tools/doc/tcpretrans_example.txt
. - Para exibir o script eBPF
tcpretrans(8)
uploads para o kernel, use o comando/usr/share/bcc/tools/tcpretrans --ebpf
.
49.9. Exibição das informações de mudança de estado do TCP
Durante uma sessão de TCP,
o estado do TCP muda. O utilitário tcpstates
usa funções eBPF para rastrear essas mudanças de estado, e imprime detalhes incluindo a duração em cada estado. Por exemplo, use tcpstates
para identificar se as conexões gastam muito tempo no estado de inicialização.
Procedimento
Use o seguinte comando para começar a rastrear as mudanças de estado do TCP:
# /usr/share/bcc/tools/tcpstates SKADDR C-PID C-COMM LADDR LPORT RADDR RPORT OLDSTATE -> NEWSTATE MS ffff9cd377b3af80 0 swapper/1 0.0.0.0 22 0.0.0.0 0 LISTEN -> SYN_RECV 0.000 ffff9cd377b3af80 0 swapper/1 192.0.2.1 22 192.0.2.45 53152 SYN_RECV -> ESTABLISHED 0.067 ffff9cd377b3af80 818 sssd_nss 192.0.2.1 22 192.0.2.45 53152 ESTABLISHED -> CLOSE_WAIT 65636.773 ffff9cd377b3af80 1432 sshd 192.0.2.1 22 192.0.2.45 53152 CLOSE_WAIT -> LAST_ACK 24.409 ffff9cd377b3af80 1267 pulseaudio 192.0.2.1 22 192.0.2.45 53152 LAST_ACK -> CLOSE 0.376 ...
Cada vez que uma conexão muda de estado,
tcpstates
exibe uma nova linha com detalhes de conexão atualizados.Se várias conexões mudarem seu estado ao mesmo tempo, use o endereço da tomada na primeira coluna (
SKADDR
) para determinar quais entradas pertencem à mesma conexão.- Pressione Ctrl C para interromper o processo de rastreamento.
Recursos adicionais
- Para mais detalhes, consulte a página de manual
tcpstates(8)
. -
Para mais detalhes sobre
tcpstates
e exemplos, veja o arquivo/usr/share/bcc/tools/doc/tcpstates_example.txt
. - Para exibir o script eBPF
tcpstates(8)
uploads para o kernel, use o comando/usr/share/bcc/tools/tcpstates --ebpf
.
49.10. Resumindo e agregando o tráfego TCP enviado para sub-redes específicas
O utilitário tcpsubnet
resume e agrega o tráfego TCP IPv4 que o host
local envia para sub-redes e exibe a saída em um intervalo fixo. O utilitário usa as características do eBPF para coletar e resumir os dados a fim de reduzir as despesas gerais.
Por padrão, tcpsubnet
resume o tráfego para as seguintes sub-redes:
-
127.0.0.1/32
-
10.0.0.0/8
-
172.16.0.0/12
-
192.0.2.0/24/16
-
0.0.0.0/0
Note que a última subrede (0.0.0.0/0
) é uma opção de captura de todos. O utilitário tcpsubnet
conta todo o tráfego para
sub-redes diferente das quatro primeiras nesta entrada de "catch-all".
Siga o procedimento para contar o tráfego para as sub-redes 192.0.2.0/24
e 198.51.100.0/24
. O tráfego para outras sub-redes será rastreado na entrada da sub-rede 0.0.0.0/0
catch-all.
Procedimento
Comece a monitorar a quantidade de tráfego enviada para
192.0.2.0/24
,198.51.100.0/24
, e outras sub-redes:# /usr/share/bcc/tools/tcpsubnet 192.0.2.0/24,198.51.100.0/24,0.0.0.0/0 Tracing... Output every 1 secs. Hit Ctrl-C to end [02/21/20 10:04:50] 192.0.2.0/24 856 198.51.100.0/24 7467 [02/21/20 10:04:51] 192.0.2.0/24 1200 198.51.100.0/24 8763 0.0.0.0/0 673 ...
Este comando exibe o tráfego em bytes para as sub-redes especificadas uma vez por segundo.
- Pressione Ctrl C para interromper o processo de rastreamento.
Recursos adicionais
- Para mais detalhes, consulte a página de manual
tcpsubnet(8)
. - Para mais detalhes sobre
tcpsubnet
e exemplos, veja o arquivo/usr/share/bcc/tools/doc/tcpsubnet.txt
. - Para exibir o script eBPF
tcpsubnet(8)
uploads para o kernel, use o comando/usr/share/bcc/tools/tcpsubnet --ebpf
.
49.11. Exibição da taxa de transferência da rede por endereço IP e porta
O utilitário tcptop
exibe o tráfego TCP que o host envia e recebe em kilobytes. O relatório atualiza automaticamente e contém apenas as conexões TCP ativas. O utilitário utiliza as características do eBPF e, portanto, tem apenas uma sobrecarga muito baixa.
Procedimento
Para monitorar o tráfego enviado e recebido, entre:
# /usr/share/bcc/tools/tcptop 13:46:29 loadavg: 0.10 0.03 0.01 1/215 3875 PID COMM LADDR RADDR RX_KB TX_KB 3853 3853 192.0.2.1:22 192.0.2.165:41838 32 102626 1285 sshd 192.0.2.1:22 192.0.2.45:39240 0 0 ...
A saída do comando inclui apenas conexões TCP ativas. Se o sistema local ou remoto fecha uma conexão, a conexão não é mais visível na saída.
- Pressione Ctrl C para interromper o processo de rastreamento.
Recursos adicionais
- Para mais
detalhes, consulte a página de manual
tcptop(8)
. - Para mais detalhes sobre
tcptop
e exemplos, veja o arquivo/usr/share/bcc/tools/doc/tcptop.txt
. - Para exibir o script eBPF
tcptop(8)
uploads para o kernel, use o comando/usr/share/bcc/tools/tcptop --ebpf
.
49.12. Rastreamento de conexões TCP estabelecidas
O utilitário tcptracer
rastreia as funções do kernel que conectam,
aceitam e fecham as conexões TCP. O utilitário utiliza as características do eBPF e, portanto, tem uma sobrecarga muito baixa.
Procedimento
Use o seguinte comando para iniciar o processo de rastreamento:
# /usr/share/bcc/tools/tcptracer Tracing TCP established connections. Ctrl-C to end. T PID COMM IP SADDR DADDR SPORT DPORT A 1088 ns-slapd 4 192.0.2.153 192.0.2.1 0 65535 A 845 sshd 4 192.0.2.1 192.0.2.67 22 42302 X 4502 sshd 4 192.0.2.1 192.0.2.67 22 42302 ...
Cada vez que o núcleo se conecta, aceita ou fecha uma conexão,
tcptracer
exibe os detalhes das conexões.- Pressione Ctrl C para interromper o processo de rastreamento.
Recursos adicionais
- Para mais detalhes, consulte a página de manual
tcptracer(8)
. - Para mais detalhes sobre
tcptracer
e exemplos, veja o arquivo/usr/share/bcc/tools/doc/tcptracer_example.txt
. - Para exibir o script eBPF
tcptracer(8)
uploads para o kernel, use o comando/usr/share/bcc/tools/tcptracer --ebpf
.
49.13. Rastreamento de tentativas de escuta IPv4 e IPv6
O utilitário solisten
rastreia todas as tentativas de escuta de IPv4 e IPv6. Ele rastreia as tentativas de escuta, incluindo as que falham ou o programa de escuta que não aceita a conexão. O utilitário traça a função que o kernel chama quando um programa quer escutar as conexões TCP.
Procedimento
Digite o seguinte comando para iniciar o processo de rastreamento que exibe todas as tentativas de escuta TCP:
# /usr/share/bcc/tools/solisten PID COMM PROTO BACKLOG PORT ADDR 3643 nc TCPv4 1 4242 0.0.0.0 3659 nc TCPv6 1 4242 2001:db8:1::1 4221 redis-server TCPv6 128 6379 :: 4221 redis-server TCPv4 128 6379 0.0.0.0 ....
- Pressione Ctrl C para interromper o processo de rastreamento.
Recursos adicionais
- Para mais detalhes, consulte a página de manual
solisten
. - Para mais detalhes sobre
solisten
e exemplos, veja o arquivo/usr/share/bcc/tools/doc/solisten_example.txt
. - Para exibir o script eBPF
solisten
uploads para o kernel, use o comando/usr/share/bcc/tools/solisten --ebpf
.
49.14. Resumindo o tempo de serviço das interrupções suaves
O utilitário softirqs
resume o tempo gasto no serviço de interrupções suaves (soft IRQs) e mostra este tempo como totais ou distribuições de histogramas. Este utilitário usa os pontos de rastreamento do kernel irq:softirq_enter
e irq:softirq_exit
, que é um mecanismo de rastreamento estável.
Procedimento
Digite o seguinte comando para iniciar o rastreamento
soft irq
hora do evento:# /usr/share/bcc/tools/softirqs Tracing soft irq event time... Hit Ctrl-C to end. ^C SOFTIRQ TOTAL_usecs tasklet 166 block 9152 net_rx 12829 rcu 53140 sched 182360 timer 306256
- Pressione Ctrl C para interromper o processo de rastreamento.
Recursos adicionais
- Para mais detalhes, consulte a página de manual
softirqs
. - Para mais detalhes sobre
softirqs
e exemplos, veja o arquivo/usr/share/bcc/tools/doc/softirqs_example.txt
. - Para exibir o script
eBPF
solisten
uploads para o kernel, use o comando/usr/share/bcc/tools/softirqs --ebpf
. - Para mais detalhes sobre como
mpstat
utiliza estas informações, consulte a página de manualmpstat(1)
.
49.15. Recursos adicionais
- Para maiores informações sobre a BCC, consulte o arquivo
/usr/share/doc/bcc/README.md
.
Capítulo 50. Começando com o TIPC
Transparent Inter-process Communication (TIPC), que também é conhecido como Cluster Domain Sockets
, é um serviço de comunicação inter-processo (IPC) para operação em cluster.
As aplicações que estão sendo executadas em um ambiente de cluster dinâmico e de alta disponibilidade têm necessidades especiais. O número de nós em um cluster pode variar, os roteadores podem falhar e, devido a considerações de equilíbrio de carga, a funcionalidade pode ser movida para diferentes nós no cluster. O TIPC minimiza o esforço dos desenvolvedores de aplicações para lidar com tais situações, e maximiza a chance de que elas sejam tratadas de forma correta e otimizada. Além disso, o TIPC proporciona uma comunicação mais eficiente e tolerante a falhas do que os protocolos gerais, como o TCP.
50.1. A arquitetura do TIPC
TIPC é uma camada entre aplicações que utilizam TIPC e um serviço de transporte de pacotes (bearer
), e abrange o nível de transporte, a rede e as camadas de ligação de sinalização. Entretanto, o TIPC pode usar um protocolo de transporte diferente como portador, de modo que, por exemplo, uma conexão TCP pode servir como portador para um link de sinalização TIPC.
O TIPC suporta os seguintes portadores:
- Ethernet
- InfiniBand
- Protocolo UDP
TIPC fornece uma transferência confiável de mensagens entre as portas TIPC, que são os pontos finais de todas as comunicações TIPC.
O diagrama a seguir é um diagrama da arquitetura TIPC:
50.2. Carregando o módulo Tipc quando o sistema inicia
Antes de poder usar o protocolo TIPC, carregue o
módulo do kernel tipc
. Esta seção explica como configurar que a RHEL carregue este módulo automaticamente quando o sistema inicia.
Procedimento
Crie o arquivo
/etc/modules-load.d/tipc.conf
com o seguinte conteúdo:tipc
Reinicie o serviço
systemd-modules-load
para carregar o módulo sem reiniciar o sistema:#
systemctl start systemd-modules-load
Etapas de verificação
Use o seguinte comando para verificar se a RHEL carregou o módulo
tipc
:#
lsmod | grep tipc
tipc 311296 0Se o comando não mostra nenhuma entrada para o módulo
tipc
, a RHEL falhou em carregá-lo.
Recursos adicionais
- Para mais detalhes sobre o carregamento de módulos quando o sistema inicia, consulte a página de manual
modules-load.d(5)
.
50.3. Criação de uma rede TIPC
Esta seção descreve como criar uma rede TIPC.
Os comandos configuram a rede TIPC apenas temporariamente. Para configurar permanentemente o TIPC em um nó, use os comandos deste procedimento em um script, e configure o RHEL para executar esse script quando o sistema iniciar.
Procedimento
Opcional: Definir uma identidade única do nó, como um UUID ou o nome do host do nó:
#
tipc node set identity host_name
A identidade pode ser qualquer cadeia única composta de no máximo 16 letras e números.
Acrescente um portador. Por exemplo, para usar a Ethernet como mídia e o dispositivo
enp0s1
como dispositivo físico portador, entre:#
tipc bearer enable media eth device enp1s0
- Opcional: Para redundância e melhor desempenho, anexar mais portadores usando o comando da etapa anterior. Você pode configurar até três portadores, mas não mais que dois na mesma mídia.
- Repita todos os passos anteriores em cada nó que deve entrar na rede TIPC.
Etapas de verificação
Exibir o status do link para os membros do cluster:
#
tipc link list
broadcast-link: up 5254006b74be:enp1s0-525400df55d1:enp1s0: upEsta saída indica que o link entre o portador
enp1s0
no nó5254006b74be
e o portadorenp1s0
no nó525400df55d1
éup
.Exibir a tabela de publicação TIPC:
#
tipc nametable show
Type Lower Upper Scope Port Node 0 1795222054 1795222054 cluster 0 5254006b74be 0 3741353223 3741353223 cluster 0 525400df55d1 1 1 1 node 2399405586 5254006b74be 2 3741353223 3741353223 node 0 5254006b74be- As duas entradas com o tipo de serviço
0
indicam que dois nós são membros deste agrupamento. - A entrada com o tipo de serviço
1
representa o serviço de rastreamento de serviço de topologia embutido. - A entrada com tipo de serviço
2
exibe o link como visto a partir do nó emissor. O limite de faixa3741353223
representa o endereço do ponto final (um valor único de hash de 32 bits baseado na identidade do nó) em formato decimal.
- As duas entradas com o tipo de serviço
Recursos adicionais
- Para detalhes sobre outros portadores que você pode usar e os parâmetros
de linha de comando correspondentes, consulte a página de manual
tipc-bearer(8)
. - Para mais detalhes sobre o comando
tipc namespace
, consulte a página de manualtipc-namespace(8)
.
50.4. Recursos adicionais
A Red Hat recomenda usar outros protocolos de nível portador para criptografar a comunicação entre os nós com base nos meios de transporte. Por exemplo, a Red Hat recomenda o uso de outros protocolos de nível portador:
- MACSec: Para maiores detalhes, ver Capítulo 33, Configuração de MACsec.
- IPsec: Para detalhes, consulte a seção Configurando uma VPN com IPsec no guia
Securing networks
.
- Para exemplos de como usar o TIPC, clone o repositório GIT upstream usando o comando
git clone git://git.code.sf.net/p/tipc/tipcutils
. Este repositório contém o código fonte das demonstrações e dos programas de teste que utilizam as funcionalidades do TIPC. Note que este repositório não é fornecido pela Red Hat. - Para obter detalhes sobre o protocolo TIPC, consulte http://tipc.io/protocol.html.
- Para detalhes sobre a programação TIPC, consulte http://tipc.io/protocol.html.