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, rsAcredito 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= " |
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 fail2banReading package lists... DoneBuilding dependency treeReading state information... DoneSuggested packages: python-gaminThe following NEW packages will be installed: fail2ban0 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) ... |
1
| # cd /etc/fail2ban/ |
1
| vi /etc/fail2ban/jail.local |
1
2
3
4
5
6
7
8
9
| [ultrasurf]enabled = truefilter = ultrasurfport = allbanaction = iptables-ultrasurflogpath = /var/log/messagesmaxretry = 6# Tempo em segundos que o IP fica bloqueado, aqui 15 minutosbantime = 900 |
1
| vi /etc/fail2ban/filter.d/ultrasurf.local |
1
2
3
| [Definition]failregex = (.*)=UltraSurf=(.*) SRC=<HOST>ignoreregex = |
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 |
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 REJECTactionunban = iptables -D fail2ban-<name> -s <ip> -j REJECT[Init]name = ultrasurf |
1
| /etc/init.d/fail2ban restart |
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.log2012-01-13 19:11:36,890 fail2ban.server : INFO Changed logging target to /var/log/fail2ban.log for Fail2ban v0.8.32012-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 poller2012-01-13 19:11:36,901 fail2ban.filter : INFO Added logfile = /var/log/messages2012-01-13 19:11:36,902 fail2ban.filter : INFO Set maxRetry = 62012-01-13 19:11:36,903 fail2ban.filter : INFO Set findtime = 6002012-01-13 19:11:36,903 fail2ban.actions: INFO Set banTime = 9002012-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 poller2012-01-13 19:11:36,913 fail2ban.filter : INFO Added logfile = /var/log/auth.log2012-01-13 19:11:36,914 fail2ban.filter : INFO Set maxRetry = 62012-01-13 19:11:36,915 fail2ban.filter : INFO Set findtime = 6002012-01-13 19:11:36,915 fail2ban.actions: INFO Set banTime = 6002012-01-13 19:11:36,985 fail2ban.jail : INFO Jail 'ultrasurf' started2012-01-13 19:11:36,997 fail2ban.jail : INFO Jail 'ssh' started2012-01-13 19:11:52,029 fail2ban.actions: WARNING [ultrasurf] Ban 10.23.134.422012-01-13 19:13:36,057 fail2ban.actions: WARNING [ultrasurf] Ban 10.23.134.1402012-01-13 19:26:52,081 fail2ban.actions: WARNING [ultrasurf] Unban 10.23.134.422012-01-13 19:28:36,109 fail2ban.actions: WARNING [ultrasurf] Unban 10.23.134.1402012-01-13 19:33:50,137 fail2ban.actions: WARNING [ultrasurf] Ban 10.23.134.422012-01-13 19:48:50,165 fail2ban.actions: WARNING [ultrasurf] Unban 10.23.134.422012-01-13 19:53:44,193 fail2ban.actions: WARNING [ultrasurf] Ban 10.23.134.140 |