Curso Certificação Linux LPI-102: Segurança

Existem várias ferramentas de segurança que podem auxiliar a vida de um administrador de redes/sistemas no Linux. Aqui abordarei duas fundamentais para obter tal segurança

Vale ressaltar que segurança vai mais além, mas esses dois já estarão de bom tamanho para o entendimento de segurança, em diversos outros aplicativos.

IPTABLES

Para verificar quais regras estão criadas, se existir, o comando é

iptables -L

Se não retornar nada é porque o pacote não está instalado, então você pode instalá-lo pelo comando

apt-get install iptables

Rejeitar pacotes de uma porta

iptables -A INPUT -p tcp --dport 445 -j DROP

Aceitar pacotes de uma porta

iptables -A INPUT -p tcp --dport 445 -j ACCEPT

Desativar o iptables, isso libera todas as portas

iptables -F

Essa regra abaixo fecha todas as portas, porém voçê conecta a internet normalmente, mas aplicativos como Apache por exemplo não funcionará no localhost.

iptables -A INPUT -p tcp --syn -j DROP

Aqui abaixo a mesma regra, porém para o protocolo UDP.

iptables -A INPUT -i ppp0 -p udp --dport 0:30000 -j DROP

Lembrando que as tabelas do IPTABLES são lidas de cima pra baixo, ou seja, se você quiser fechar todas as portas e liberar somente o apache a porta 80, você precisa primeiro criar a regra que libera a porta 80 (ou as portas que você deseja), pra só depois fechar todas as outras,

iptables -A INPUT -p tcp --destination-port 80 -j ACCEPT

, depois:

iptables -A INPUT -p tcp --syn -j DROP

Para acessar pacotes de determinados IPs de uma rede interna, ou de uma determinada rede, você usar os comandos abaixo

iptables -A INPUT -p tcp --syn -s 192.168.1.107/255.255.255.0 -j ACCEPT
iptables -A INPUT -p tcp --syn -s 192.168.0.0/255.255.255.0 -j ACCEPT

Aceitar as requisições do IP 192.168..107 e no comando seguinte, aceitará todas as requisições da rede interna, se logo depois vc fechar tudo pra internet, a regra de aceitar será válida, o inverso não.

Para configurações de compartilhamento, seria regras de NAT,assim Para compartilhar a conexão do modem com a rede local

modprobe iptable_nat
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
echo 1 > /proc/sys/net/ipv4/ip_forward

Para compartilhar uma conexão via ADSL ou cabo instalada na eth0

modprobe iptable_nat
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
echo 1 > /proc/sys/net/ipv4/ip_forward

Para desativar o compartilhamento, você deve usar o comando

iptables -t nat -F.

Uma observação é que estas regras não incluem um servidor DHCP, você deve configurar os clientes com endereço IP fixo ou então ativar o serviço DHCPD na sua distribuição.Será necessário também configurar os DNS, se não souber os endereços do seu provedor, você pode usar os DNS públicos do Google 8.8.8.8 e 8.8.4.4 .

Mais uma linha interessante de se adicionar, que protege contra pacotes danificados (usados em ataques DoS por exemplo) é

iptables -A FORWARD -m unclean -j DROP

Esta linha deve ser adicionada antes das demais). Depois de todas as regras criadas, voçê criar um script em Shell e gravar na pasta /usr/bin/ com o nome que você deseja e poderá executar esse nome no terminal que automaticamente, será criadas as regras, lembrando que para isso tem de estar com permissão de execução e deve ser o usuário root.Você também pode torná-lo inicializável, em Debian e Debian-Likes(Ubuntu, Linux Mint,…) com o comando:

update-rc.d nome_do_script defaults

Para excluir basta trocar o defaults por remove. Para fazer um forward(Redirecionamento, exemplo: uma solicitação de jogo na porta 27020, você quer que seja direcionada ao PC 192.168.1.107 da sua rede)com Iptables.

modprobe iptable_nat
iptables -t nat -A PREROUTING -i etho -p tcp --dport 22 -j DNAT --to-dest 192.168.1.107
iptables -A FORWARD -p tcp -i eth0 --dport 22 -d 192.168.1.107 -j ACCEPT

Você pode repetir o comando várias vezes para direcionar varias portas diferentes para várias máquinas. Naturalmente uma mesma porta não pode ser fowardada duas vezes.Para um range de portas, o Counter Strike pode usar mesmo da 27015 até 27030, se você não qual porta dessa range do seu colega está aberta, então você pode abrir esta faixa de portas assim

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 27015:27030 -j DNAT --to-dest 192.168.1.107
iptables -A FORWARD -p tcp -i eth0 --dport 27015:27030 -d 192.168.1.107 -j ACCEPT

Mas você pode utilizar o Nmap para verificar quais portas estão abertas no seu micro, para instalá-lo no Debian e Debian-Likes, basta

apt-get install nmap

Para analisar em rede interna use o IP interno, para análise à internet use seu IP externo, para loopback use

nmap 127.0.0.1

Há também um serviço online que tem como você efetuar testes de portas e de invasões, eu uso muito ele, é o http://www.grc.com/

TCPWRAPPER

O TCP Wrappers são usados para aplicar regras de acesso aos servidores utilizados em sistema, podendo permitir ou negar as conexões a eles. Eles são controlados por dois arquivos: /etc/hosts.allow (configuração de acessos permitidos para determinados IPs) e /etc/hosts.deny (configuração de acesso negados para determinados IPs) TCP. Sigla para “Transmission Control Protocol”.

/etc/hosts.allow

– Se uma regra deste arquivo for atendida, o acesso ao serviço pe permitido

/etc/hosts.deny
  • Se uma regra deste arquivo for atendida, o acesso ao serviço é negado

As regras destes arquivos podem ser contruída de forma a corresponder a todos os serviços ou, alternativamente, a determinados serviços específicos. Se não houver nenhuma correspondência nos dois arquivos, o acesso ao serviço é permitido. É comum se especificar regras particulares no arquivo hosts.allow e específicar uma negativa geral no arquivo hosts.deny, limitando assim o acesso aos clientes que você especificamente permitir. A linguagem dos arquivos de controle consiste de uma lista de serviços, seguida por dois-pontos, seguida por uma lista de hosts. Os hosts podem ser específicados por nome ou por endereço IP.

Para negar acesso a todos os serviços, exceto ao ftp no domínio local, poderiam ser usados estes dois arquivos simples

hosts.allow

Existem dezenas de possibilidades de configuração para o tcp_wrappers e é possível estudá-las em extensão através das páginas de manual hosts_access e hosts_options. Portanto, serão ilustrados apenas alguns casos interessantes do uso desta ferramenta. As regras de controle de acesso, existentes nestes dois arquivos, têm o seguinte formato

[lista_de_daemons] [: lista_de_clientes] [: comando]

lista_de_daemons: Lista de um ou mais nomes de daemons (como especificados no /etc/inetd.conf), ou curingas.

lista_de_clientes: Lista de um ou mais endereços ou nomes de máquinas, padrões ou curingas utilizados para especificar quais clientes podem e quais não podem acessar o serviço.

comando (opcional): É possível executar um comando sempre que uma regra casa com um padrão e é utilizada. Veja exemplos a seguir. Como citado anteriormente, curingas podem ser utilizados tanto na lista de daemons quanto na lista de clientes. Entre os existentes, pode-se destacar os seguintes

/etc/hosts.allow

O arquivo /etc/hosts.allow é um arquivo de configuração do programa /usr/sbin/tcpd. O arquivo hosts.allow contém regras descrevendo que hosts tem permissão de acessar um serviço em sua máquina.

O formato do arquivo é muito simples

/etc/hosts.allow
# lista de serviços: lista de hosts : comando

Exemplos incluem: gw.vk2ktj.ampr.org para conferir com um endereço de computador específico, .uts.edu.au para atingir qualquer endereço de computador finalizando com aquele string. Use 200.200.200. para conferir com qualquer endereço IP iniciando com estes dígitos. Existem alguns parâmetros especiais para simplificar a configuração, alguns destes são: ALL atinge todos endereços, LOCAL atinge qualquer computador que não contém um “.” (ie. está no mesmo domínio de sua máquina) e PARANOI__D atinge qualquer computador que o nome não confere com seu endereço (__falsificação de nome).

Existe também um último parâmetro que é também útil: o parâmetro EXCEPT lhe permite fazer uma lista de exceções. Isto será coberto em um exemplo adiante.

Existem um número de expansões que podem ser incluídas, alguns exemplos comuns são: %h expande o endereço do computador que está conectado ou endereço se ele não possuir um nome, %d o nome do daemon sendo chamado.

Se o computador tiver permissão de acessar um serviço através do /etc/hosts.allow, então o /etc/hosts.deny não será consultado e o acesso será permitido.

Como exemplo

/etc/hosts.allow
# Permite que qualquer um envie e-mails
in.smtpd: ALL
# Permitir telnet e ftp somente para hosts locais e myhost.gnulinuxbr.com
in.telnetd, in.ftpd: LOCAL, myhost.gnulinuxbr.com

Qualquer modificação no arquivo /etc/hosts.allow entrará em ação após reiniciar o daemon inetd. Isto pode ser feito com o comando kill -HUP [pid do inetd], o pid do inetd pode ser obtido com o comando

ps ax grep inetd.
/etc/hosts.deny

O arquivo /etc/hosts.deny é um arquivo de configuração das regras descrevendo quais computadores não tem a permissão de acessar um serviço em sua máquina.

Um modelo simples deste arquivo se parece com isto

/etc/hosts.deny
# Bloquear o acsso SSH para todos, exceto para a rede 10.0.0.0
sshd: ALL EXCEPT 10.0.0.0/24

Tendo um padrão ALL: ALL no arquivo /etc/hosts.deny e então ativando especificamente os serviços e permitindo computadores que você deseja no arquivo /etc/hosts.allow é a configuração mais segura.

Qualquer modificação no arquivo /etc/hosts.deny entrará em ação após reiniciar o daemon inetd. Isto pode ser feito com o comando kill -HUP [pid do inetd], o pid do inetd pode ser obtido com o comando ps ax|grep inetd. Importante saber O arquivo hosts.deny é consultado depois de hosts.allow, permitindo ao administrador definir regras específicas de permissão, que serão aplicadas antes das regras de proibição ou de uma negativa geral.

Exemplo de Configuração do tcp_wrappers

Exemplos dos arquivos /etc/hosts.allow e /etc/hosts.deny

Arquivo /etc/hosts.deny
ALL:ALL
Arquivo /etc/hosts.allow
ALL: localhost
in.ftpd: .minhaorganizacao
ipop3d: ALL

Configuração do tcp_wrappers menos restritiva, considere o mesmo arquivo /etc/hosts.deny do exemplo anterior

Configuração do tcp_wrappers menos restritiva

Arquivo /etc/hosts.allow ALL: localhost in.ftpd: .minhaorganizacao 10.0.0.0/255.255.255.0 192.168 ipop3d: ALL EXCEPT gnulinuxbr.com

Neste último caso, máquinas da rede “10.0.0.0/255.255.255.0” e máquinas em que o endereço IP inicie por “192.168.” também podem acessar o serviço FTP. Note que foi utilizado um operador novo para o serviço ipop3d: EXCEPT. Isto permitiu que o acesso a este serviço fosse liberado para todos, exceto para máquinas da rede “gnulinuxbr.com”. O operador EXCEPT pode ser utilizado tanto na lista de clientes quanto na lista de serviços. Por exemplo, a linha

ALL EXCEPT in.ftpd: ALL

no arquivo /etc/hosts.allow permite o acesso a todos os serviços, exceto o FTP, para qualquer máquina. Todos os acessos, bem-sucedidos ou não, são registrados através do syslog, em /var/log/secure. É recomendado que este arquivo seja periodicamente analisado à procura de tentativas de invasão. Testando a Configuração Negue certos serviços para uma máquina de sua rede (como por exemplo o serviço telnet) e após reinicializar o xinetd, procure fazer acessos da máquina onde o serviço foi negado.