Firewall e SELinux

Diferente do Ubuntu que dispensa o uso de um firewall por padrão, adotando uma política de não manter portas abertas, o Fedora dá uma grande ênfase à configuração do firewall, bloqueando todas as portas por padrão (com exceção do SSH) e oferecendo um utilitário de configuração bastante poderoso, o “system-config-firewall”, disponível no “Sistema > Administração > Firewall”:

Ele segue a política básica de permitir que você especifique as portas ou intervalos de portas que deseja abrir, oferecendo também opções para definir interfaces confiáveis (nas quais todas as portas ficam abertas), compartilhar a conexão e encaminhar portas.

Para abrir portas adicionais, basta marcar os serviços desejados na seção “Serviços confiáveis” (que inclui uma lista de serviços comuns), ou especificar manualmente as portas desejadas na seção “Outras portas”, verificando sempre se o serviço desejado utiliza conexões TCP ou UDP. Ao fazer cada alteração, é necessário clicar no “Aplicar”, para que o configurador salve as novas regras no arquivo “/etc/sysconfig/iptables” e recarregue as regras do firewall.

Se você tiver a curiosidade de verificar as regras do Iptables ativas em uma instalação padrão do Fedora (sem nenhuma alteração na configuração do Firewall) usando o comando “iptables -L“, vai encontrar o seguinte:

Essas regras fazem com que o firewall aceite respostas às conexões iniciadas por você (ou seja, não bloqueie as respostas de servidores remotos quando você acessar um site ou baixar um arquivo), aceite pacotes ICMP (o que inclui resposta a pings), aceite conexões na porta do SSH (é importante desmarcá-la na seção “Serviços confiáveis” se você não quiser que sua máquina fique acessível via SSH) e rejeite conexões nas demais portas, juntamente com o encaminhamento de pacotes.

Como não são especificadas interfaces confiáveis, essas regras valem para todos, incluindo os PCs da rede local. Não é preciso dizer que isso leva ao aparecimento de muitas dúvidas, já que se você instalar o Samba para compartilhar algumas pastas com arquivos, por exemplo, as requisições serão bloqueadas pelo firewall, até que você ajuste a configuração.

Para aceitar conexões na interface da rede local, você deve marcá-la manualmente na seção “Interfaces confiáveis”. A partir daí, o sistema passará a aceitar todas as conexões na interface especificada, mas continuará bloqueando conexões em outras interfaces. Ao se conectar diretamente usando um modem 3G USB, por exemplo (o que adiciona a interface ppp0), o sistema bloquearia todas as conexões provenientes da Internet automaticamente.

Se você decidisse mais adiante compartilhar a conexão do modem 3G, bastaria marcar a interface “ppp0” na seção “Mascarar”. Isso equivaleria à compartilhar a conexão executando manualmente o comando “iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE”, que citei nos exemplos de firewall para o Ubuntu.

Ao compartilhar a conexão, uma necessidade comum é encaminhar portas para PCs da rede local, para que eles possam rodar servidores ou aplicativos diversos que precisem de portas de entrada. Isso pode ser feito através da seção “Encaminhamento de portas”, onde você deve especificar a interface de Internet, a porta de entrada e o endereço do PC da rede local que receberá o encaminhamento:

O default é fazer com que a porta de entrada seja encaminhada para a mesma porta do PC de destino, mas você pode especificar uma porta diferente marcando a opção “Encaminhar para outra porta”. Isso permite que você encaminhe as requisições recebidas na porta 2222 do servidor para a porta 22 do PC na rede interna, por exemplo.

A seção Filtro ICMP permite bloquear seletivamente determinados tipos de pacotes ICMP, incluindo o ping (“requisição de eco”). Embora os pacotes ICMP possam ser usados para descobrir algumas informações sobre a máquina (o ping é o mais óbvio, já que é a maneira mais simples de descobrir se uma máquina está online), a importância deles é frequentemente superestimada, desviando o foco das atenções das questões mais importantes, que são as portas abertas e as atualizações de segurança para os serviços. Afinal, não adianta remover seu nome da lista telefônica se você deixa a porta da frente de casa aberta.

Em seguida, temos o SELinux (Secure Linux), um sistema que visa reforçar a segurança do sistema, aplicando um conjunto de diretivas rígidas de segurança. Ele surgiu como um projeto open-source do NSA (uma agência do departamento de defesa do EUA), que ganhou o apoio de muitos desenvolvedores e foi incorporado ao kernel Linux a partir de 2003.

Ele é mais uma tecnologia que começou sendo usada no Fedora (gerando bastante dor de cabeça aos usuários nas primeiras versões, até que as regras e permissões fossem devidamente afinadas) para, a partir daí, começar a ser usado em outras distribuições. No Ubuntu, por exemplo, ele está disponível nos repositórios principais a partir da versão 8.04 e pode ser instalado usando o “apt-get install selinux”.

A ideia do SELinux é restringir as permissões, de forma que cada serviço ou aplicativo tenha permissão para realizar apenas as tarefas a que é destinado. Isso impede que serviços vulneráveis sejam usados para obter privilégios adicionais, como é comum em ataques.

Assim como em tantos outros casos, o SELinux foi implantado de uma forma abrupta no Fedora 2, o que resultou em problemas relacionados à configuração de muitos serviços, que deixavam de funcionar ou apresentavam comportamentos inesperados por não conseguirem acessar determinados arquivos ou recursos do sistema, devido à ação do SELinux.

Para solucionar o problema, os desenvolvedores passaram a utilizar a política “targeted” (modo direcionado) do SELinux, desenvolvendo configurações específicas, que aplicam as políticas a apenas alguns serviços e aplicativos específicos. Essa nova abordagem reduziu bastante o volume de problemas e foi evoluindo ao longo das versões do Fedora até os dias de hoje.

É graças a este trabalho que, muito embora o SELinux venha ativado em modo “Reforçado” (Enforcing) nas versões atuais do Fedora, o número de relatos de problemas caiu muito, fazendo com que a maioria mantenha a configuração padrão.

Continuando, a configuração do SELinux pode ser alterada através do “system-config-selinux” ou através do ícone no “Sistema > Administração”:

Por default, o SELinux fica ativo em modo Enforcing, que faz com que as regras realmente sejam aplicadas. Alterando a configuração para “Permissivo” ele passa a apenas gerar um log das operações que seriam bloqueadas (que você pode acompanhar usando o comando “dmesg”) mas sem realmente fazer nada. A diferença entre o “Permissivo” e o “Desabilitado” é que no segundo ele realmente deixa de verificar as operações.

Com o SELinux ativado, existem muitas situações em que você precisa ativar módulos para conseguir utilizar recursos específicos relacionados a servidores. Para criar um servidor FTP com um diretório de upload para usuários anônimos, por exemplo, você precisaria marcar o módulo “allow_ftp_anon_write” na segunda aba:

Na política padrão, o SELinux aplica suas políticas de segurança apenas ao dhcpd (o servidor DHCP), httpd (o Apache), named (o Bind), nscd, ntpd, portmap, snmpd, squid (servidor proxy) e o syslogd (responsável pelos logs do sistema). Isso faz com que ele não faça realmente muita diferença para quem usa o Fedora como desktop, diferente do que temos nos servidores, onde ele representa uma melhoria real na segurança.

Como em outras ferramentas, o real potencial do SELinux está na possibilidade de definir novas políticas, protegendo os serviços mais importantes e fazendo com que ele se molde à configuração usada. O grande problema é que isso demanda muito tempo e uma boa dose de conhecimento, um investimento que faz sentido em um servidor importante, mas não faz muito sentido em um desktop que pode ser protegido de maneira mais efetiva com a combinação do firewall e atualizações de segurança para os navegadores e outros aplicativos que acessam a web.

Muito se fala em desenvolver políticas do SELinux para o Firefox e outros aplicativos desktop, mas o volume de recursos diferentes suportados por eles faz com que a tarefa seja incrivelmente complicada, o que explica a demora no surgimento de opções utilizáveis nesse sentido.

Mesmo sem o SELinux, o Fedora é uma distribuição bastante segura, desde que as atualizações de segurança sejam aplicadas em dia. O Firewall serve como uma camada extra de proteção, para o caso de você instalar serviços adicionais e esquecê-los abertos, enquanto o SELinux dá sua parcela de contribuição caso você decida rodar um servidor web ou um servidor proxy na máquina.

A principal observação com relação à segurança é que o Fedora instala o servidor SSH por padrão e deixa a porta 22 aberta no firewall. Como ele aceita logins como root, temos uma possibilidade real de acesso caso você use alguma senha fraca e um invasor obstinado dê a sorte de adivinhá-la. Para evitar isso, feche a porta 22 na configuração do firewall se não for usar o SSH (e desabilite o serviço “sshd”) e use boas senhas.

Sobre o Autor

Redes Sociais:

Deixe seu comentário

X