Capítulo 4. Segurança no Linux

Sumário

4.1. Mascaramento e firewalls
4.2. SSH: operações seguras de rede
4.3. Criptografando partições e arquivos
4.4. Delimitando privilégios com o AppArmor
4.5. Segurança e confidencialidade

Resumo

O mascaramento e um firewall garantem um fluxo de dados e um intercâmbio de dados controlados. O SSH (secure shell) permite que você efetue login em hosts remotos por uma conexão criptografada. A criptografia de arquivos ou partições inteiras protege seus dados no caso de terceiros obterem acesso ao seu sistema. Encontre instruções técnicas e informações sobre aspectos de segurança das redes Linux.


4.1. Mascaramento e firewalls

Sempre que o Linux é usado em um ambiente de rede, você pode usar as funções de kernel que permitem a manipulação de pacotes de rede, para manter uma separação entre as áreas de rede interna e externa. O framework do filtro de rede do Linux oferece meios de estabelecer um firewall eficiente que mantém redes diferentes distanciadas. Com a ajuda de iptables, uma estrutura de tabela genérica para a definição de conjuntos de regras, controle precisamente os pacotes com permissão de passagem por uma interface de rede. Um filtro de pacote como esse pode ser configurado facilmente com a ajuda do SuSEfirewall2 e o módulo YaST correspondente.

4.1.1. Filtragem de pacotes com iptables

Os componentes netfilter e iptables são responsáveis pela filtragem e manipulação de pacotes de rede, assim como pela NAT (Network Address Translation - Conversão de Endereços de Rede). Os critérios de filtragem e quaisquer ações associadas a eles são armazenados em cadeias, que precisam estar relacionadas uma após a outra, por pacotes de rede individuais, à medida que forem chegando. As cadeias a serem relacionadas são armazenadas em tabelas. O comando iptables permite alterar esses conjuntos regras e tabelas.

O kernel do Linux mantém três tabelas, cada qual para uma categoria de funções específicas do filtro do pacote:

filter

Essa tabela contém o volume das regras do filtro, pois ele implementa o mecanismo de filtragem de pacotes em sentido restrito, que determina se os pacotes passam por (ACCEPT) ou se são descartados (DROP), por exemplo.

nat

Essa tabela define quaisquer mudanças feitas nos endereços de origem e de destino dos pacotes. O uso dessas funções permite implementar um mascaramento, que é um caso especial da NAT, usado para vincular uma rede privada à Internet.

mangle

As regras determinadas nessa tabela possibilitam manipular valores armazenados em cabeçalhos IP (como o tipo do serviço).

Figura 4.1. iptables: Caminhos possíveis de um pacote

iptables: Caminhos possíveis de um pacote

Estas tabelas contêm várias cadeias predefinidas para relacionar pacotes:

PREROUTING

Esta cadeia é aplicada a pacotes recebidos.

INPUT

Esta cadeia é aplicada a pacotes destinados aos processos internos do sistema.

FORWARD

Esta cadeia é aplicada a pacotes roteados somente pelo sistema.

OUTPUT

Esta cadeia é aplicada a pacotes originados do próprio sistema.

POSTROUTING

Esta cadeia é aplicada a todos os pacotes enviados.

A Figura 4.1, “iptables: Caminhos possíveis de um pacote” ilustra os caminhos pelos quais um pacote de rede pode viajar em um determinado sistema. Para manter a simplicidade, a figura lista tabelas como partes de cadeias. Contudo, na realidade, essas cadeias estão contidas nas próprias tabelas.

Em um dos casos mais simples possível, um pacote recebido destinado ao próprio sistema chega na interface eth0. Primeiro, o pacote é reconhecido pela cadeia PREROUTING da tabela mangle e, depois, na cadeia PREROUTING da tabela nat. A etapa a seguir, referente ao roteamento do pacote, determina que o destino real do pacote é um processo do próprio sistema. Depois de passar pelas cadeias INPUT das tabelas mangle e filter, o pacote por fim chega ao seu destino, desde que as regras da tabela filter tenham sido realmente relacionadas.

4.1.2. Informações básicas sobre mascaramento

Mascaramento é a forma específica do Linux para a NAT. Pode ser usado para conectar uma LAN pequena (em que hosts usam endereços IP da faixa privada — consulte a Seção 18.1.2, “Máscaras de rede e roteamento”) à Internet (em que endereços IP oficiais são usados). Para que os hosts da LAN sejam capazes de se conectar à Internet, seus endereços privados são convertidos em um oficial. Isso é feito no roteador, que atua como gateway entre a LAN e a Internet. O princípio subjacente é bastante simples: o roteador possui mais de uma interface de rede, normalmente uma placa de rede e uma interface separada conectadas à Internet. Enquanto a última vincula o roteador ao mundo externo, uma ou várias outras o vinculam-no aos hosts da LAN. Com esses hosts na rede local conectados à placa de rede (como o eth0) do roteador, eles podem enviar qualquer pacote não destinado à rede local para seus roteadores ou gateways padrão.

[Important]Usando a máscara de rede correta

Ao configurar a rede, verifique se o endereço de broadcast e a máscara de rede são os mesmos para todos os hosts locais. Sem essa verificação, os pacotes poderão não ser roteados corretamente.

Conforme mencionado, sempre que um dos hosts da LAN enviar um pacote destinado a um endereço da Internet, ele irá para o roteador padrão. Entretanto, o roteador precisará estar configurado antes de encaminhar esse pacote. Por razões de segurança, o SUSE Linux não habilita essa função em sua instalação padrão. Para habilitá-la, configure a variável IP_FORWARD no arquivo /etc/sysconfig/sysctl para IP_FORWARD=yes.

O host de destino da conexão poderá ver o roteador, mas não saberá sobre o host da rede interna, do qual os pacotes são provenientes. Essa é a razão de a técnica ser chamada de mascaramento. Devido à conversão do endereço, o roteador é o primeiro destino de qualquer pacote de resposta. O roteador precisa identificar esses pacotes recebidos e converter seus endereços de destino, para que os pacotes possam ser encaminhados ao host correto na rede local.

Com o roteamento do tráfego de entrada, dependendo da tabela de mascaramento, não há como abrir uma conexão para um host interno pela parte externa. Para uma conexão como essa, não haveria entrada na tabela. Além disso, qualquer conexão já estabelecida possui uma entrada de status que lhe foi designada na tabela; portanto, a entrada não pode ser usada por outra conexão.

Como conseqüência de tudo isso, talvez você tenha alguns problemas com um número de protocolos de aplicativos, como ICQ, cucme, IRC (DCC, CTCP) e FTP (no modo PORTA). Netscape, o programa padrão de FTP, e muitos outros usam o modo PASV. Esse modo passivo é bem menos problemático, contanto que o mascaramento e a filtragem de pacotes estejam envolvidos.

4.1.3. Informações básicas sobre firewall

Firewall é, provavelmente, o termo mais amplamente usado para descrever um mecanismo que fornece e gerencia um link entre redes e, ao mesmo tempo, controla o fluxo de dados entre eles. Falando estritamente, o mecanismo descrito nesta seção é chamado de filtro de pacote. Um filtro de pacote regula o fluxo de dados de acordo com certos critérios, como protocolos, portas e endereços IP. Isso permite bloquear pacotes que, de acordo com seus respectivos endereços, não deveriam entrar em sua rede. Para permitir acesso público ao seu servidor Web, por exemplo, abra explicitamente a porta correspondente. Entretanto, um filtro de pacote não explora o conteúdo de pacotes com endereços legítimos, como aqueles direcionados para o servidor Web. Por exemplo, se pacotes recebidos tivessem a finalidade de comprometer um programa CGI no servidor Web, o filtro de pacote os deixaria entrar mesmo assim.

Um mecanismo mais eficiente, porém mais complexo, é a combinação de vários tipos de sistemas, como um filtro de pacote interagindo com um proxy ou gateway de aplicativo. Nesse caso, o filtro de pacote rejeita qualquer pacote destinado a portas desabilitadas. Somente pacotes direcionados ao gateway do aplicativo são aceitos. Esse gateway ou proxy finge ser o cliente real do servidor. De certo modo, tal proxy poderia ser considerado um host de mascaramento no nível de protocolo usado pelo aplicativo. Um exemplo desse proxy é o Squid, um servidor de proxy HTTP. Para usar o Squid, o browser precisa estar configurado para se comunicar através do proxy. Quaisquer páginas HTTP solicitadas são atendidas pelo cache do proxy e as não encontradas no cache são obtidas na Internet pelo proxy. Como exemplo adicional, o SUSE proxy-suite (proxy-suite) oferece um proxy para o protocolo FTP.

A seção a seguir enfoca o filtro de pacote que vem com o SUSE Linux. Para obter mais informações sobre firewall e filtragem de pacotes, leia o HOWTO do Firewall, incluído no pacote howto. Se esse pacote estiver instalado, leia o HOWTO com o less /usr/share/doc/howto/en/txt/Firewall-HOWTO.gz.

4.1.4. SuSEfirewall2

O SuSEfirewall2 é um script que lê as variáveis configuradas em /etc/sysconfig/SuSEfirewall2 para gerar um conjunto de regras iptables. Ele define três zonas de segurança, apesar de somente a primeira e a segunda serem consideradas na configuração de amostra a seguir:

Zona externa

Considerando que não há como controlar o que ocorre na rede externa, os hosts precisam ser protegidos contra ela. Na maioria dos casos, a rede externa é a Internet, mas poderia ser outra rede sem segurança, como uma WLAN.

Zona interna

Ela se refere à rede privada, normalmente, a LAN. Se os hosts dessa rede usam endereços IP do intervalo privado (consulte a Seção 18.1.2, “Máscaras de rede e roteamento”), habilite a NAT, para que os hosts da rede interna possam acessar a externa.

DMZ (Demilitarized Zone - Zona Desmilitarizada)

Apesar de os hosts localizados nessa zona poderem ser localizados tanto da rede externa quanto da interna, eles não conseguem acessar sozinhos a rede interna. Essa configuração pode ser usada para incluir uma linha adicional de defesa na frente da rede interna, pois os sistemas DMZ ficam isolados da rede interna.

Qualquer tipo de tráfego de rede não explicitamente permitido pelo conjunto de regras de filtragem é suprimido por iptables. Portanto, cada uma das interfaces com tráfego recebido precisa ser posicionada em uma das três zonas. Para cada uma das zonas, defina os serviços ou protocolos permitidos. O conjunto de regras é aplicado somente em pacotes originados de hosts remotos. Pacotes gerados localmente não são capturados pelo firewall.

A configuração pode ser executada com o YaST (consulte Seção 4.1.4.1, “Configurando com o YaST”). Também pode ser feita manualmente no arquivo /etc/sysconfig/SuSEfirewall2, que contém vários comentários. Além disso, vários cenários de exemplo estão disponíveis em /usr/share/doc/packages/SuSEfirewall2/EXAMPLES.

4.1.4.1. Configurando com o YaST

[Important]Configuração automática de firewall

Depois da instalação, o YaST inicia um firewall automaticamente em todas as interfaces configuradas. Se um servidor for configurado e ativado no sistema, o YaST poderá modificar a configuração de firewall gerada automaticamente com as opções Abrir Portas da Interface Selecionada no Firewall ou Abrir Portas no Firewall nos módulos de configuração do servidor. Algumas caixas de diálogo do módulo do servidor incluem o botão Detalhes do Firewall para ativar serviços e portas adicionais. O módulo de configuração de firewall do YaST pode ser usado para ativar, desativar ou reconfigurar o firewall.

As caixas de diálogo do YaST para a configuração gráfica podem ser acessadas no Centro de Controle do YaST. Selecione Segurança e Usuários+Firewall. A configuração é dividida em sete seções que podem ser acessadas diretamente da estrutura em árvore no lado esquerdo.

Inicialização

Configure o comportamento de inicialização nesta caixa de diálogo. Em uma instalação padrão, o SUSEfirewall2 é iniciado automaticamente. Você também pode iniciar e parar o firewall aqui. Para implementar suas novas configurações em um firewall em execução, use Salvar Configurações e Reiniciar Firewall Agora.

Figura 4.2. A configuração de firewall do YaST

A configuração de firewall do YaST
Interfaces

Todas as interfaces de rede conhecidas estão listadas aqui. Para remover uma interface de uma zona, selecione-a, pressione Modificar e escolha Nenhuma Zona Designada. Para adicionar uma interface a uma zona, selecione-a, pressione Modificar e escolha qualquer das zonas disponíveis. Você também pode criar uma interface especial com suas próprias configurações usando Personalizar.

Serviços permitidos

Essa opção é necessária para oferecer serviços do seu sistema para uma zona da qual ele é protegido. Por padrão, o sistema é protegido somente de zonas externas. Permita, de forma explícita, os serviços que devem estar disponíveis para hosts externos. Ative os serviços após selecionar a zona desejada em Serviços permitidos para zona selecionada.

Mascaramento

O mascaramento oculta sua rede interna das redes externas, como a Internet, e habilita hosts na rede interna para acessarem a rede externa de forma transparente. As solicitações da rede externa para a interna são bloqueadas e as solicitações da rede interna parecem ser emitidas pelo servidor de mascaramento quando vistas externamente. Se serviços especiais de uma máquina interna precisarem estar disponíveis para a rede externa, adicione regras especiais de redirecionamento ao serviço.

Broadcast

Nessa caixa de diálogo, configure as portas UDP que permitem broadcasts. Adicione os serviços ou números de porta solicitados à zona apropriada, separados por espaços. Consulte também o arquivo /etc/services.

O registro de broadcasts não aceitos pode ser habilitado aqui. Isso pode ser problemático, pois os hosts do Windows usam broadcasts para sua identificação e, assim, geram muitos pacotes que não são aceitos.

Suporte a IPsec

Configure nesta caixa de diálogo se o serviço IPsec deve estar disponível para a rede externa. Configure quais pacotes são confiáveis em Detalhes.

Nível de registro

Há duas regras para o registro: pacotes aceitos e não aceitos. Pacotes não aceitos são DESCARTADOS ou REJEITADOS. Selecione Registrar Tudo, Registrar Apenas Críticos ou Não Registrar Nenhum para as duas opções.

Ao concluir a configuração do firewall, saia dessa caixa de diálogo com Próximo. Será aberto um resumo orientado por zona da configuração do firewall. Nele, verifique todas as configurações. Todos os serviços, portas e protocolos permitidos estão listados nesse resumo. Para modificar a configuração, use Voltar. Pressione Aceitar para gravar as configurações.

4.1.4.2. Configurando manualmente

Os parágrafos a seguir fornecem instruções passo a passo para executar uma configuração bem-sucedida. Cada item de configuração é marcado se é relevante para firewall ou para mascaramento. Os aspectos relacionados à DMZ, conforme mencionado no arquivo de configuração, não serão abordados aqui. Eles são aplicáveis somente a uma infra-estrutura de rede mais complexa, encontrada em organizações maiores (redes corporativas), que exigem uma configuração extensa e conhecimento profundo sobre o assunto.

Primeiro, use o módulo do YaST Serviços do Sistema (Nível de Execução) para habilitar o SuSEfirewall2 no seu nível de execução (provavelmente, 3 ou 5). Ele configura os symlinks para o SuSEfirewall2_* scripts nos diretórios /etc/init.d/rc?.d/.

FW_DEV_EXT (firewall, mascaramento)

O dispositivo vinculado à Internet. Para obter uma conexão via modem, digite ppp0. Para obter um link ISDN, use o ippp0. As conexões DSL usam o dsl0. Especifique auto para usar a interface que corresponde à rota padrão.

FW_DEV_INT (firewall, mascaramento)

O dispositivo vinculado à rede privada, interna (como a eth0). Deixe esse espaço vazio se não houver rede interna e o firewall protegerá somente o host em que estiver sendo executado.

FW_ROUTE (firewall, mascaramento)

Se você precisar da função mascaramento, configure como yes. Os hosts internos não ficarão visíveis de fora, pois seus endereços de rede privada (por exemplo, 192.168.x.x) serão ignorados pelos roteadores da Internet.

Para um firewall sem mascaramento, configure como yes somente se desejar permitir acesso à rede interna. Os hosts internos precisam usar IPs registrados oficialmente nesse caso. No entanto, normalmente você não deveria permitir o acesso externo à sua rede interna.

FW_MASQUERADE (mascaramento)

Configure como yes, se você precisar da função mascaramento. Com isso, você terá uma conexão praticamente direta com a Internet para os hosts internos. É mais seguro haver um servidor proxy entre os hosts da rede interna e a Internet. O mascaramento não é necessário para serviços fornecidos por um servidor proxy.

FW_MASQ_NETS (mascaramento)

Especifique as redes ou os hosts que devem ser mascarados, deixando um espaço entre as entradas individuais. Por exemplo:

FW_MASQ_NETS="192.168.0.0/24 192.168.10.1"
FW_PROTECT_FROM_INT (firewall)

Configure como yes e o host do firewall ficará protegido contra ataques que surgirem em sua rede interna. Os serviços só estarão disponíveis para a rede interna se estiverem explicitamente habilitados. Consulte também os serviços FW_SERVICES_INT_TCP e FW_SERVICES_INT_UDP.

FW_SERVICES_EXT_TCP (firewall)

Digite as portas TCP que devem ficar disponíveis. Deixe esse espaço vazio para uma estação de trabalho residencial normal, que não deve oferecer serviços.

FW_SERVICES_EXT_UDP (firewall)

Deixe esse espaço vazio, a menos que você execute um serviço UDP e deseje disponibilizá-lo externamente. Os serviços que usam o UDP incluem os servidores DNS, IPSec, TFTP, DHCP e outros. Nesse caso, digite as portas UDP a serem usadas.

FW_SERVICES_INT_TCP (firewall)

Com essa variável, defina os serviços disponíveis para a rede interna. A notação é a mesma do FW_SERVICES_EXT_TCP, mas as configurações são aplicadas à rede interna. A variável só precisará ser configurada se o FW_PROTECT_FROM_INT estiver configurado como yes.

FW_SERVICES_INT_UDP (firewall)

Consulte o FW_SERVICES_INT_TCP.

Depois de configurar o firewall, teste sua configuração. Os conjuntos de regras de firewall são criados digitando SuSEfirewall2 start como root. Depois, use telnet, por exemplo, de um host externo para ver se a conexão foi realmente negada. Depois disso, reveja /var/log/messages, em que deverá aparecer algo semelhante a:


Mar 15 13:21:38 linux kernel: SFW2-INext-DROP-DEFLT IN=eth0 
OUT= MAC=00:80:c8:94:c3:e7:00:a0:c9:4d:27:56:08:00 SRC=192.168.10.0 
DST=192.168.10.1 LEN=60 TOS=0x10 PREC=0x00 TTL=64 ID=15330 DF PROTO=TCP 
SPT=48091 DPT=23 WINDOW=5840 RES=0x00 SYN URGP=0 
OPT (020405B40402080A061AFEBC0000000001030300)

Outros pacotes que testam a configuração de um firewall são o nmap ou o nessus. A documentação do nmap pode ser encontrada em /usr/share/doc/packages/nmap e a do nessus no diretório /usr/share/doc/packages/nessus-core depois que o respectivo pacote estiver instalado.

4.1.5. Mais informações

As informações mais recentes e outras documentações sobre o pacote SuSEfirewall2 podem ser encontradas em /usr/share/doc/packages/SuSEfirewall2. A home page do projeto iptables e netfilter, http://www.netfilter.org, oferece uma grande coleção de documentos em vários idiomas.