2.1. SELinux
O
SELinux é uma implementação de segurança do
Fedora, que por padrão deveria oferecer uma maior segurança. Porém normalmente causa mais problemas do que vantagens (eu tive alguns problemas. Alguns serviços não estavam funcionando, foi então que descobri que os serviços estavam corretamente configurados, mas o SELinux estava causando problemas).
Além do mais, em minha opinião, você não precisa dele para configurar um sistema seguro. Portanto aconselho a desabilitá-lo. O config do SELinux pode ser encontrado em:
/etc/selinux/config. Edite-o e mude o SELINUX=enforcing para SELINUX=disabled:
# vim /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of these two values:
# targeted - Targeted processes are protected,
mls - Multi Level Security protection.
#
SELINUXTYPE=targeted
Reinicie o sistema:
# reboot
ou
# init 6
2.2. Introdução ao firewall
Firewall é uma extensão de segurança dado a um software/dispositivo que tem como seu principal objetivo aplicar uma política de segurança entre seu computador e a internet, ou a um ponto especifico de controle de sua rede. Explicando de uma maneira genérica, o firewall é como os seguranças da Casa Branca: só deixa entrar aqueles que são permitidos (total acesso), barram os que não são permitidos (acesso negado) ou direcionam os conhecidos a um determinado local (acesso parcial).
Nesse abordaremos o
Iptables, o qual está presente nos kernels atuais. O Iptables é um firewall statefull a nível de pacotes e funciona baseado no endereço/porta de origem/destino do pacote, prioridade etc. Podemos usar o Iptables para uma gama de possibilidades, dependendo apenas da sua imaginação.
2.2.1. Tabelas e chains
Tabelas são os locais usados para armazenar os chains.
Chains são os locais onde são armazenados os conjuntos de regras definidas pelo usuário.
Existem 3 tabelas disponíveis no Iptables: filter, nat, mangle.
Nota: os nomes dos chains são case-sensitive, o chain output é completamente diferente de OUTPUT.
- filter - tabela padrão, contém 3 chains:
--INPUT (para pacotes destinados à própria máquina)
--OUTPUT (para pacotes gerados localmente)
--FORWARD (qualquer pacote que atravessa o firewall, oriundo de uma máquina e direcionado a outra)
- nat - usada para dados que geram outra conexão. Contém 3 chains:
--PREROUTING (para alterar pacotes recebidos antes do roteamento)
--OUTPUT (para alterar localmente pacotes gerados antes do roteamento)
--POSTROUTING (para mudar o endereço de origem das conexões para algo diferente)
- mangle - usada em ações especiais para o tratamento do tráfego que atravessa os chains. Seus chains são:
--PREROUTING - consultado quando os pacotes precisam ser modificados logo que chegam;
--POSTROUTING - consultado quando os pacotes precisam ser modificados após o tratamento de roteamento
--INPUT - consultado quando os pacotes precisam ser modificados antes que cheguem à máquina (o próprio servidor, antes de ser tratado por qualquer outro chain);
--OUTPUT - consultado quando os pacotes precisam ser modificados antes de sair da máquina;
--FORWARD - consultado quando os pacotes precisam ser modificados antes de serem redirecionados para outra interface.
2.3. NAT
"O
NAT não é um protocolo nem um padrão. O NAT é apenas uma série de tarefas que um roteador (ou equipamento equivalente) deve realizar para converter endereços IPs entre redes distintas. Um equipamento que tenha o recurso de NAT (sigla em inglês: Network Address Translation ou Tradução de Endereço de Rede) deve ser capaz de analisar todos os pacotes de dados que passam por ele e trocar os endereços desses pacotes de maneira adequada. Vejamos agora como é fácil fazer um compartilhamento de acesso (NAT) no Linux com uma pequena ajuda do iptables"
Para fazer um nat basta você editar o arquivo
rc.local que está em
/etc/rc.d e adicionar as seguintes linhas ao seu conteúdo:
# Compartilha Conexão
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
echo "1" > /proc/sys/net/ipv4/ip_forward
Nota: a placa de rede que se conecta a internet é eth1, isso pode mudar de acordo com sua configuração, podendo variar para eth0, ppp0 etc.
Como queremos que apenas as regras que adicionamos sejam executadas, antes de tudo, é necessário limpar quaisquer regras do firewall existente. Adicione as seguintes linhas antes da regra que compartilha conexão:
# Limpando Regras
iptables -F
iptables -X
iptables -Z
iptables -F INPUT
iptables -F OUTPUT
iptables -F FORWARD
iptables -F -t nat
iptables -X -t nat
iptables -F -t mangle
iptables -X -t mangle
echo " Limpando Regras ..............................[ OK ]"
# Definindo Política Padrão
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
echo " Alterando política padrão.....................[ OK ]"
Ficando o nosso script da seguinte forma:
# Limpando Regras
iptables -F
iptables -X
iptables -Z
iptables -F INPUT
iptables -F OUTPUT
iptables -F FORWARD
iptables -F -t nat
iptables -X -t nat
iptables -F -t mangle
iptables -X -t mangle
echo " Limpando Regras ..............................[ OK ]"
# Definindo Política Padrão
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
echo " Alterando política padrão.....................[ OK ]"
# Compartilha conexão
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
echo "1" > /proc/sys/net/ipv4/ip_forward
2.4. Links extras