Boas iptables iniciando regras para um servidor web?

11

Estou instalando um novo servidor centos 5.4 e gostaria de ter um conjunto de regras limpas para o upgrade do 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 o que é 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.

    
por benjisail 03.03.2010 / 10:47

4 respostas

13

Suas regras do IPTables parecem ser mais apropriadas para o seu servidor. Mas eu sugeriria algumas possíveis alterações:

  • A menos que você precise permitir o acesso SSH, MySQL e FTP de toda a Internet, seria muito mais seguro usar a opção '--source' para restringir o acesso a essas portas de determinados endereços IP aprovados, só. Por exemplo, para permitir apenas o acesso SSH do endereço IP 71.82.93.101, você alteraria a quinta regra para 'iptables -A INPUT -p tcp --dportar 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. Veja esta pergunta para obter mais informações sobre isso: iptables vários IPs de origem .

  • A menos que esta máquina esteja executando um servidor DNS, você provavelmente desejará bloquear o acesso à porta 'domain' (53). Para fazer isso, basta remover a linha 'iptables -A INPUT -p tcp --diretório do domínio -i eth0 -j ACCEPT'. (Isso também deve responder à sua pergunta final, BTW.) Se você estiver executando um servidor DNS, deixe essa regra em vigor.

  • Se você precisar permitir o acesso remoto do cliente MySQL através da rede, você precisará adicionar a linha 'iptables -A INPUT -p tcp --dport 3306 -i eth0 -j ACCEPT' para abrir acesso à porta padrão do MySQL. Mas NÃO faça isso a menos que seja realmente necessário - se você só precisa de acesso local ao MySQL (para um aplicativo PHP rodando sob o Apache, por exemplo), você não precisa fornecer acesso remoto ao MySQL. E a menos que você queira se arriscar a ser hackeado, se abrir a porta 3306 para a rede, certifique-se de exigir senhas strongs para todas as contas de usuário do MySQL e que seus pacotes de servidor MySQL estejam atualizados.

  • Um dos seus comentários ('Permitir serviços ssh, dns, ldap, ftp e web') menciona serviços LDAP, mas não existe tal regra em sua configuração. Isso acontece muito comigo quando copio uma configuração de exemplo e a modifico. Isso não afetará a função, mas eu corrigiria o comentário, pois comentários enganosos podem causar indiretamente confundir você ou outro administrador no futuro.

Na minha experiência, é difícil chegar a um conjunto perfeito de regras do IPTables, mas acho que você está definitivamente no caminho certo. Também, boa sorte em aprender mais sobre IPTables - estas regras podem parecer complexas no começo, mas é uma habilidade muito útil para qualquer administrador de sistema Linux ter.

    
por 03.03.2010 / 18:40
4

Definitivamente, procure restringir seu tráfego de saída também.

Já vi muitos casos em que o PHP explora o resultado de alguém usar 'curl' ou 'wget' para buscar código malicioso de outro lugar, depois executá-lo no seu servidor para ingressar em um botnet.

Se você não espera que o Apache (como um exemplo) precise falar com outros sites, restrinja o tráfego e poupe um pouco da dor!

    
por 27.12.2011 / 01:16
1

Estas regras estão prontas para serem importadas via "iptables-restore":

*filter
:INPUT DROP [20:2036]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [93:16260]
-A INPUT -p icmp -m icmp --icmp-type 0 -j ACCEPT -m comment --comment "allow ICMP: echo-reply"
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT -m comment --comment "allow ICMP: echo-request"
-A INPUT -p icmp -m icmp --icmp-type 3 -j ACCEPT -m comment --comment "allow ICMP: destination-unreachable"
-A INPUT -p icmp -m icmp --icmp-type 4 -j ACCEPT -m comment --comment "allow ICMP: source-quench"
-A INPUT -p icmp -m icmp --icmp-type 11 -j ACCEPT  -m comment --comment "allow ICMP: time-exceeded"
-A INPUT -i lo -j ACCEPT -m comment --comment "allow input from the loop-back adapter"
-A INPUT -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT -m comment --comment "allow SSH: ssh"
-A INPUT -i eth0 -p tcp -m tcp --dport 53 -j ACCEPT -m comment --comment "allow DNS: domain"
-A INPUT -i eth0 -p tcp -m udp --dport 53 -j ACCEPT -m comment --comment "allow DNS: domain"
-A INPUT -i eth0 -p tcp -m tcp --dport 21 -j ACCEPT -m comment --comment "allow FTP: ftp"
-A INPUT -i eth0 -p udp -m udp --dport 21 -j ACCEPT -m comment --comment "allow FTP: ftp"
-A INPUT -i eth0 -p tcp -m tcp --dport 20 -j ACCEPT -m comment --comment "allow FTP: ftp-data"
-A INPUT -i eth0 -p udp -m udp --dport 20 -j ACCEPT -m comment --comment "allow FTP: ftp-data"
-A INPUT -i eth0 -p tcp -m tcp --dport 3306 -j ACCEPT -m comment --comment "allow MariaDB/MySQL: mysql"
-A INPUT -i eth0 -p tcp -m tcp --dport 80 -j ACCEPT -m comment --comment "allow HTTP (apache/nxing/lighttpd)"
-A INPUT -i eth0 -p tcp -m tcp --dport 443 -j ACCEPT -m comment --comment "allow HTTPS (apache/nxing/lighttpd)"
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT  -m comment --comment "allow already established connections"
COMMIT

E apenas para o registro ... essas políticas padrão devem ser definidas também, SE o iptables-restore acima não for usado:

iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
    
por 10.07.2013 / 10:27
0

Por que você permite ftp e dns? O seu servidor fornece esses serviços? O FTP não deve ser usado, exceto por alguns casos de uso muito específicos, use SFTP (não FTPS). Além disso, por que especificar todas as outras portas por nomes simbólicos e http por 80 numéricos? Você acabou de copiar isso de algum outro lugar? Nenhuma cópia e aconselhamento vai compensar a falta de compreensão. Certifique-se de entender TCP, IP, firewalls e os protocolos dos serviços que você fornecerá.

    
por 03.03.2010 / 12:11

Tags