Estou instalando um novo servidor centos 5.4 e gostaria de ter um conjunto de regras limpas para a inicialização do mu iptables.
Quais seriam as boas regras para começar?
Este é um bom ponto de partida:
# Allow outgoing traffic and disallow any passthroughs
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
# Allow traffic already established to continue
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Allow ssh, ftp and web services
iptables -A INPUT -p tcp --dport ssh -i eth0 -j ACCEPT
iptables -A INPUT -p tcp --dport ftp -i eth0 -j ACCEPT
iptables -A INPUT -p udp --dport ftp -i eth0 -j ACCEPT
iptables -A INPUT -p tcp --dport ftp-data -i eth0 -j ACCEPT
iptables -A INPUT -p udp --dport ftp-data -i eth0 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -i eth0 -j ACCEPT
# Allow local loopback services
iptables -A INPUT -i lo -j ACCEPT
# Allow pings
iptables -I INPUT -p icmp --icmp-type destination-unreachable -j ACCEPT
iptables -I INPUT -p icmp --icmp-type source-quench -j ACCEPT
iptables -I INPUT -p icmp --icmp-type time-exceeded -j ACCEPT
Para qual é essa regra:
iptables -A INPUT -p tcp --dport domain -i eth0 -j ACCEPT
ATUALIZAÇÃO:
Será um servidor web com FTP (obrigatório), apache, SSH, mysql.
Respostas:
Suas regras do IPTables parecem ser mais apropriadas para o seu servidor. Mas eu sugeriria algumas mudanças possíveis:
A menos que você precise permitir acesso SSH, MySQL e FTP de toda a Internet, seria muito mais seguro usar a opção '--source' para restringir o acesso nessas portas somente a partir de determinados endereços IP aprovados. Por exemplo, para permitir apenas o acesso SSH a partir do endereço IP 71.82.93.101, você alteraria a quinta regra para 'iptables -A INPUT -p tcp --dport ssh --source 71.82.93.101 -i eth0 -j ACCEPT'. Você provavelmente precisará adicionar uma regra separada para cada endereço IP individual que deseja permitir; consulte esta pergunta para obter mais informações sobre isso: iptables IPs de origem múltipla .
A menos que esta máquina esteja executando um servidor DNS, você provavelmente desejará bloquear o acesso à porta 'domínio' (53). Para fazer isso, basta remover a linha 'iptables -A INPUT -p tcp --dport domain -i eth0 -j ACCEPT'. (Isso também deve responder à sua pergunta final, BTW.) Se você estiver realmente executando um servidor DNS, deixe essa regra no lugar.
Se você precisar permitir acesso remoto ao cliente MySQL pela rede, precisará adicionar a linha 'iptables -A INPUT -p tcp --dport 3306 -i eth0 -j ACCEPT' para abrir o acesso externo à porta MySQL padrão . Mas NÃO faça isso a menos que seja realmente necessário - se você precisar apenas de acesso local ao MySQL (para um aplicativo PHP executando no Apache, por exemplo), não precisará fornecer acesso remoto ao MySQL. E, a menos que você queira correr o risco de ser invadido, se abrir a porta 3306 para a rede, certifique-se de exigir senhas fortes para todas as contas de usuário do MySQL e que os pacotes do servidor MySQL estejam atualizados.
Um de seus comentários ('Permitir ssh, dns, ldap, ftp e serviços da web') menciona serviços LDAP, mas essa regra não existe em sua configuração. Isso acontece muito quando eu copio e modifico uma configuração de exemplo. Isso não afetará a função, mas eu corrigiria o comentário, pois comentários enganosos podem causar indiretamente, confundindo você ou outro administrador no futuro.
Na minha experiência, é difícil criar um conjunto perfeito de regras do IPTables, mas acho que você definitivamente está no caminho certo. Além disso, boa sorte em aprender mais sobre o IPTables - essas regras podem parecer complexas a princípio, mas é uma habilidade muito útil para qualquer administrador de sistemas Linux.
fonte
Definitivamente, procure restringir também o tráfego de saída.
Eu já vi muitos casos em que as explorações do PHP resultam em alguém usando 'curl' ou 'wget' para buscar código malicioso de outro lugar e depois executá-lo no seu servidor para ingressar em uma botnet.
Se você não espera que o Apache (como exemplo) precise conversar com outros sites, restrinja o tráfego e economize um pouco de dor na linha!
fonte
Essas regras estão prontas para serem importadas via "iptables-restore":
E só para constar ... essas políticas padrão também devem ser definidas, SE o iptables-restore acima não for usado:
fonte
Por que você permite ftp e dns? O seu servidor fornece esses serviços? O FTP não deve realmente ser usado, exceto em alguns casos de uso muito específicos, use SFTP (não o FTPS). Além disso, por que especificar todas as outras portas por nomes simbólicos e http por numérico 80? Você acabou de copiar isso de outro lugar? Nenhuma cópia e aconselhamento compensará a falta de entendimento. Certifique-se de entender TCP, IP, firewalls e os protocolos dos serviços que você irá fornecer.
fonte