Enviado em 02/10/2013 - 11:08h
Bom Dia Pessoal, estou com uma dúvida na verdade fiquei até tarde tentando criar algo assim, mas como não tenho experiência com iptables não deu muito certo então vim pedir a ajuda de vocês, espero que possam me ajudar se possível.
Eu tenho a seguinte lista de Range de IPs nacionais (brasileiros) https://dl.dropboxusercontent.com/u/12643256/ips.txt
O que eu pretendo fazer é com que só sejam permitido conexões a uma determinada porta somente para essas ranges.
Por exemplo se qualquer outro IP fora dessa range tentar conectar-se seria automaticamente desconectado não dando aviso algum apenas da um DROP.
Porque quero fazer isso? Ultimamente tenho recebidos muitos ataques em meu servidor, e todos meus clientes são brasileiro então queria limitar este acesso para que este ataques não cheguem ao servidor.
Lembrando que essa regra não é para uma aplicação WEB que no qual usa a porta 7777
O que consegui criar foi o seguinte (Peço desculpas caso o script esteja bizarro):
O erro que acontece é, ele permite o acesso para as range (a lista de IPs) mas não consigo bloquear as demais fora da range.
Eu tenho a seguinte lista de Range de IPs nacionais (brasileiros) https://dl.dropboxusercontent.com/u/12643256/ips.txt
O que eu pretendo fazer é com que só sejam permitido conexões a uma determinada porta somente para essas ranges.
Por exemplo se qualquer outro IP fora dessa range tentar conectar-se seria automaticamente desconectado não dando aviso algum apenas da um DROP.
Porque quero fazer isso? Ultimamente tenho recebidos muitos ataques em meu servidor, e todos meus clientes são brasileiro então queria limitar este acesso para que este ataques não cheguem ao servidor.
Lembrando que essa regra não é para uma aplicação WEB que no qual usa a porta 7777
O que consegui criar foi o seguinte (Peço desculpas caso o script esteja bizarro):
O erro que acontece é, ele permite o acesso para as range (a lista de IPs) mas não consigo bloquear as demais fora da range.
#!/bin/bash
#--------------------------- CONFIGURACOES ---------------------------
ArquivoListaIP=ips-teste.txt
LiberarPortas=( 80 7777 )
PortaSSH=22
#----------------------------------------------------------------------
echo "Iniciando configuração..."
#Limpar iptables ------------------------------------------------------
iptables -F
#Fechando todas conexões ----------------------------------------------
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
# Liberando acesso SSH ------------------------------------------------
echo "Liberando o SSH"
iptables -I INPUT -p tcp --dport $PortaSSH -i venet0 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j DROP
iptables -A INPUT -p tcp --dport $PortaSSH -j ACCEPT
iptables -A INPUT -p udp --dport $PortaSSH -j ACCEPT
#Libera conexões estabilecidas ----------------------------------------
echo "Liberando conexoes estabelecidas..."
#iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
#iptables -A FORWARD -m state --state RELATED,ESTABLISHED,NEW -j ACCEPT
#iptables -A OUTPUT -m state --state RELATED,ESTABLISHED,NEW -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
# Liberando portas ----------------------------------------------------
# Abrir portas TCP
BADIPS=$(egrep -v "^#|^$" $ArquivoListaIP)
for IP in $BADIPS
do
iptables -A INPUT -p tcp -m iprange --src-range $IP -m multiport --dports $LiberarPortas -j ACCEPT
echo " > Range ($IP) Liberada com sucesso!"
done
echo "> Abrindo portas UDP"
/sbin/iptables -A INPUT -p udp -m multiport --dports $LiberarPortas -j ACCEPT
# Bloqueando qualquer outro acesso as portas --------------------------
for port in ${LiberarPortas[@]}
do
echo "> Bloqueando outros acessos a porta $port"
iptables -A INPUT -i eth0 -p tcp --dport $port -j DROP
done