[AJUDA] Criação de Regra IPTABLES [RESOLVIDO]

1. [AJUDA] Criação de Regra IPTABLES [RESOLVIDO]

Gustavo Lima
gustavorglima

(usa CentOS)

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.

#!/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



  


2. Re: [AJUDA] Criação de Regra IPTABLES [RESOLVIDO]

Pedro
px

(usa Debian)

Enviado em 02/10/2013 - 12:24h

Tava pensando em fazer isto justamente ontem! pois os fd* usam os dedicados de fora do país pra ferrar com agente, rsrs. Bom vamos lá.

Primeiro você precisa bloquear todos os ips fora da range com uma regra, em seguida você libera os permitidos.

Basta colacar esta regra no topo da seu script que os ips não autorizados não iram se conectar no seu servidor:

iptables -A INPUT -p tcp --syn -m state --state NEW -j DROP

PS:. Lembrando que tenq ficar antes de liberar os ips permitidos

PS2:. Use os comandos "iptables -L -n -v" e "iptables -L" (como root) e poste a saída aqui...


3. Resposta

Gustavo Lima
gustavorglima

(usa CentOS)

Enviado em 02/10/2013 - 13:40h

Muito obrigado por responder e me ajudar nessa :)

Agora vamos lá, veja editei o código deixei da forma que você disse, porém quando chega na parte do código que você me mandou ele corta a conexão SSH e não permite mais o login, então loguei no console para limpar a iptable. Outra sugestão?


#!/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

# Bloqueando qualquer outro IP fora da Lista --------------------------

iptables -A INPUT -p tcp --syn -m state --state NEW -j 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


4. Re: [AJUDA] Criação de Regra IPTABLES [RESOLVIDO]

Pedro
px

(usa Debian)

Enviado em 02/10/2013 - 13:45h

tente assim:

iptables -A INPUT -p tcp --syn -m state --state NEW ! -- dport 22 -j DROP

ou assim:

iptables -A INPUT -p tcp --syn -m state --state NEW -m multiport --dports 80,7777 -j DROP

PS: de preferência ao segundo comando, por setar as portas de sua escolha

"PS2:. Use os comandos "iptables -L -n -v" e "iptables -L" (como root) e poste a saída aqui..." ainda to esperando...



5. Resposta

Gustavo Lima
gustavorglima

(usa CentOS)

Enviado em 02/10/2013 - 14:06h

Nenhum dos dois deu certo ele sempre para no comando e parece que o comando não continua:

Veja:

Last login: Wed Oct 2 17:00:31 2013
[root@TESTE-IPTABLES ~]# ls
bloquear-ips.sh ips.txt libssh2
[root@TESTE-IPTABLES ~]# chmod 777 bloquear-ips.sh
[root@TESTE-IPTABLES ~]# ./bloquear-ips.sh
Iniciando configuração...


6. Re: [AJUDA] Criação de Regra IPTABLES [RESOLVIDO]

Pedro
px

(usa Debian)

Enviado em 02/10/2013 - 14:09h

você subiu os modulos do iptables?


7. Re: [AJUDA] Criação de Regra IPTABLES [RESOLVIDO]

Pedro
px

(usa Debian)

Enviado em 02/10/2013 - 14:11h

gustavorglima escreveu:

Nenhum dos dois deu certo ele sempre para no comando e parece que o comando não continua:

Veja:

Last login: Wed Oct 2 17:00:31 2013
[root@TESTE-IPTABLES ~]# ls
bloquear-ips.sh ips.txt libssh2
[root@TESTE-IPTABLES ~]# chmod 777 bloquear-ips.sh
[root@TESTE-IPTABLES ~]# ./bloquear-ips.sh
Iniciando configuração...


use chmod +x bloquear-ips.sh


8. Re: [AJUDA] Criação de Regra IPTABLES [RESOLVIDO]

Gustavo Lima
gustavorglima

(usa CentOS)

Enviado em 02/10/2013 - 14:11h

Desculpas não entendi, quais módulos?


9. Re: [AJUDA] Criação de Regra IPTABLES [RESOLVIDO]

Pedro
px

(usa Debian)

Enviado em 02/10/2013 - 14:14h

gustavorglima escreveu:

Desculpas não entendi, quais módulos?


da uma olhada no lsmod pra ver se tem os modulos que estamos usando ali...


10. Re: [AJUDA] Criação de Regra IPTABLES [RESOLVIDO]

Gustavo Lima
gustavorglima

(usa CentOS)

Enviado em 02/10/2013 - 14:17h

Desculpe minha ignorância não estou familiarizado a trabalhar com isso..

Segue a lista:
Module Size Used by
ipv6 272545 10
xfrm_nalgo 13381 1 ipv6
crypto_api 12609 1 xfrm_nalgo
dm_mirror 24393 0
dm_multipath 27213 0
scsi_dh 12481 1 dm_multipath
video 21193 0
backlight 10049 1 video
sbs 18533 0
power_meter 16461 0
hwmon 7365 1 power_meter
i2c_ec 9025 1 sbs
dell_wmi 8401 0
wmi 12137 1 dell_wmi
button 10705 0
battery 13637 0
asus_acpi 19289 0
ac 9157 0
lp 15849 0
floppy 57125 0
ata_piix 24261 0
libata 157061 1 ata_piix
serio_raw 10693 0
parport_pc 29669 1
ide_cd 40161 0
parport 37513 2 lp,parport_pc
cdrom 36577 1 ide_cd
pcspkr 7105 0
virtio_net 17217 0
tpm_tis 16713 0
i2c_piix4 13133 0
i2c_core 24897 2 i2c_ec,i2c_piix4
tpm 19041 1 tpm_tis
tpm_bios 11073 1 tpm
virtio_blk 11593 1
virtio_pci 11845 0
virtio_ring 8513 1 virtio_pci
virtio 9541 3 virtio_net,virtio_blk,virtio_pci
ext3 125769 0
jbd 57705 1 ext3
dm_raid45 67273 0
dm_message 6977 1 dm_raid45
dm_region_hash 15681 1 dm_raid45
dm_log 14785 3 dm_mirror,dm_raid45,dm_region_hash
dm_mod 63993 4 dm_mirror,dm_multipath,dm_raid45,dm_log
dm_mem_cache 9537 1 dm_raid45
ext4 253789 1
jbd2 60197 1 ext4
crc16 6209 1 ext4
uhci_hcd 25421 0
ohci_hcd 24937 0
ehci_hcd 34509 0
mptspi 24009 0
mptscsih 37953 1 mptspi
mptbase 87109 2 mptspi,mptscsih
scsi_transport_spi 26305 1 mptspi
sd_mod 25409 0
scsi_mod 144277 6 scsi_dh,libata,mptspi,mptscsih,scsi_transport_spi,sd_mod



11. Re: [AJUDA] Criação de Regra IPTABLES [RESOLVIDO]

Pedro
px

(usa Debian)

Enviado em 02/10/2013 - 14:43h

acrescente isto no seu script:

IPT=/sbin/iptables

/sbin/modprobe iptable_filter
/sbin/modprobe iptable_nat
/sbin/modprobe iptable_mangle
/sbin/modprobe ipt_LOG
/sbin/modprobe ipt_REDIRECT
/sbin/modprobe ipt_MASQUERADE

OBS: logo no início!

em seguida tente usar as regra q passei


12. Re: [AJUDA] Criação de Regra IPTABLES [RESOLVIDO]

Pedro
px

(usa Debian)

Enviado em 02/10/2013 - 15:04h

ficando assim:

#!/bin/bash

#--------------------------- CONFIGURACOES ---------------------------
ArquivoListaIP=ips-teste.txt
LiberarPortas=( 80 7777 )
PortaSSH=22
#----------------------------------------------------------------------

echo "Carregando modulos..."

/sbin/modprobe iptable_filter
/sbin/modprobe iptable_nat
/sbin/modprobe iptable_mangle
/sbin/modprobe ipt_LOG
/sbin/modprobe ipt_REDIRECT
/sbin/modprobe ipt_MASQUERADE

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 -m multiport -- dports $port -j DROP
done

echo "Descartando demais conexões!"

# Descartando tentativa de conexões não autorizadas nas portas 80 e 7777
iptables -A INPUT --syn -m state --state NEW -m multiport --dports 80,7777 -j DROP

# Descarta pacotes inválidos
iptables -A INPUT -m state --state INVALID -j DROP

echo
echo "FiM!"







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts