Потребление памяти Fail2Ban CentOS

Корневой каталог пользователя не существует. usermod изменяет поле корневого каталога в /etc/passwd но не создает каталог. Необходимо создать его вручную.

cp -a /etc/skel /link/to/directory          # or mkdir /link/to/directory to create an empty home directory
chown ginny:ginnygroup /link/to/directory   # where ginnygroup is ginny's primary group
chmod 755 /link/to/directory                # or 711 or 700 or 751 or 750 as desired
6
01.12.2014, 17:09
5 ответов

Они служат той же цели (передайте данную env vars к команде). Однако несколько заметных различий:

A=B command

- это конструкция оболочки (Bourne / Posix / RC).

Например, вы можете сделать:

A=B find . -exec cmd '{}' +

или:

find . -exec env A=B cmd '{}' +

, но вы не можете сделать:

find . -exec A=B cmd '{}' +

, потому что Найти , не вызывает оболочки для запуска этой команды.

С другой стороны, ENV Быть внешней командой, вы не можете сделать:

f() { ...; }
env A=B f

или:

env A=B eval '...'

также:

A=B cmd

работает только с Env vars, которые действительны Shell имена переменных. Вам нужно ENV Для любого другого имени Var Var:

env 'my var=foo' cmd...

Bash сбрасывает переменную _ :

bash-4.3$ _=xxx env | grep '^_='
_=/usr/bin/env
bash-4.3$ env _=xxx env | grep '^_='
_=xxx

в ZSH , ARGV0 и stty имеют специальные значения в этом контексте:

STTY=-echo cat

Run Cat с терминалом Echo отключено. И:

ARGV0=foo cmd

работает CMD с Foo , как его ARGV [0] .

Если вы не хотите, чтобы эта специальная обработка вы должны использовать ENV .

Обратите внимание, что Sudo поддерживает:

sudo A=B cmd

Он не использует оболочку или ENV для этого. Это делает это сам по себе.

Он может пропускать переменные с любым именем, кроме тех, которые начинаются с - .

Назначение - это конструкция оболочки, тогда как равный знак в аргументе env не имеет особого значения для оболочки, поэтому A = $ B CMD безопасен, тогда как A = "$ b" cmd (или sudo a = "$ b" cmd ) требуют двойных кавычек.

Синтаксис A = B CMD , поддерживаемый только в оболочках Bourne и RC семейств (не , хотя). В раковинах CSH или рыбы , например, для семей , вы должны прибегнуть к ENV .

-121--23587-

Решение было редактировать /etc/init.d/fail2ban.

Это начальный скрипт:

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
}

К сожалению, это только спасает меня 50 МБ

0
27.01.2020, 20:30

Если на вашей машине есть обычные sysvinit-скрипты, вы можете сделать это в /etc/init.d/fail2ban (достаточно рано, т.е. до того, как дамон запустится).

Если ваша машина использует systemd, вы можете сделать это через fail2ban.service. Например, вместо

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

do

ExecStart=/bin/sh -c 'ulimit -s 256; /usr/bin/fail2ban-client -x start'
0
27.01.2020, 20:30

/etc/default

Каталог /etc/default никогда не используется ни на одном из дистрибутивов, работающих на базе Red Hat. Это Debian/Ubuntu-ism. Для Centos 7 вы можете посмотреть на пакеты, которые были установлены и которые относятся к fail2ban следующим образом:

$ 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

Содержимое fail2ban-сервера

В файле fail2ban-server содержится файл службы для 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

Systemd service file

Содержимое Systemd service file:

$ 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

Таким образом, можно добавить дополнительные опции к этому файлу, чтобы быстро и грязно подтвердить, что они работают.

Долгосрочные исправления

Чтобы сделать их постоянными, я бы добавил опции более "официальным" способом, чтобы обновления пакета fail2ban не перезаписывали изменения в этом файле. Это можно сделать, добавив специальную версию файла fail2ban.service в этот каталог:

/etc/systemd/system/fail2ban.service

NOTE: Файл в этом каталоге, /etc/systemd/system всегда перезаписывает файл по умолчанию .service.

Однако, делая это таким образом, есть некоторые предостережения, одно из которых заключается в том, что если бы файл службы присутствовал здесь, когда fail2ban должен был бы обновляться через yum, это привело бы к тому, что служба была бы отключена, до тех пор, пока вы вручную не включите ее. Поэтому вместо этого можно переопределить фрагменты файла .service, добавив их в этот каталог в разделе /etc.

Excerpt

Для редактирования файла модуля, предоставляемого пакетом, можно создать каталог называемый, например, /etc/systemd/system/unit.d/ /etc/systemd/system/httpd.service.d/ и поместите туда *.conf файлы чтобы переопределить или добавить новые опции. systemd разберет эти *.conf файлы. и нанести их на оригинальное устройство. Например, если вы просто если вы хотите добавить дополнительную зависимость к устройству, вы можете создать следующий файл: /etc/systemd/system/unit.d/customdependency.conf

  [Единица измерения]
 Требуется=новая зависимость
 После=новая зависимость

В качестве другого примера, чтобы заменить директиву ExecStart на a единицу, не являющуюся типичной единицей, создайте следующий файл: /etc/systemd/system/unit.d/customexec.conf

  [Служба]
 ЭкзСтарт=
 команда ExecStart=new

, чтобы можно было создать каталог, /etc/systemd/system/fail2ban.service.d и добавить в него файлы *.conf с содержимым, подобным этому:

[Service]
ExecStart=
ExecStart=new command

Добавив туда свои опции.

Ulimits & Systemd

Если вы пытаетесь установить ulimit для конкретной службы, посмотрите страницу man для systemd.exec.

Выдержка
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.

Поэтому простое добавление LimitSTACK=256 в файл настроек .conf, который я описываю выше, должно дать вам тот же эффект, что и установка ulimit -s 256.

Выдержка - setrlimit(2) man page

Если вы посмотрите на man page setrlimit(2), вы увидите, как переключатель ulimit выравнивается с системными ограничениями.

   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).

References

1
27.01.2020, 20:30

Увысимит также влияет на детей процессы, включая программы электронной почты уведомления, такие как SendMail, которые могут не допускать такого предела Stacksize. Это в случае случая SendMail exim4, который, с использованием предлагаемого настраивания памяти будет SegFault вместо по электронной почте, как следует, когда включен «рецидивирующий» Jail.

0
27.01.2020, 20:30

Обычно я настраиваю что-то подобное вfail2ban.local

[Definition]
dbfile =
dbpurgeage = 0

Это заставляет fail2ban создавать новую базу данных sqlite (в памяти? )при каждом перезапуске, потому что происходит то, что постоянная база данных содержит все исходные строки журнала, которые были обработаны, и это обычно взрывается, когда машина подвергается атаке, до сотен МБ бесполезных журналов в базе данных sqlite.

Этот dbfile, первоначально указывающий на /var/lib/fail2ban/fail2ban.sqlite3, является постоянным, поэтому перезапуск fail2ban без необходимости перезагружает эти сотни МБ журналов из базы данных (без обработки )только для того, чтобы выяснить несколько различных IP-адресов из некоторых другие таблицы --разберитесь!

0
07.04.2021, 09:11

Теги

Похожие вопросы