Lucas Simon

Web Developer. lucassrod@gmail.com

Deploy Flask na Digital Ocean - Parte 4 - Fail2ban

A segurança é um requisito fundamental para o bom funcionamento dos serviços online. Além da sua instalação, os administradores devem proceder à sua correcta configuração e também ter mecanismos que garantam toda a segurança do sistema.

Quando oferecemos um serviço como SSH na internet, já sabemos o risco que corremos. Mesmo com alteração da porta, não impede que você sofra um ataque de Brute Force, mas de qualquer forma algumas portas terão que ser abertas devido ao uso de serviços, como o caso do SSH. Desta forma deixando vulnerável o serviço para ataques.

Instalando

# apt update && sudo apt install fail2ban -y

Configurando o Fail2Ban

Precisamos realizar algumas configurações nos dois arquivos a seguir.

jail.conf

# The DEFAULT allows a global definition of the options. They can be overridden
# in each jail afterwards.

[DEFAULT]

######################################
# Este parâmetro recebe uma lista de endereços IP que devem ser excluídos das regras Fail2ban. Os endereços IP ou blocos listados aqui não terá restrições colocadas sobre eles.
# Endereços IP e intervalos são separados por espaços em branco. Você deve adicionar o seu endereço de # IP residencial ou do trabalho para o fim da lista para que você não seja bloqueado, se você está tendo problemas para fazer login.
# Isso será algo como: "ignoreip = 127.0.0.1/8 YOUR_IP_ADDRESS "
######################################
ignoreip = 127.0.0.1/8

# External command that will take an tagged arguments to ignore, e.g. <ip>,
# and return true if the IP is to be ignored. False otherwise.
#
# ignorecommand = /path/to/command <ip>
ignorecommand =

######################################
# Esta lista a quantidade de tempo que uma proibição vai durar, se o cliente não conseguir autenticar # corretamente. É dado em segundos.
# O valor padrão proíbe clientes por 10 minutos.
######################################
bantime  = 3600

# A host is banned if it has generated "maxretry" during the last "findtime"
# seconds.
findtime = 600

######################################
# Este parâmetro especifica o número de tentativas que serão permitidas antes de uma proibição ser instituída.
######################################
maxretry = 3

# "backend" specifies the backend used to get files modification.
backend = auto

# "usedns" specifies if jails should trust hostnames in logs,
usedns = warn


# Destination email address used solely for the interpolations in
# jail.{conf,local} configuration files.
destemail = root@localhost

#
# Name of the sender for mta actions
sendername = Fail2Ban

# Email address of the sender
sender = fail2ban@localhost


#
# in /etc/fail2ban/jail.local.
#
# Optionally you may override any other parameter (e.g. banaction,
# action, port, logpath, etc) in that section within jail.local

[ssh]

enabled  = true
port     = ssh
filter   = sshd
logpath  = /var/log/auth.log
maxretry = 3


######################################
# demais configurações abaixo não foram alterados
######################################

Configurações do fail2ban

# Fail2Ban main configuration file
#
# Comments: use '#' for comment lines and ';' (following a space) for inline comments
#
# Changes:  in most of the cases you should not modify this
#           file, but provide customizations in fail2ban.local file, e.g.:
#
# [Definition]
# loglevel = 4
#

[Definition]

# Option: loglevel
# Notes.: Set the log level output.
#         1 = ERROR
#         2 = WARN
#         3 = INFO
#         4 = DEBUG
# Values: [ NUM ]  Default: 1
#
loglevel = 3

# Option: logtarget
# Notes.: Set the log target. This could be a file, SYSLOG, STDERR or STDOUT.
#         Only one log target can be specified.
#         If you change logtarget from the default value and you are
#         using logrotate -- also adjust or disable rotation in the
#         corresponding configuration file
#         (e.g. /etc/logrotate.d/fail2ban on Debian systems)
# Values: [ STDOUT | STDERR | SYSLOG | FILE ]  Default: STDERR
#
logtarget = /var/log/fail2ban.log

# Option: socket
# Notes.: Set the socket file. This is used to communicate with the daemon. Do
#         not remove this file when Fail2ban runs. It will not be possible to
#         communicate with the server afterwards.
# Values: [ FILE ]  Default: /var/run/fail2ban/fail2ban.sock
#
socket = /var/run/fail2ban/fail2ban.sock

# Option: pidfile
# Notes.: Set the PID file. This is used to store the process ID of the
#         fail2ban server.
# Values: [ FILE ]  Default: /var/run/fail2ban/fail2ban.pid
#
pidfile = /var/run/fail2ban/fail2ban.pid

E por último como root execute service fail2ban start

Próximo artigo: Deploy Flask na Digital Ocean - Parte 5 - Unnatended upgrades