답변:
내가 아는 한 Auth Basic 모듈은이 기능을 지원하지 않지만 Fail2ban 을 사용 하여이 기능을 수행 할 수 있습니다 .
존재하지 않는 사용자로 테스트하면 오류 로그에 다음과 같은 내용이 표시됩니다.
2012/08/25 10:07:01 [error] 5866#0: *1 no user/password was provided for basic authentication, client: 127.0.0.1, server: localhost, request: "GET /pma HTTP/1.1", host: "localhost:81"
2012/08/25 10:07:04 [error] 5866#0: *1 user "ajfkla" was not found in "/etc/nginx/htpasswd", client: 127.0.0.1, server: localhost, request: "GET /pma HTTP/1.1", host: "localhost:81"
그런 다음 필요한 필터를 만듭니다.
/etc/fail2ban/filter.d/nginx-auth.conf
[Definition]
failregex = no user/password was provided for basic authentication.*client: <HOST>
user .* was not found in.*client: <HOST>
user .* password mismatch.*client: <HOST>
ignoreregex = </host></host></host>
/etc/fail2ban/jail.conf
[nginx-auth]
enabled = true
filter = nginx-auth
action = iptables[name=NoAuthFailures, port=80, protocol=tcp]
logpath = /var/log/nginx*/*error*.log
bantime = 3600 # 1 hour
maxretry = 3
Fail2Ban 규칙 테스트 :
fail2ban-regex /var/log/nginx/localhost.error_log /etc/fail2ban/filter.d/nginx-auth.conf
Failregex
|- Regular expressions:
| [1] no user/password was provided for basic authentication.*client: <HOST>
| [2] user .* was not found in.*client: <HOST>
| [3] user .* password mismatch.*client: <HOST>
|
`- Number of matches:
[1] 1 match(es)
[2] 2 match(es)
[3] 0 match(es)
Ignoreregex
|- Regular expressions:
|
`- Number of matches:
Summary
=======
Addresses found:
[1]
127.0.0.1 (Sat Aug 25 10:07:01 2012)
[2]
127.0.0.1 (Sat Aug 25 10:07:04 2012)
127.0.0.1 (Sat Aug 25 10:07:07 2012)
[3]
추신 : Fail2ban은 금지 할 로그 파일을 가져 오기 때문에 logpath
구성과 일치 하는지 확인하십시오 .
다른 사람 이이 솔루션 / 해결 방법을 제공하지 않은 것에 놀랐습니다.
Nginx 기본 인증 및 htpasswd
선택적 비용 변수를 사용하여 bcrypt 비밀번호 암호화를 지원합니다. Bcrypt는 느리도록 설계되었으므로 다른 암호를 얼마나 빨리 시도 할 수 있는지에 대한 제한을 제공합니다.
기본 인증 사용자 이름 / 암호 사용을 만들 때
htpasswd -B -C 12 path/to/users.db <username>
12의 비용으로 서버는 초당 몇 번 이상 암호를 시도 할 수 없을 것입니다. 14로 말하면 암호 시도 당 약 1 초를 볼 것입니다.
이 구성을 사용하면 공격자가 몇 년 동안 암호를 지속적으로 시도하더라도 합리적인 암호가 무차별 대입 공격에 영향을받지 않습니다.
예를 들어, 8 자의 영숫자 암호에 대한 초당 10 번의 암호 시도로 692,351 년이 소요 62**8 / (10*3600*24*365)
됩니다.
이는 "지능형"요청 제한을 설정하는 것보다 구성하기가 훨씬 쉽고 바보가 아닙니다.
나는 nginx가 이것을 할 수있는 내부 시설을 가지고 있다고 생각하지 않습니다. 문서 페이지는 그것이 가능하다고 제안하지 않습니다.
Fail2Ban을 사용하여 로그인 시도에 실패한 IP 주소를 차단할 수 있습니다.
Fail2Ban 위키에는 몇 가지 nginx 관련 패턴이 있습니다.
Fail2Ban은 대부분의 대형 배포판에 패키지로 제공되어야합니다.
Nginx-HTTP-Auth-Digest 모듈은 기본 인증 모듈을 재시도 및 타임 아웃시 많은 추가 기능으로 대체 할 수 있습니다. 추가 문서는 여기에서 볼 수 있습니다
유일한 단점은 아마도 nginx를 다시 빌드해야한다는 것입니다.
bcrypt
Nginx의 기본 인증과 함께 ed 암호를 사용할 수 있지만 분명히 할 수없는 경우 유용합니다 .