quarta-feira, 8 de maio de 2013

UltraSurf NUNCA MAIS!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Como Fazer para Bloquear o UltraSurf, Solução Definitiva [iptables + fail2ban]

Essa semana fazendo a revisão do firewall de um cliente eu consegui bloquear o acesso as redes BitTorrent e ao terrível UltraSurf.
Vou descrever como fiz para bloquear o UltraSurf.

O problema

Em um primeiro momento eu acreditei que seria fácil bloquear o UltraSurf, porém o uso de proxy transparente obriga que a porta 443 (HTTPS) fique liberada, o BitTorrent foi bloqueado sem dificuldades.
Com o uso do tcpdump eu identifique que todo o acesso do UltraSurf sai pela porta 443, logo a solução mais obvia seria bloquea-la, porém não é possível. Bloquear o IP ou range de IP do servidor de destino seria outra opção.
Quando fiz o bloqueio pelo range de IP, descobri que o UltraSurf tenta uma centena de IPs diferentes até conseguir o acesso que ele precisa, e certamente devem existir novos IPs a cada nova versão.
Pesquisei pelo Google e não encontrei nenhuma forma eficiente de bloquear o UltraSurf, foi então que tive pensei o seguinte.
Criar uma regra no iptables e fazer log dos acesso ao IP do UltraSurf, depois criar um daemon para ler esse log e fazer um bloqueio em tempo real.
Bem, chega de bla bla e vamos por a mão na massa.

Começando

Vamos lá, esse pequeno tutorial é para tratar um problema especifico, sendo assim eu suponho que você já sabe usar o iptables, afinal já está aqui buscando uma forma de fazer um bloqueio mais avançado, rs
Acredito que essa solução possa ser utilizada por todos, para firewall simples até o mais complexo.
Eu estou usando Debian 5.0.3, iptables 1.4.2 e fail2ban 0.8.3.
Qualquer dúvida, problema ou sugestão podem deixar um comentário.
No final você encontra os arquivos de configuração para download.

iptables

Essa parte é bem simples, no seu script de firewall adicione a seguinte linha.
?
1
iptables -A FORWARD -d 65.49.14.0/24 -j LOG --log-prefix "=UltraSurf= "
A rede 65.49.14.0/24 é a primeira a ser contactada pelo UltraSurf quando ele é aberto, a regra acima apenas gera um LOG, não existe bloqueio do acesso, em um primeiro momento o usuário vai até pensar que está funcionando.
ATENÇÃO
Coloque essa regra antes da regra com o modulo state (-m state –state ESTABLISHED,RELATED).
Se colocar depois os pacotes das conexões já estabelecidas não irão para o LOG e pode gerar falhas no bloqueio.

fail2ban

O fail2ban é uma ferramenta muito boa para a segurança de servidores, em linhas gerais ela faz o seguinte.
Lê algum arquivo de log, compara com uma expressão regular e em caso positivo ele executa algum comando no sistema.
Por padrão ele monitora o log do SSH e em caso de falhas consecutivas no acesso ele cria uma regra no iptables para bloquear o possível invasor.

Instalando

Como eu estou utilizando o Debian e vou instalar pelo apt-get.
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# apt-get install fail2ban
Reading package lists... Done
Building dependency tree
Reading state information... Done
Suggested packages:
  python-gamin
The following NEW packages will be installed:
  fail2ban
0 upgraded, 1 newly installed, 0 to remove and 100 not upgraded.
Need to get 86.2kB of archives.
After this operation, 631kB of additional disk space will be used.
Get:1 http://ftp.br.debian.org stable/main fail2ban 0.8.3-2sid1 [86.2kB]
Fetched 86.2kB in 0s (419kB/s)
Selecting previously deselected package fail2ban.
(Reading database ... 38547 files and directories currently installed.)
Unpacking fail2ban (from .../fail2ban_0.8.3-2sid1_all.deb) ...
Processing triggers for man-db ...
Setting up fail2ban (0.8.3-2sid1) ...
Depois de instalado vamos acessar o diretório de configuração
?
1
# cd /etc/fail2ban/
Aqui vamos criar um arquivo chamado jail.local
?
1
vi /etc/fail2ban/jail.local
Vamos adicionar o conteúdo abaixo ao arquivo jail.local.
?
1
2
3
4
5
6
7
8
9
[ultrasurf]
enabled   = true
filter    = ultrasurf
port      = all
banaction = iptables-ultrasurf
logpath   = /var/log/messages
maxretry  = 6
# Tempo em segundos que o IP fica bloqueado, aqui 15 minutos
bantime   = 900
Vamos criar o arquivo com a expressão regular que irá filtar o log do iptables.
?
1
vi /etc/fail2ban/filter.d/ultrasurf.local
Aqui vamos adicionar uma expressão regular simples ao arquivo ultrasurf.local.
?
1
2
3
[Definition]
failregex = (.*)=UltraSurf=(.*) SRC=<HOST>
ignoreregex =
Apesar de simples, funciona :)
Agora o arquivo que irá executar o iptables e criar as regras necessárias para o bloqueio e desbloqueio.
?
1
vi /etc/fail2ban/action.d/iptables-ultrasurf.local
Aqui é onde a magica acontece, adicione o conteúdo abaixo ao arquivo iptables-ultrasurf.local.
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[Definition]
 
actionstart = iptables -N fail2ban-<name>
              iptables -A fail2ban-<name> -j RETURN
              iptables -I INPUT -j fail2ban-<name>
              iptables -I FORWARD -j fail2ban-<name>
 
actionstop = iptables -D FORWARD -j fail2ban-<name>
             iptables -D INPUT -j fail2ban-<name>
             iptables -F fail2ban-<name>
             iptables -X fail2ban-<name>
 
actioncheck = iptables -n -L FORWARD | grep -q fail2ban-<name>
              iptables -n -L INPUT | grep -q fail2ban-<name>
 
actionban = iptables -I fail2ban-<name> 1 -s <ip> -j REJECT
 
actionunban = iptables -D fail2ban-<name> -s <ip> -j REJECT
 
[Init]
name = ultrasurf
Agora basta reiniciar o Daemon
?
1
/etc/init.d/fail2ban restart
Pronto, agora é só olhar o log do fail2ban e esperar pelo primeiro bloqueio.
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# tail -f fail2ban.log
2012-01-13 19:11:36,890 fail2ban.server : INFO   Changed logging target to /var/log/fail2ban.log for Fail2ban v0.8.3
2012-01-13 19:11:36,891 fail2ban.jail   : INFO   Creating new jail 'ultrasurf'
2012-01-13 19:11:36,891 fail2ban.jail   : INFO   Jail 'ultrasurf' uses poller
2012-01-13 19:11:36,901 fail2ban.filter : INFO   Added logfile = /var/log/messages
2012-01-13 19:11:36,902 fail2ban.filter : INFO   Set maxRetry = 6
2012-01-13 19:11:36,903 fail2ban.filter : INFO   Set findtime = 600
2012-01-13 19:11:36,903 fail2ban.actions: INFO   Set banTime = 900
2012-01-13 19:11:36,912 fail2ban.jail   : INFO   Creating new jail 'ssh'
2012-01-13 19:11:36,912 fail2ban.jail   : INFO   Jail 'ssh' uses poller
2012-01-13 19:11:36,913 fail2ban.filter : INFO   Added logfile = /var/log/auth.log
2012-01-13 19:11:36,914 fail2ban.filter : INFO   Set maxRetry = 6
2012-01-13 19:11:36,915 fail2ban.filter : INFO   Set findtime = 600
2012-01-13 19:11:36,915 fail2ban.actions: INFO   Set banTime = 600
2012-01-13 19:11:36,985 fail2ban.jail   : INFO   Jail 'ultrasurf' started
2012-01-13 19:11:36,997 fail2ban.jail   : INFO   Jail 'ssh' started
2012-01-13 19:11:52,029 fail2ban.actions: WARNING [ultrasurf] Ban 10.23.134.42
2012-01-13 19:13:36,057 fail2ban.actions: WARNING [ultrasurf] Ban 10.23.134.140
2012-01-13 19:26:52,081 fail2ban.actions: WARNING [ultrasurf] Unban 10.23.134.42
2012-01-13 19:28:36,109 fail2ban.actions: WARNING [ultrasurf] Unban 10.23.134.140
2012-01-13 19:33:50,137 fail2ban.actions: WARNING [ultrasurf] Ban 10.23.134.42
2012-01-13 19:48:50,165 fail2ban.actions: WARNING [ultrasurf] Unban 10.23.134.42
2012-01-13 19:53:44,193 fail2ban.actions: WARNING [ultrasurf] Ban 10.23.134.140

Um comentário:

Precisamos da Sua Opnião