
Sou novo no iptables e estou tentando montar um firewall cujo objetivo é proteger um servidor web. As regras abaixo são as que juntei até agora e gostaria de saber se as regras fazem sentido - e se deixei de fora algo essencial?
Além da porta 80, também preciso ter as portas 3306 (mysql) e 22 (ssh) abertas para conexões externas.
Qualquer feedback é muito apreciado!
#!/bin/sh
# Clear all existing rules.
iptables -F
# ACCEPT connections for loopback network connection, 127.0.0.1.
iptables -A INPUT -i lo -j ACCEPT
# ALLOW established traffic
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# DROP packets that are NEW but does not have the SYN but set.
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
# DROP fragmented packets, as there is no way to tell the source and destination ports of such a packet.
iptables -A INPUT -f -j DROP
# DROP packets with all tcp flags set (XMAS packets).
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
# DROP packets with no tcp flags set (NULL packets).
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
# ALLOW ssh traffic (and prevent against DoS attacks)
iptables -A INPUT -p tcp --dport ssh -m limit --limit 1/s -j ACCEPT
# ALLOW http traffic (and prevent against DoS attacks)
iptables -A INPUT -p tcp --dport http -m limit --limit 5/s -j ACCEPT
# ALLOW mysql traffic (and prevent against DoS attacks)
iptables -A INPUT -p tcp --dport mysql -m limit --limit 25/s -j ACCEPT
# DROP any other traffic.
iptables -A INPUT -j DROP
Responder1
Experimente o shorewall, que fornece um firewall razoável pronto para uso. Habilite o acesso da rede para os serviços que você deseja. Existem exemplos de conjuntos de regras para uma, duas e três interfaces. A documentação é boa e é mantida ativamente.
Espero que você queira limitar quais endereços podem acessar o MySQL, o que é feito facilmente. Você também pode proteger o SSH com batidas de porta onde a porta está fechada, a menos que você tenha testado a outra porta recentemente.
Responder2
- Você realmente deseja permitir o ICMP.
- 5/seg provavelmente não é suficiente para HTTP
- Não vejo sentido nas regras para pacotes XMAS/NULL
- Também não vejo uma razão para a regra especial de NOVOS pacotes
ETA: 5. Ter esse tipo de limite de taxa torna os ataques DoS realmente simples. Eu só preciso enviar 1 pacote SYN por segundo ao seu servidor para negar acesso ssh a VOCÊ.
Responder3
Eu pensaria em usar algo como NARC para fazer a configuração das regras do iptables:
Existem alguns padrões sensatos já implementados neste pacote nos quais você deve poder confiar.
Responder4
O filtro para comunicação de saída do servidor para a Internet também é importante. Especialmente o SMTP é recomendado para permitir apenas um servidor.
Eu gerencio firewalls Mikrotik, e costumo fazer por exemplo:
- Solte pacotes recebidos da Internet com endereço de destino de faixa privada
- Eliminar portscans (acima de 5 verificações de porta por segundo)
- SSH para outra porta (obscuridade, eu sei, mas funciona!:-)) e limitar IPs de origem
- Descartar transmissões para roteador
- Eliminar TCP RST
E mais alguns. Eu recomendaria ler isto:http://wiki.mikrotik.com/wiki/Dmitry_on_firewallingA sintaxe do Mikrotik é direta e contém boas dicas para iniciantes.