Consumo de memória Fail2Ban CentOS

6

O Fail2Ban está usando uma quantidade enorme de memória no meu sistema (1,2 GB). Existem vários artigos que descrevem como reduzi-lo. Abaixo está um exemplo para o Debian.

  • acrescente o comando 1ulimit1 ao arquivo /etc/default/fail2ban .
  • Adicione (ao arquivo) na última linha:

    ulimit -s 256
    

Infelizmente não existe tal arquivo ou diretório no CentOS 7. Como aplicar isso no meu sistema?

Depois de algumas dicas, meu arquivo Systemd para o Fail2Ban é

[Unit] 
Description=Fail2ban Service 

[Service] 
Type=forking 
ExecStart=/usr/bin/fail2ban-client -x start 
ExecStop=/usr/bin/fail2ban-client stop 
ExecReload=/usr/bin/fail2ban-client reload 
PIDFile=/var/run/fail2ban/fail2ban.pid 
Restart=always 
LimitSTACK=256'

Infelizmente, o resultado ainda é 1251888 KB.

    
por Il Quadrifoglio 30.11.2014 / 13:52

4 respostas

0

A solução foi editar /etc/init.d/fail2ban.

Este é o script de início:

start() {
echo -n $"Starting fail2ban: "
ulimit -s 256
${FAIL2BAN} -x start > /dev/null
RETVAL=$?
if [ $RETVAL = 0 ]; then
touch ${lockfile}
echo_success
else
echo_failure
fi
echo
return $RETVAL
}

Infelizmente, é só me poupar 50 mb

    
por 03.12.2014 / 21:23
2

/ etc / default

O diretório /etc/default nunca é usado em nenhuma distribuição baseada na Red Hat. Isso é um Debian / Ubuntu-ism. Para o Centos 7 você pode dar uma olhada nos pacotes que foram instalados relacionados ao fail2ban da seguinte forma:

$ rpm -aq|grep fail
fail2ban-server-0.9-9.el7.noarch
fail2ban-sendmail-0.9-9.el7.noarch
fail2ban-firewalld-0.9-9.el7.noarch
fail2ban-systemd-0.9-9.el7.noarch
fail2ban-0.9-9.el7.noarch

Conteúdo do servidor fail2ban

O fail2ban-server contém o arquivo de serviço do Systemd.

$ rpm -ql fail2ban-server-0.9-9.el7.noarch | grep systemd
/usr/lib/python2.7/site-packages/fail2ban/server/filtersystemd.py
/usr/lib/python2.7/site-packages/fail2ban/server/filtersystemd.pyc
/usr/lib/python2.7/site-packages/fail2ban/server/filtersystemd.pyo
/usr/lib/systemd/system/fail2ban.service

Arquivo de serviço do Systemd

O conteúdo do arquivo de serviço do Systemd:

$ more /usr/lib/systemd/system/fail2ban.service
[Unit]
Description=Fail2ban Service
After=syslog.target network.target firewalld.service

[Service]
Type=forking
ExecStart=/usr/bin/fail2ban-client -x start
ExecStop=/usr/bin/fail2ban-client stop
ExecReload=/usr/bin/fail2ban-client reload
PIDFile=/var/run/fail2ban/fail2ban.pid
Restart=always

[Install]
WantedBy=multi-user.target

Assim, pode-se adicionar as opções extras a este arquivo, como uma maneira rápida e suja de confirmar se elas estão funcionando.

Correções de longo prazo

Para torná-los permanentes, adicionaria as opções de maneira mais "oficial" para que as atualizações no pacote fail2ban não substituíssem as modificações feitas nesse arquivo. Isso pode ser feito adicionando uma versão personalizada do arquivo fail2ban.service neste diretório:

/etc/systemd/system/fail2ban.service

NOTA: Um arquivo neste diretório, /etc/systemd/system sempre substitui o arquivo .service padrão.

No entanto, fazer isso tem ressalvas, uma delas é que, se um arquivo de serviço estiver presente aqui quando fail2ban fosse atualizado por meio de yum , o serviço seria desativado, até que fosse reativado manualmente. Então, em vez disso, você pode substituir fragmentos do arquivo .service , adicionando-os a esse diretório em /etc .

Trecho

To edit a unit file provided by a package, you can create a directory called /etc/systemd/system/unit.d/ for example /etc/systemd/system/httpd.service.d/ and place *.conf files in there to override or add new options. systemd will parse these *.conf files and apply them on top of the original unit. For example, if you simply want to add an additional dependency to a unit, you may create the following file: /etc/systemd/system/unit.d/customdependency.conf

   [Unit]
   Requires=new dependency
   After=new dependency

As another example, in order to replace the ExecStart directive for a unit that is not of type oneshot, create the following file: /etc/systemd/system/unit.d/customexec.conf

   [Service]
   ExecStart=
   ExecStart=new command

para poder criar um diretório, /etc/systemd/system/fail2ban.service.d e adicionar *.conf arquivos com conteúdo como este:

[Service]
ExecStart=
ExecStart=new command

Adicionando suas opções lá.

Ulimits e amp; Systemd

Se você estiver tentando definir uma opção ulimit para um determinado serviço, dê uma olhada na página man do systemd.exec .

Trecho
LimitCPU=, LimitFSIZE=, LimitDATA=, LimitSTACK=, LimitCORE=, LimitRSS=, 
LimitNOFILE=, LimitAS=, LimitNPROC=, LimitMEMLOCK=, LimitLOCKS=,
LimitSIGPENDING=, LimitMSGQUEUE=, LimitNICE=, LimitRTPRIO=, LimitRTTIME=
These settings control various resource limits for executed processes. See 
setrlimit(2) for details. Use the string infinity to configure no limit 
on a specific resource.

Portanto, basta adicionar LimitSTACK=256 ao arquivo .conf personalizado que eu descrevi acima para que você tenha o mesmo efeito que a configuração ulimit -s 256 .

Trecho - página de manual setrlimit (2)

Se você der uma olhada na página setrlimit(2) man, poderá ver como as opções ulimit se alinham com os limites do Systemd.

   RLIMIT_STACK
        The maximum size of the process stack, in bytes.  Upon reaching 
        this limit, a SIGSEGV signal is generated.  To handle this signal, 
        a process must employ an alternate signal stack (sigaltstack(2)).

        Since Linux 2.6.23, this limit also determines the amount of space 
        used for the process's  command-line  arguments  and  environment
        variables; for details, see execve(2).

Referências

por 30.11.2014 / 15:54
0

Se a sua máquina tiver scripts sysvinit usuais, você poderá fazer isso em /etc/init.d/fail2ban (com antecedência, ou seja, antes que o daemon seja iniciado).

Se a sua máquina usa o systemd, você pode fazer isso via fail2ban.service . Por exemplo, em vez de

ExecStart=/usr/bin/fail2ban-client -x start

faça

ExecStart=/bin/sh -c 'ulimit -s 256; /usr/bin/fail2ban-client -x start'
    
por 30.11.2014 / 14:10
0
O ulimit também afeta os processos das crianças, incluindo programas de e-mails de notificação como o sendmail, que podem não tolerar esse limite de empilhamento. Este é o caso do exim4 sendmail que, usando o ajuste de memória proposto, irá se desprender em vez de enviar e-mails como deveria quando a cadeia "recidiva" estiver ativada.

    
por 19.05.2015 / 00:29