Segurança > Restringindo tráfego via Iptables para servidores Web

2321 Views
Tempo de leitura: 4 Minutos 
Atualizado em:

Servidores “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

E-mail

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
5 - 1

Thank You For Your Vote!

Sorry You have Already Voted!