Como Configurar um Firewall Usando FirewallD no CentOS 7

Introdução

Firewalld é uma solução de gerenciamento de firewall disponíveis para várias distribuições Linux, que atua como um frontend para o sistema de filtragem de pacotes iptables fornecidas pelo kernel do Linux. Neste guia, vamos cobrir como configurar um firewall para o seu servidor e mostrar-lhe os princípios básicos de gestão do firewall com a ferramenta administrativa firewall-cmd (se preferir usar iptables com CentOS, siga este guia).

Nota: Há uma chance de que você possa estar trabalhando com uma versão mais recente do firewalld do que estava disponível no momento desta escrita, ou que o seu servidor foi configurado ligeiramente diferente do servidor de exemplo usado ao longo deste guia. Assim, o comportamento de alguns dos comandos explicados neste guia pode variar dependendo de sua configuração específica.

Conceitos Básicos de Firewalld

Antes de começar a falar sobre como, na verdade, usam o firewall-cmd utilitário para gerenciar a configuração de firewall, devemos nos familiarizar com alguns conceitos básicos que a ferramenta apresenta.

zonas

o firewalld daemon gere grupos de regras usando entidades chamadas “zonas”. As zonas são basicamente conjuntos de regras que ditam o que o tráfego deve ser permitido, dependendo do nível de confiança que você tem nas redes a que o seu computador está conectado. Interfaces de rede são atribuídas uma zona para ditar o comportamento que o firewall deve permitir.

para computadores que possam mover-se entre redes frequentemente (como laptops), este tipo de flexibilidade fornece um bom método de mudar as suas regras dependendo do seu ambiente. Você pode ter regras estritas em vigor proibindo a maioria do tráfego ao operar em uma rede pública de Wi-Fi, ao mesmo tempo que permite restrições mais relaxadas quando conectado à sua rede doméstica. Para um servidor, essas zonas não são tão imediatamente importantes porque o ambiente de rede raramente, se alguma vez, muda.

independentemente de quão dinâmico o seu ambiente de rede possa ser, ainda é útil estar familiarizado com a ideia geral por trás de cada uma das zonas predefinidas para firewalld. De modo a que desde as zonas menos confiáveis até às mais confiáveis, as zonas predefinidas dentro de firewalld são:

  • largar: O mais baixo nível de confiança. Todas as conexões de entrada são descartadas sem resposta e apenas as conexões de saída são possíveis.
  • bloco: semelhante ao acima, mas em vez de simplesmente abandonar conexões, pedidos recebidos são rejeitados com uma mensagem icmp-host-prohibited ou icmp6-adm-prohibited.
  • público: representa redes públicas não confiáveis. Você não confia em outros computadores, mas pode permitir conexões de entrada selecionadas caso a caso.
  • external: External networks in the event that you are using the firewall as your gateway. Está configurado para o NAT mascarado para que a sua rede interna permaneça privada, mas acessível.
  • interno: o outro lado da zona externa, utilizado para a parte interna de um portal. Os computadores são bastante confiáveis e alguns serviços adicionais estão disponíveis.
  • dmz: usado para computadores localizados numa DMZ (computadores isolados que não terão acesso ao resto da sua rede). Apenas certas ligações recebidas são permitidas.
  • trabalho: utilizado em máquinas de trabalho. Confie na maioria dos computadores da rede. Mais alguns serviços podem ser permitidos.
  • home: um ambiente doméstico. Isso geralmente implica que você confia na maioria dos outros computadores e que mais alguns serviços serão aceitos.
  • confiável: confiar em todas as máquinas na rede. O mais aberto das opções disponíveis e deve ser usado com moderação.

para usar o firewall, podemos criar regras e alterar as propriedades das nossas zonas e, em seguida, atribuir as nossas interfaces de rede para as zonas mais apropriadas.

permanência da regra

no firewalld, as regras podem ser designadas como permanentes ou imediatas. Se uma regra é adicionada ou modificada, por padrão, o comportamento do firewall corre atualmente é modificado. Na próxima bota, as regras antigas serão revertidas.

a maioria das operações firewall-cmd pode tomar a bandeira --permanent para indicar que a firewall não-efémera deve ser alvo. Isto irá afectar o conjunto de regras que é recarregado no arranque. Esta separação significa que você pode testar as regras em sua instância de firewall ativa e, em seguida, recarregar se houver problemas. Você também pode usar a bandeira --permanent para construir um conjunto inteiro de regras ao longo do tempo que serão aplicadas de uma só vez quando o comando reload for emitido.

instale e active a sua Firewall para iniciar no arranque

firewalld está instalada por omissão em algumas distribuições Linux, incluindo muitas imagens de CentOS 7. No entanto, pode ser necessário instalar o firewalld você mesmo:

  • sudo yum install firewalld

depois de instalar firewalld, poderá activar o serviço e reiniciar o seu servidor. Tenha em mente que ativar firewalld fará com que o serviço comece no arranque. É a melhor prática criar suas regras de firewall e aproveitar a oportunidade para testá-las antes de configurar este comportamento, a fim de evitar problemas potenciais.

  • sudo systemctl enable firewalld
  • sudo reboot

quando o servidor reiniciar, a sua ‘firewall’ deverá ser criada, as suas interfaces de rede deverão ser colocadas nas zonas que configurou (ou voltar para a zona predefinida configurada), e quaisquer regras associadas à(s) zona (s) serão aplicadas às interfaces associadas.

podemos verificar que o serviço está funcionando e acessível por digitação:

  • sudo firewall-cmd --state
output
running

isto indica que o nosso firewall está a funcionar com a configuração predefinida.Antes de começarmos a fazer modificações, devemos nos familiarizar com o ambiente padrão e regras fornecidas pelo daemon.

explorando os valores por omissão

podemos ver qual a zona actualmente seleccionada por omissão, escrevendo:

  • firewall-cmd --get-default-zone
output
public

uma vez que não demos firewalld quaisquer comandos para se desviar da zona padrão, e nenhuma das nossas interfaces está configurada para se ligar a outra zona, essa zona também será a única zona “activa” (a zona que está a controlar o tráfego para as nossas interfaces). Podemos verificar isso digitando:

  • firewall-cmd --get-active-zones
output
public interfaces: eth0 eth1

Aqui, podemos ver que nosso servidor exemplo tem duas interfaces de rede sendo controladas pelo firewall (eth0 e eth1). Ambos estão actualmente a ser geridos de acordo com as regras definidas para a zona pública.Como sabemos que regras estão associadas à zona pública? Podemos imprimir a configuração da zona predefinida escrevendo:

  • sudo firewall-cmd --list-all
output
public (default, active) target: default icmp-block-inversion: no interfaces: eth0 eth1 sources: services: ssh dhcpv6-client ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:

podemos dizer a partir da saída que esta zona é tanto o padrão e ativo e que as interfaces eth0 e eth1 estão associadas com esta zona (já sabíamos tudo isso a partir de nossas investigações anteriores). No entanto, também podemos ver que esta zona permite as operações normais associadas a um cliente DHCP (para atribuição de endereço IP) e SSH (para administração remota).

Exploring Alternative Zones

Now we have a good idea about the configuration for the default and active zone. Podemos encontrar informações sobre outras zonas também.

Para obter uma lista das disponíveis, horários, tipo de:

  • firewall-cmd --get-zones
output
block dmz drop external home internal public trusted work

podemos ver a configuração específica associada a uma zona, incluindo o --zone= parâmetro no nosso --list-all comando:

  • sudo firewall-cmd --zone=home --list-all
output
home interfaces: sources: services: dhcpv6-client ipp-client mdns samba-client ssh ports: masquerade: no forward-ports: icmp-blocks: rich rules:

Você pode exportar todas as definições de zona usando o --list-all-zones opção. Provavelmente irá querer canalizar o resultado para um pager para uma visualização mais fácil:

  • sudo firewall-cmd --list-all-zones | less

seleccionando Zonas para as suas Interfaces

a menos que tenha configurado as suas interfaces de rede de outra forma, cada interface será colocada na zona predefinida quando a firewall for activada.

mudar a zona de uma Interface

pode fazer a transição de uma interface entre zonas durante uma sessão utilizando o parâmetro --zone= em combinação com o parâmetro --change-interface=. Tal como acontece com todos os comandos que modificam a firewall, terá de usar sudo.Por exemplo, podemos transitar a nossa interface eth0 para a zona “home” escrevendo isto:

  • sudo firewall-cmd --zone=home --change-interface=eth0
output
success
Nota

sempre que você estiver transicionando uma interface para uma nova zona, esteja ciente de que você está provavelmente modificando os serviços que estarão operacionais. Por exemplo, aqui estamos nos movendo para a zona “home”, que tem SSH disponível. Isto significa que a nossa ligação não deve cair. Algumas outras zonas não têm o SSH activo por omissão e se a sua ligação for largada ao usar uma destas zonas, poderá ver-se incapaz de voltar a entrar.

podemos verificar que isso foi bem sucedido, pedindo as zonas ativas novamente:

  • firewall-cmd --get-active-zones
output
home interfaces: eth0public interfaces: eth1

ajustando a zona predefinida

se todas as suas interfaces puderem ser melhor tratadas por uma única zona, é provavelmente mais fácil apenas seleccionar a melhor zona predefinida e, em seguida, usá-la para a sua configuração.

pode alterar a zona predefinida com o parâmetro --set-default-zone=. Isto irá alterar imediatamente qualquer interface que tenha caído de volta no padrão para a nova zona:

  • sudo firewall-cmd --set-default-zone=home
output
success

definir as regras para as suas aplicações

a forma básica de definir as excepções de firewall para os serviços que deseja disponibilizar é fácil. Vamos analisar a ideia básica.

adicionando um serviço às suas zonas

o método mais fácil é adicionar os Serviços ou portos de que necessita às zonas que está a utilizar. Novamente, você pode obter uma lista dos serviços disponíveis com o --get-services opção:

  • firewall-cmd --get-services
output
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 dropbox-lansync elasticsearch freeipa-ldap freeipa-ldaps freeipa-replication freeipa-trust ftp ganglia-client ganglia-master high-availability http https imap imaps ipp ipp-client ipsec iscsi-target kadmin kerberos kibana klogin kpasswd kshell ldap ldaps libvirt libvirt-tls managesieve mdns mosh mountd ms-wbt mssql mysql nfs nrpe ntp openvpn ovirt-imageio ovirt-storageconsole ovirt-vmconsole pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy proxy-dhcp ptp pulseaudio puppetmaster quassel radius rpc-bind rsh rsyncd samba samba-client sane sip sips smtp smtp-submission smtps snmp snmptrap spideroak-lansync squid ssh synergy syslog syslog-tls telnet tftp tftp-client tinc tor-socks transmission-client vdsm vnc-server wbem-https xmpp-bosh xmpp-client xmpp-local xmpp-server
Nota

Você pode obter mais detalhes sobre cada um destes serviços, observando seus associados .xml arquivo dentro de /usr/lib/firewalld/services diretório. Por exemplo, o serviço SSH é definido assim:

/usr/lib/firewalld/services/ssh.xml
<?xml version="1.0" encoding="utf-8"?><service> <short>SSH</short> <description>Secure Shell (SSH) is a protocol for logging into and executing commands on remote machines. It provides secure encrypted communications. If you plan on accessing your machine remotely via SSH over a firewalled interface, enable this option. You need the openssh-server package installed for this option to be useful.</description> <port protocol="tcp" port="22"/></service>

você pode ativar um serviço para uma zona usando o parâmetro --add-service=. A operação visará a zona predefinida ou qualquer que seja a zona especificada pelo parâmetro --zone=. Por omissão, isto só irá ajustar a sessão de ‘firewall’ actual. Você pode ajustar a configuração permanente da firewall, incluindo a bandeira --permanent.

por exemplo, se estamos executando um servidor web servindo tráfego HTTP convencional, podemos permitir este tráfego para interfaces em nossa zona “pública” para esta sessão, digitando:

  • sudo firewall-cmd --zone=public --add-service=http

pode deixar de fora o --zone= se desejar modificar a zona predefinida. Podemos verificar que a operação foi bem sucedida usando as operações --list-all ou --list-services :

  • sudo firewall-cmd --zone=public --list-services
output
dhcpv6-client http ssh

uma vez que você tenha testado que tudo está funcionando como deveria, você provavelmente vai querer modificar as regras permanentes firewall de modo que o seu serviço ainda estará disponível após um reboot. Podemos tornar a nossa mudança de zona” pública ” permanente digitando:

  • sudo firewall-cmd --zone=public --permanent --add-service=http
output
success

você pode verificar que isso foi bem sucedido, adicionando a bandeira --permanent para a operação --list-services. Você precisa usar sudo para qualquer operação --permanent :

  • sudo firewall-cmd --zone=public --permanent --list-services
output
dhcpv6-client http ssh

a sua zona “pública” irá agora permitir o tráfego web HTTP na porta 80. Se o seu servidor web estiver configurado para usar SSL/TLS, você também irá querer adicionar o serviço https. Podemos adicionar isso à sessão atual e ao conjunto de regras permanentes, digitando:

  • sudo firewall-cmd --zone=public --add-service=https
  • sudo firewall-cmd --zone=public --permanent --add-service=https

e se não estiver disponível Nenhum serviço adequado?

os Serviços de firewall que estão incluídos com a instalação firewalld representam muitos dos requisitos mais comuns para aplicações às quais você pode desejar permitir o acesso. No entanto, haverá provavelmente cenários em que estes serviços não se encaixam nas suas necessidades.

nesta situação, você tem duas opções.

abrir um porto para as suas zonas

a maneira mais fácil de adicionar suporte para a sua aplicação específica é abrir os portos que ela usa na(s) zona (s) apropriada (s). Isto é tão fácil como especificar o alcance do porto ou porto, e o protocolo associado para os portos que você precisa abrir.

por exemplo, se a nossa aplicação correr na porta 5000 e usar TCP, podemos adicionar isto à zona “pública” para esta sessão usando o parâmetro --add-port=. Protocolos podem ser tcp ou udp:

  • sudo firewall-cmd --zone=public --add-port=5000/tcp
output
success

podemos verificar que este foi bem-sucedida usando o --list-ports operação:

  • sudo firewall-cmd --zone=public --list-ports
output
5000/tcp

também é possível especificar um intervalo de portas sequencial, separando-o início e o término da porta da gama, com um traço. Por exemplo, se o nosso aplicativo usa portas UDP 4990 a 4999, nós poderíamos abri-los em “público”, digitando:

  • sudo firewall-cmd --zone=public --add-port=4990-4999/udp

depois dos testes, é provável que queiramos adicioná-los à firewall permanente. Você pode fazer isso escrevendo:

  • sudo firewall-cmd --zone=public --permanent --add-port=5000/tcp
  • sudo firewall-cmd --zone=public --permanent --add-port=4990-4999/udp
  • sudo firewall-cmd --zone=public --permanent --list-ports
output
successsuccess5000/tcp 4990-4999/udp

definir um serviço

abrir portas para as suas zonas é fácil, mas pode ser difícil acompanhar o que cada um Serve. Se você alguma vez desativar um serviço em seu servidor, você pode ter dificuldade em lembrar quais as portas que foram abertas ainda são necessárias. Para evitar esta situação, é possível definir um serviço.

os Serviços são simplesmente colecções de portos com um nome e uma descrição associados. O uso de serviços é mais fácil de administrar do que os portos, mas requer um pouco de trabalho inicial. A maneira mais fácil de começar é copiar um script existente (encontrado em /usr/lib/firewalld/services) para o diretório /etc/firewalld/services onde o firewall procura definições não-padrão.

por exemplo, poderíamos copiar a definição de serviço SSH para usar para a nossa definição de serviço “exemplo” como esta. O nome do arquivo, menos o .xml sufixo vai ditar o nome do serviço dentro do firewall lista de serviços:

  • sudo cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/example.xml

Agora, você pode ajustar a definição encontrada no arquivo que você copiou:

sudo vi /etc/firewalld/services/example.xml

Para começar, o arquivo irá conter o SSH definição que você copiou:

/etc/firewalld/serviços/exemplo.xml
<?xml version="1.0" encoding="utf-8"?><service> <short>SSH</short> <description>Secure Shell (SSH) is a protocol for logging into and executing commands on remote machines. It provides secure encrypted communications. If you plan on accessing your machine remotely via SSH over a firewalled interface, enable this option. You need the openssh-server package installed for this option to be useful.</description> <port protocol="tcp" port="22"/></service>

a maioria desta definição é de facto metadados. Você vai querer mudar o nome curto para o serviço dentro das tags <short>. Este é um nome legível para o seu serviço. Você também deve adicionar uma descrição para que você tenha mais informações se você precisar auditar o serviço. A única configuração que você precisa fazer que realmente afeta a funcionalidade do serviço provavelmente será a definição do porto onde você identifica o número de porto e o protocolo que você deseja abrir. Isto pode ser especificado várias vezes.

para o nosso serviço de “exemplo”, imagine que precisamos abrir o porto 7777 para TCP e 8888 para UDP. Ao entrar no modo de inserção pressionando i, podemos modificar a definição existente com algo como isto:

/etc/firewalld/services/example.xml
<?xml version="1.0" encoding="utf-8"?><service> <short>Example Service</short> <description>This is just an example service. It probably shouldn't be used on a real system.</description> <port protocol="tcp" port="7777"/> <port protocol="udp" port="8888"/></service>

Pressione ESC, em seguida, digite :x para salvar e fechar o arquivo.

Recarregar seu firewall para obter acesso ao seu novo serviço:

  • sudo firewall-cmd --reload

Você pode ver que ele agora está entre a lista de serviços disponíveis:

  • firewall-cmd --get-services
output
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 dropbox-lansync elasticsearch example freeipa-ldap freeipa-ldaps freeipa-replication freeipa-trust ftp ganglia-client ganglia-master high-availability http https imap imaps ipp ipp-client ipsec iscsi-target kadmin kerberos kibana klogin kpasswd kshell ldap ldaps libvirt libvirt-tls managesieve mdns mosh mountd ms-wbt mssql mysql nfs nrpe ntp openvpn ovirt-imageio ovirt-storageconsole ovirt-vmconsole pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy proxy-dhcp ptp pulseaudio puppetmaster quassel radius rpc-bind rsh rsyncd samba samba-client sane sip sips smtp smtp-submission smtps snmp snmptrap spideroak-lansync squid ssh synergy syslog syslog-tls telnet tftp tftp-client tinc tor-socks transmission-client vdsm vnc-server wbem-https xmpp-bosh xmpp-client xmpp-local xmpp-server

agora Você pode usar este serviço em suas zonas, como faria normalmente.

criar as suas próprias zonas

embora as zonas predefinidas sejam provavelmente mais do que suficientes para a maioria dos utilizadores, pode ser útil definir as suas próprias zonas que são mais descritivas da sua função.

por exemplo, você pode querer criar uma zona para o seu servidor web, chamado “publicweb”. No entanto, você pode querer ter outra zona configurada para o serviço DNS que você fornece em sua rede privada. Talvez queiras uma zona chamada “privateDNS” para isso.

ao adicionar uma zona, deve adicioná-la à configuração permanente da firewall. Você pode então recarregar para trazer a configuração para a sua sessão em execução. Por exemplo, poderíamos criar duas zonas que discutimos acima, escrevendo:

  • sudo firewall-cmd --permanent --new-zone=publicweb
  • sudo firewall-cmd --permanent --new-zone=privateDNS

Você pode verificar que estão presentes em seu permanente de configuração digitando:

  • sudo firewall-cmd --permanent --get-zones
output
block dmz drop external home internal privateDNS public publicweb trusted work

Como afirmado anteriormente, estes não estarão disponíveis na instância atual do firewall ainda:

  • firewall-cmd --get-zones
output
block dmz drop external home internal public trusted work

Recarregar o firewall para trazer essas novas zonas para a configuração activa:

  • sudo firewall-cmd --reload
  • firewall-cmd --get-zones
output
block dmz drop external home internal privateDNS public publicweb trusted work

Agora, você pode começar a atribuir a serviços apropriados e as portas para as zonas. Geralmente é uma boa idéia ajustar a instância ativa e, em seguida, transferir essas mudanças para a configuração permanente após o teste. Por exemplo, para o “publicweb de zona”, você pode querer adicionar o SSH, HTTP e HTTPS serviços:

  • sudo firewall-cmd --zone=publicweb --add-service=ssh
  • sudo firewall-cmd --zone=publicweb --add-service=http
  • sudo firewall-cmd --zone=publicweb --add-service=https
  • sudo firewall-cmd --zone=publicweb --list-all
output
publicweb target: default icmp-block-inversion: no interfaces: sources: services: ssh http https ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:

da Mesma forma, podemos adicionar o serviço de DNS para o nosso “privateDNS” zona de:

  • sudo firewall-cmd --zone=privateDNS --add-service=dns
  • sudo firewall-cmd --zone=privateDNS --list-all
output
privateDNS interfaces: sources: services: dns ports: masquerade: no forward-ports: icmp-blocks: rich rules:

poderíamos, então, mudar a nossa interfaces para estas novas zonas para testar:

  • sudo firewall-cmd --zone=publicweb --change-interface=eth0
  • sudo firewall-cmd --zone=privateDNS --change-interface=eth1

neste ponto, você tem a oportunidade de testar a sua configuração. Se esses valores funcionarem para você, você vai querer adicionar as mesmas regras para a configuração permanente. Você pode fazer isso através do re-aplicar as regras com a --permanent bandeira:

  • sudo firewall-cmd --zone=publicweb --permanent --add-service=ssh
  • sudo firewall-cmd --zone=publicweb --permanent --add-service=http
  • sudo firewall-cmd --zone=publicweb --permanent --add-service=https
  • sudo firewall-cmd --zone=privateDNS --permanent --add-service=dns

Após permanentemente aplicar estas regras, você pode reiniciar a sua rede e recarregar o seu serviço de firewall:

  • sudo systemctl restart network
  • sudo systemctl reload firewalld

Validar que o correto zonas foram designadas:

  • firewall-cmd --get-active-zones
output
privateDNS interfaces: eth1publicweb interfaces: eth0

E validar que os serviços estão disponíveis tanto para as zonas:

  • sudo firewall-cmd --zone=publicweb --list-services
output
http https ssh
  • sudo firewall-cmd --zone=privateDNS --list-services
output
dns

Você configurou com êxito o seu próprio zonas! Se você quer fazer uma dessas zonas o padrão para outras interfaces, lembre-se de configurar esse comportamento com o --set-default-zone= parâmetro:

sudo firewall-cmd --set-default-zone=publicweb

Conclusão

agora Você deve ter uma boa compreensão de como administrar o firewalld serviço no seu sistema CentOS para o dia-a-dia.

o serviço firewalld permite-lhe configurar regras e conjuntos de regras que têm em consideração o seu ambiente de rede. Ele permite a transição perfeita entre diferentes políticas de firewall através do uso de zonas e dá aos administradores a capacidade de abstrair a gestão de portos em Definições de serviço mais amigáveis. Adquirir um conhecimento funcional deste sistema lhe permitirá tirar partido da flexibilidade e poder que esta ferramenta proporciona.

Deixe uma resposta

O seu endereço de email não será publicado.

Previous post Cefalu, Italy: A Complete Guide to the Sicilian Beach Town
Next post Jantar mistério de Ideias Com os Itens de Menu