2321 Views
Tempo de leitura: 4 MinutosServidores “de cara para a Internet” sempre serão prováveis alvos de ataques. Ataques esses de todos os tipos, de DoS à brute force passando pelo uso de exploits.
A “cartilha das boas práticas” nos diz para não rodar serviços desnecessários, pois esses abrem portas desnecessárias e criam um meio a mais para exploração do sistema.
Além dos cuidados básicos como o já mencionado, ter um firewall bem configurado é essencial para manter seu ambiente seguro.
Neste artigo veremos algumas regras básicas de firewall para servidores Web.
Observações
São apenas duas observações:
1 – As regras mencionadas abaixo são liberações baseadas em portas de serviços. Por isso, para ter o efeito desejado, antes é preciso bloquear totalmente o tráfego da porta para somente depois aplicar a regra. Muita atenção quando falarmos de SSH Se você tem um servidor remoto e bloquear a porta 22 do SSH, perderá esse acesso.
<
p align=”justify”>2 – Lembrando também que essas regras, se executadas diretamente no shell, serão gravadas apenas em memória. Quando o serviço Iptables ou o servidor forem reiniciados, as regras serão perdidas. Para evitar isso, é preciso salvar essas regras na configuração do Iptables (ex: /etc/iptables/rules ou /etc/sysconfig/iptables).
Tráfego Web (Portas 80 e 443)
Permite tráfego HTTP de entrada e saída (porta 80 e 443)
iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
Permite tráfego HTTPS de entrada e saída (porta 443)
iptables -A INPUT -i eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT
Permite tráfego de entrada para balanceamento de carga com tráfego HTTPS
iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 0 -j DNAT --to-destination 192.168.1.101:443
iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 1 -j DNAT --to-destination 192.168.1.102:443
iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 2 -j DNAT --to-destination 192.168.1.103:443
Tráfego SSH
Permite tráfego de entrada e saída para SSH
iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
Permite tráfego de entrada e saída via SSH para uma rede específica de origem
iptables -A INPUT -i eth0 -p tcp -s 192.168.200.0/24 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
MultiPort
MultiPorts (Permite tráfego de entrada/saída para/de SSH, HTTP, e HTTPS)
iptables -A INPUT -i eth0 -p tcp -m multiport --dports 22,80,443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp -m multiport --sports 22,80,443 -m state --state ESTABLISHED -j ACCEPT
Ping
Permite o ping de dentro pra fora
iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
Permite o ping de fora pra dentro
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
Permite tráfego para envio de mensagens (Sendmail, Postfix, etc).
iptables -A INPUT -i eth0 -p tcp --dport 25 -m state --state NEW,ESTABLISHED -j ACCEPT
Permite tráfego IMAP e IMAPS
iptables -A INPUT -i eth0 -p tcp --dport 143 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 993 -m state --state NEW,ESTABLISHED -j ACCEPT
Permite tráfego POP3 e POP3S
iptables -A INPUT -i eth0 -p tcp --dport 110 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 995 -m state --state NEW,ESTABLISHED -j ACCEPT
MySQL
Permite conexões ao MySQL para uma rede de específica de origem
iptables -A INPUT -i eth0 -p tcp -s 192.168.200.0/24 --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT
Diversos
Bloqueia um IP específico
iptables -A INPUT -s 192.168.1.101-j DROP
Permite acesso ao loopback
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
Permite forward de pacotes de rede interna para outra rede com acesso externo
Exemplo:
Neste caso, a eth0 está conectada em uma rede interna. Já a ETH1 tem saída pra Internet. O forward deste exemplo direciona o tráfego da eth0 pra eth1.
iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT
Permite tráfego de saída e entrada para DNS (porta 53 protocolo UDP)
iptables -A OUTPUT -p udp -o eth0 --dport 53 -j ACCEPT
iptables -A INPUT -p udp -i eth0 --sport 53 -j ACCEPT
Permite rsync (via daemon) de uma rede de origem específica
iptables -A INPUT -i eth0 -p tcp -s 192.168.101.0/24 --dport 873 -m state --state NEW,ESTABLISHED -j ACCEPT
Permite rsync (via daemon) para uma rede de destino específica
iptables -A OUTPUT -o eth0 -p tcp --sport 873 -m state --state ESTABLISHED -j ACCEPT
Previne ataques DoS limitando o número de conexões a 100
iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT
Port forwarding da porta 422 para 22
iptables -t nat -A PREROUTING -p tcp -d 192.168.102.37 --dport 422 -j DNAT --to 192.168.102.37:22
iptables -A INPUT -i eth0 -p tcp --dport 422 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 422 -m state --state ESTABLISHED -j ACCEPT
Loga pacotes dropados
iptables -N LOGGING
iptables -A INPUT -j LOGGING
iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables Packet Dropped: " --log-level 7
iptables -A LOGGING -j DROP