Liberar acesso para um único IP externo.

1. Liberar acesso para um único IP externo.

José Jardel Luciano
housekore

(usa Debian)

Enviado em 20/04/2018 - 00:38h

Tenho uma máquina virtual em um datacenter brasileiro, nessa máquina, rodo um Squid configurado com os 40 ips que aluguei para servirem de proxy. Acontece o seguinte, da madrugada do dia 17/04, até o momento, está tendo milhares de tentativas de invasão, e vários ips fazendo o uso de banda (que é um link de 5mb) ficar sendo utilizado em mais de 70%.

Ontem configurei o SSH para ser acessado somente pelo ip de um dedicado (localizado no Kansas). Assim, por mais que tentem acessar (como estão fazendo nesse momento conseguirão).

O cenário.

- Uma máquina Virtual com Debian 7
- Squid3 rodando na porta 1512 com 40 ips.
- Um servidor dedicado

O que preciso.

- Liberar acesso somente ao IP do dedicado para os proxys e a rede da maquina virtual.

----------

#!/bin/bash
### BEGIN INIT INFO
# Provides: firewall.sh
# Required-Start: $local_fs $remote_fs $network $syslog
# Required-Stop: $local_fs $remote_fs $network $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start firewall.sh at boot time
# Description: Enable service provided by firewall.sh.
### END INIT INFO

SERVER_IP="107.xxx.xxx.xxx"

# Flushing all rules
iptables -F
iptables -X

# Setting default filter policy
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

# Allow unlimited traffic on loopback
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

#drop falso na porta 22
iptables -A INPUT -p tcp --dport 22 -j DROP
iptables -A INPUT -s $SERVER_IP -p tcp --dport 52905 -j ACCEPT # IP Especifico
iptables -A INPUT -p tcp --dport 52905 -j DROP


iptables -A INPUT -p tcp -s 0/0 -d $SERVER_IP --dport 20:65535 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp -s $SERVER_IP -d 0/0 --dport 20:65535 -m state --state ESTABLISHED -j ACCEPT

iptables -I INPUT -i eth0 -p tcp -s 0/0 --dport 1512 -j ACCEPT
iptables -I INPUT -i eth1 -p tcp -s 0/0 --dport 1512 -j ACCEPT







  


2. Re: Liberar acesso para um único IP externo.

Hector Nagao
heckjp

(usa elementary OS)

Enviado em 20/04/2018 - 09:28h

Seria mais ou menos isso?
iptables -A FORWARD -i (interface externa) -s ip_liberado -p tcp (ou udp) --dport porta -j ACCEPT


3. Re: Liberar acesso para um único IP externo.

José Jardel Luciano
housekore

(usa Debian)

Enviado em 20/04/2018 - 10:31h

heckjp escreveu:

Seria mais ou menos isso?
iptables -A FORWARD -i (interface externa) -s ip_liberado -p tcp (ou udp) --dport porta -j ACCEPT


Tentei, mas bloqueou o acesso mesmo ao IP que preciso liberar.




4. Re: Liberar acesso para um único IP externo.

José Jardel Luciano
housekore

(usa Debian)

Enviado em 23/04/2018 - 11:02h

iptables -A INPUT -s 200.6.36.0/16 -j DROP
iptables -A INPUT -s 184.168.221.0/24 -j DROP
iptables -A INPUT -s 50.63.202.0/16 -j DROP

Tá muito tenso, bloqueei todos os ips da china, porém, agora vem dos E.U.A, e mesmo dando drop na porta 111, continua chegando requisição udp nessa porta.


5. Re: Liberar acesso para um único IP externo.

Perfil removido
removido

(usa Nenhuma)

Enviado em 23/04/2018 - 12:18h

Olá,

Recomendo organizar e estudar mais as regras nesse script, pois tem bloqueio da porta 22, depois liberação da porta 20 à 65535, assim, oque prevalece é o bloqueio, toda regra no iptables é executada de cima para baixa, para consultar as regras ativas digite: iptables -L -n
Outra coisa, a regra da cadeia OUTPUT deveria ser --sport
Irei dar alguns exemplos de regras que uso em ambiente de produção, precisa adaptar conforme a necessidade...

#Conexão SSH - Rede externa
iptables -A INPUT -i eth0 ! -s 192.168.1.0/24 -d 192.168.1.254 -p tcp --dport 22 --syn -m recent --name SSHSUSPEITO --rcheck --seconds 600 --hitcount 4 -j LOG --log-prefix '[fw-ssh-bruteforce]'
iptables -A INPUT -i eth0 ! -s 192.168.1.0/24 -d 192.168.1.254 -p tcp --dport 22 --syn -m recent --name SSHSUSPEITO --rcheck --seconds 600 --hitcount 4 -j REJECT --reject-with tcp-reset
iptables -A INPUT -i eth0 ! -s 192.168.1.0/24 -d 192.168.1.254 -p tcp --dport 22 -m state --state NEW -j LOG --log-prefix [fw-ssh-wan]

iptables -A INPUT -i eth0 -d 192.168.1.254 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -s 192.168.1.254 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

Explicando
A primeira/segunda regra regra faz log de conexões na interface eth0, origem que for diferente da rede internet, protocolo tcp, port 22 com flag SYN quando a quantidade de pacotes for superior ou igual a 4 entre 600 segundos, ou 10 minutos, resumindo, se alguem tentar acessar o SSH com um IP X, e errar 4 vezes, terá que esperar 10 minutos para tentar novamente.
A terceira regra faz LOG das 3 primeiras tentativas
A quarta e quinta regra faz a liberação de fato.
*Importante: Caso modifique as linha de lugar, o efeito desejado não irá funcionar.

Para liberar o acesso somente ao IP dedicado use a seguinte regra:

iptables -A INPUT -i eth0 -s 192.168.1.150 -d 192.168.1.254 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -s 192.168.1.254 -d 192.168.1.150 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

Nesse exemplo o IP dedicado seria o 192.168.1.150 e o IP do servidor seria o 192.168.1.254
Faça isso para a porta do Squid também para ter o efeito desejado, lembrando da ordem das regras.
Obs.: Não testei essa regra...

A regra abaixo que está no seu script libera todas as portas de 20 à 65535, é necessário alterar...
iptables -A INPUT -p tcp -s 0/0 -d $SERVER_IP --dport 20:65535 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp -s $SERVER_IP -d 0/0 --dport 20:65535 -m state --state ESTABLISHED -j ACCEPT


6. Re: Liberar acesso para um único IP externo.

José Jardel Luciano
housekore

(usa Debian)

Enviado em 23/04/2018 - 13:51h

Opa, quase lá :)

O acesso já está limitado ao ip do dedicado, esta chegando trafego no UDP mas isso com o exemplo passado é certo que conseguirei o bloqueio.

Agora fica a dúvida, o ip da minha vm quando se digita "ifconfig" no terminal, é o ip externo, e a VM possui 40 ips.

Como faria para passar aceitar o trafego do dedicado para todos esses ips?

E na config do iptables, eu uso o ip principal (o eth0) ou terei que liberar ip por ip?

Desde já, muito grato pelo suporte.

Edit:

Aqui como fica a placa de rede quando digito "ifconfig' no terminal, com cada um dos ips sendo um ip válido de saída e um proxy.

https://i.imgur.com/WM1Hydl.png


7. Re: Liberar acesso para um único IP externo.

Buckminster
Buckminster

(usa Debian)

Enviado em 23/04/2018 - 21:12h

Antes de mais nada, da próxima vez tape também o endereço de broadcast na imagem do ifconfig.

Aconselho a atualizar o Debian 7 para o 9.

Acrescente a seguinte linha na seguinte posição no Iptables:

iptables -P FORWARD DROP

echo 1 > /proc/sys/net/ipv4/tcp_syncookies <<< acrescente essa linha

# Allow unlimited traffic on loopback
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

Isso irá minimizar os ataques.

Caso queira, segue abaixo uma lista para tu acrescentar dependendo do teu caso. As proteções que tu não quiser basta comentar:

##Proteção contra ping, SYN Cookies, IP Spoofing e proteções do kernel
##########################################################
echo 1 > /proc/sys/net/ipv4/tcp_syncookies # Syn Flood (DoS)
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts # Port scanners
echo 0 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses # Sem resposta remota
for i in /proc/sys/net/ipv4/conf/*; do
echo 0 > $i/accept_redirects # Sem redirecionar rotas
echo 0 > $i/accept_source_route # Sem traceroute
echo 1 > $i/log_martians # Loga pacotes suspeitos no kernel
echo 1 > $i/rp_filter # Ip Spoofing
echo 1 > $i/secure_redirects; done # Redirecionamento seguro de pacotes
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all # Sem ping e tracert
#

"Como faria para passar aceitar o trafego do dedicado para todos esses ips?"
Faça a liberação pelo range de IPs, caso eles sejam IPs corridos:

https://www.vivaolinux.com.br/topico/netfilter-iptables/Liberar-um-intervalo-de-IPs-no-Iptables


8. Re: Liberar acesso para um único IP externo.

Perfil removido
removido

(usa Nenhuma)

Enviado em 23/04/2018 - 21:19h

Nesse caso libere a rede inteira,segue alguns exemplos:

1. Liberar todo trafego da rede para os 254 IPs 200.6.36.0 ate o 200.6.36.254
iptables -A INPUT -s 200.6.36.0/24 -j ACCEPT
iptables -A OUTPUT -d 200.6.36.0/24 -j ACCEPT

2. Liberar somente a porta 22 para os 254 IPs 200.6.36.0 ate o 200.6.36.254
iptables -A INPUT -s 200.6.36.0/24 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -d 200.6.36.0/24 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

*Cuidado para não bloquear o acesso SSH e ficar sem acesso.

3. Liberar somente o squid para os 254 IPs 200.6.36.0 ate o 200.6.36.254
iptables -A INPUT -i eth+ -p tcp -s 200.6.36.0/24 --dport 1512 -j ACCEPT
iptables -A OUTPUT -o eth+ -p tcp -d 200.6.36.0/24 --sport 1512 -j ACCEPT

Lembre-se de usar a politica DROP, geralmente utilizo esse LOG no final de todo o script para verificar possiveis pacotes que o firewall esta descartando indevidamente...

iptables -A INPUT -j LOG --log-prefix [fw-input]
iptables -A OUTPUT -j LOG --log-prefix [fw-output]
iptables -A FORWARD -j LOG --log-prefix [fw-forward]

Para consultar oque o firewall esta descartando digite: tailf /var/log/messages|grep fw-
Assim podera analisar com maior facilidade regras que precisam ser criadas e qual cadeia a mesma esta...
Creio que seja isso, caso precise acessar os 40 IPs por um firewall precisa criar regras na cadeia forward

Espero ter ajudado


9. Re: Liberar acesso para um único IP externo.

José Jardel Luciano
housekore

(usa Debian)

Enviado em 24/04/2018 - 20:33h

Passando para pedir desculpas a todos que responderam pelo delay no retorno ao tópico, e também agradecer.

O motivo foi o mais forte possível, ontem, minha filha que tinha programação de nascer para o dia 01/05 resolveu passar o feriado mais tranquila e veio ao mundo, com isso, só agora tive um tempo para vir ao pc.

tentarei todas as dicas, e de novo, desculpas e MUITO OBRIGADO a todos que responderam.


10. Re: Liberar acesso para um único IP externo.

José Jardel Luciano
housekore

(usa Debian)

Enviado em 03/05/2018 - 05:14h

Consegui o que queria da seguinte forma.

Agradecido novamente a todos que me ajudaram :)

#!/bin/bash
### BEGIN INIT INFO
# Provides: firewall.sh
# Required-Start: $local_fs $remote_fs $network $syslog
# Required-Stop: $local_fs $remote_fs $network $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start firewall.sh at boot time
# Description: Enable service provided by firewall.sh.
### END INIT INFO

#DECLARACAO DAS PORTAS TCP PARA O RAGNAROK FUNCIONAR TRANQUILO
PORTAS_TCP="21,80,443,5000,5001,5002,5121,6000,6121,6900"
PORTAS_UDP="53"

#LIMPAR REGRAS EXISTENTES
iptables -F
iptables -t nat -F

#BLOQUEANDO TODO O TRAFEGO
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

#CRIA IDA E VOLTA DO ACESSO NAS CHAINS INPUT, OUTPUT E FORWARD
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

#LIBERANDO ROTEAMENTO E REGRAS DE NAT
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 1512

#LIBERANDO PORTAS TCP
iptables -A INPUT -p tcp -m multiport --dports $PORTAS_TCP -j ACCEPT
iptables -A OUTPUT -p tcp -m multiport --dports $PORTAS_TCP -j ACCEPT
iptables -A FORWARD -p tcp -m multiport --dports $PORTAS_TCP -j ACCEPT

#LIBERANDO PORTAS UDP
iptables -A INPUT -p udp -m multiport --dports $PORTAS_UDP -j ACCEPT
iptables -A OUTPUT -p udp -m multiport --dports $PORTAS_UDP -j ACCEPT
iptables -A FORWARD -p udp -m multiport --dports $PORTAS_UDP -j ACCEPT

#LIBERAR O ACESSO SSH APENAS PARA O IP DO DEDICADO
iptables -A INPUT -s xxx.xxx.xxx.xxx -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP

#ACEITAR CONEXÕES APENAS DO DEDICADO
iptables -I INPUT -p tcp -s xxx.xxx.xxx.xxx -j ACCEPT
iptables -I OUTPUT -p tcp -d xxx.xxx.xxx.xxx -j ACCEPT


#ACEITAR CONEXÕES APENAS DE CASA
iptables -I INPUT -p tcp -s 197.23.0.0/16 -j ACCEPT
iptables -I OUTPUT -p tcp -d 197.23.0.0/16 -j ACCEPT

#LIBERAR O ACESSO SQUID APENAS PARA O IP DO DEDICADO
iptables -A INPUT -s xxx.xxx.xxx.xxx -p tcp --dport 1512 -j ACCEPT

#DROP PARA BLOQUEAR A PORTA DO SQUID
iptables -A INPUT -p tcp --dport 1512 -j DROP






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts