Fail2Ban은 내 시스템에서 많은 메모리(1.2GB)를 사용합니다. 이를 줄이는 방법을 설명하는 여러 기사가 있습니다. 다음은 데비안의 예입니다.
/etc/default/fail2ban
파일 에 1ulimit1 명령을 추가합니다 .(파일에) 마지막 줄에 추가하십시오:
ulimit -s 256
불행하게도 CentOS 7에는 그러한 파일이나 디렉터리가 없습니다. 내 시스템에 어떻게 적용할 수 있나요?
몇 가지 메시지가 표시된 후 내 Fail2Ban Systemd 파일은 다음과 같습니다.
[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`
불행히도 결과는 여전히 1251888KB입니다.
답변1
/etc/기본
이 디렉토리는 /etc/default
Red Hat 기반 배포판에서는 절대 사용되지 않습니다. 이것이 데비안/우분투주의입니다. 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-server의 내용
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 서비스 파일의 내용:
$ 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
노트:이 디렉터리의 파일은 /etc/systemd/system
항상 기본 .service
파일보다 우선합니다.
그러나 이 작업에는 몇 가지 주의 사항이 있습니다. 그 중 하나는 서비스 파일이 여기에 있는 경우 fail2ban
해당 파일을 통해 업데이트하면 yum
수동으로 다시 활성화할 때까지 서비스가 비활성화된다는 것입니다. 따라서 .service
아래 디렉토리에 파일 조각을 추가하여 덮어 쓸 수 있습니다 /etc
.
패키지에서 제공하는 단위 파일을 편집하려면 /etc/systemd/system/unit.d/라는 디렉터리(예: /etc/systemd/system/httpd.service.d/)를 만들고 *.conf 파일을 배치할 수 있습니다. 거기에 재정의 또는 새 옵션을 추가하세요. systemd는 이러한 *.conf 파일을 구문 분석하여 원본 장치 위에 적용합니다. 예를 들어, 유닛에 추가 종속성을 추가하려는 경우 다음 파일을 생성할 수 있습니다.
/etc/systemd/system/unit.d/customdependency.conf
[Unit] Requires=new dependency After=new dependency
또 다른 예로, 일회성 유형이 아닌 장치에 대한 ExecStart 지시문을 바꾸려면 다음 파일을 만듭니다.
/etc/systemd/system/unit.d/customexec.conf
[Service] ExecStart= ExecStart=new command
따라서 디렉토리를 생성 /etc/systemd/system/fail2ban.service.d
하고 *.conf
그 안에 다음 내용으로 파일을 추가할 수 있습니다.
[Service]
ExecStart=
ExecStart=new command
거기에 옵션을 추가하세요.
Ulimits 및 Systemd
특정 서비스에 대한 옵션을 설정 하려는 경우 ulimit
매뉴얼 페이지를 확인하십시오 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
매뉴얼 페이지를 보면 이러한 스위치가 Systemd 제한 사항과 어떻게 일치하는지 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).
인용하다
답변2
머신에 공통 sysvinit 스크립트가 있는 경우 /etc/init.d/fail2ban
이 작업을 수행할 수 있습니다(데몬이 시작되기 전에 최대한 빨리).
컴퓨터가 systemd를 사용하는 경우 fail2ban.service
예를 들어 .
ExecStart=/usr/bin/fail2ban-client -x start
하다
ExecStart=/bin/sh -c 'ulimit -s 256; /usr/bin/fail2ban-client -x start'
답변3
해결책은 /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
}
불행히도 그것은 50MB만 저장했습니다.
답변4
내가 보통 하는 일은 다음과 같이 구성하는 것입니다.fail2ban.local
[Definition]
dbfile =
dbpurgeage = 0
영구 데이터베이스에는 처리된 모든 원시 로그 라인이 포함되어 있으므로, 이는 일반적으로 시스템에 수백 MB의 쓸모 없는 . sqlite 데이터베이스에 로그인합니다.
이는 dbfile
처음에는 지속성을 의미하므로 /var/lib/fail2ban/fail2ban.sqlite3
, 다른 테이블에서 다른 IP를 알아내기 위해 Fail2ban을 다시 시작하면 데이터베이스에서 수백 MB의 로그(처리되지 않은)가 불필요하게 다시 로드됩니다. 생각해 보세요!