Denyhosts vs fail2ban vs iptables- 무차별 대입 로그온을 방지하는 가장 좋은 방법은 무엇입니까?


62

LAMP 서버를 설정 중이며 SSH / FTP 등을 방지해야합니다. 무차별 로그온 시도가 성공하지 못했습니다. denyhost와 fail2ban 모두에 대한 많은 권장 사항을 보았지만 두 가지를 비교 한 적은 거의 없었습니다. 또한 IPTables 규칙이 동일한 기능을 채울 수 있음을 읽었습니다.

왜이 방법 중 하나를 다른 방법보다 선택해야합니까? serverfault 직원이이 문제를 어떻게 처리합니까?

답변:


53

IIRC, DenyHosts는 SSH 서비스 만 감시합니다. 다른 서비스를 보호하기 위해 필요한 경우 Fail2ban이 더 나은 선택입니다. 구성을 조정하려는 경우 거의 모든 서비스를 감시하도록 구성 할 수 있지만 최신 버전의 Fail2ban에 많은 인기있는 서버 데몬에 적합한 규칙 세트가 포함되어 있으므로 필요하지 않습니다. 단순한 iptables 속도 제한보다 fail2ban을 사용하면 공격자가 서버를 얼마나 빨리 망치질 수 있는지를 줄이는 대신 지정된 시간 동안 공격자를 완전히 차단할 수 있다는 이점이 있습니다. 나는 여러 프로덕션 서버에서 fail2ban을 사용하여 훌륭한 결과를 얻었으며 사용하기 시작한 이후로 무차별 대입 공격으로 인해 침입 한 서버 중 하나를 본 적이 없습니다.


3
DenyHosts는 실제로 다른 서비스를 차단합니다. 가장 큰 차이점은 fail2ban은 iptables를 사용하고 DenyHosts는 hosts.deny를 사용하고 일부 서비스는 Apache와 같은 호스트 파일을 보지 않는다는 것입니다.
jammypeach 2013

테이블에 다른 옵션을 제공하기 위해 최근 ufw 방화벽 구성 관리자를 사용하여 TCP 또는 UDP 포트에 (구성 할 수없는) 속도 제한을 적용 할 수 있음을 발견했습니다. 이미 UFW를 사용하고 있다면 추가 데몬을 구성하고 실행하는 대신 좋은 옵션이 될 수 있습니다.
spiffytech

Bruteforce 보안 침해를 방지하기 위해 가장 먼저해야 할 일은 상당히 강력한 암호를 사용하는 것입니다 (또는 암호 인증을 모두 비활성화하는 경우도 있습니다). 이를 위해 속도 제한 (단독)이 약합니다. 나는 대안을 시도하지 않았지만 fail2ban을 직접 사용하고 암호 탐색 봇을 방어하는 것이 오히려 유용하다는 것을 알았습니다.
Petr Gladkikh

내 경험상 fail2ban은 실제로 무엇이든 할 수 있도록 약간의 작업이 필요합니다. 대조적으로, 당신은 denyhosts RPM을 설치하고 더 복잡한 옵션을 수행하는 동안 서버를 보호하기 위해 시작 할 수 있습니다. 나는 fail2ban이 '더 나은'것이라는 데 동의하지만, 쉬운 보호를 위해 denyhosts를 이길 수는 없습니다.
Ralph Bolton

21

무차별 강제 로그온을 방지하는 가장 좋은 방법은 무엇입니까?

그들이 처음부터 당신의 기계에 도착하게하지 마십시오! 무차별 대입 시도가 호스트 또는 SSH 수준에 도달하기 전에 중지하는 방법은 많이 있습니다.

그럼에도 불구하고 fail2ban과 같은 것으로 운영 체제를 보호하는 것이 좋습니다. Fail2ban은 DenyHosts와 약간 다르지만 동일한 공간에서 재생됩니다. Fail2ban은 iptables를 사용합니다.

http://en.wikipedia.org/wiki/Fail2ban

Fail2ban은 DenyHosts와 유사하지만 SSH에 중점을 둔 DenyHosts와는 달리, 로그인 시도를 로그 파일에 기록하는 모든 서비스를 모니터링하고 /etc/hosts.deny를 사용하여 IP 주소 / 호스트 만 차단하는 대신 fail2ban을 구성 할 수 있습니다. fail2ban은 Netfilter / iptables 및 TCP Wrappers /etc/hosts.deny를 사용할 수 있습니다.

무차별 대입 로그인을 방지하기 위해 고려해야 할 여러 가지 중요한 보안 기술이 있습니다.

SSH :

  • 루트 로그인을 허용하지 마십시오
  • ssh 비밀번호를 허용하지 않음 (개인 키 인증 사용)
  • 모든 인터페이스를 듣지 마십시오
  • SSH에 대한 네트워크 인터페이스 (예 : eth1)를 작성하십시오. 이는 요청을 제공하는 인터페이스와 다릅니다 (예 : eth0).
  • 일반적인 사용자 이름을 사용하지 마십시오
  • 허용 목록을 사용하고 SSH 액세스가 필요한 사용자 만 허용
  • 인터넷 액세스가 필요한 경우 ... 유한 한 IP 세트에 대한 액세스를 제한하십시오. 하나의 고정 IP가 이상적이지만 xx0.0 / 16으로 고정하는 것이 0.0.0.0/0보다 낫습니다.
  • 가능한 경우 인터넷 액세스없이 연결하는 방법을 찾으면 SSH에 대한 모든 인터넷 트래픽을 거부 할 수 있습니다 (예 : AWS에서는 인터넷을 우회하는 직접 연결을 얻을 수 있음, 직접 연결이라고 함)
  • fail2ban과 같은 소프트웨어를 사용하여 모든 무차별 대입 공격
  • OS, 특히 보안 및 ssh 패키지가 항상 최신 상태인지 확인하십시오.

신청:

  • 응용 프로그램, 특히 보안 패키지가 항상 최신 상태인지 확인하십시오.
  • 응용 프로그램 '관리자'페이지를 잠급니다. 위의 많은 조언은 응용 프로그램의 관리 영역에도 적용됩니다.
  • 웹 콘솔의 htpasswd와 같은 관리자 영역을 보호하여 기본 응용 프로그램 취약점을 예상하고 진입 장벽을 추가로 만듭니다.
  • 파일 권한을 잠급니다. '업로드 폴더'는 모든 종류의 불쾌한 것들의 진입 점으로 유명합니다.
  • 애플리케이션을 프라이빗 네트워크 뒤에 배치하고 프론트 엔드로드 밸런서와 점프 박스 만 노출하는 것을 고려하십시오 (VPC를 사용하는 AWS의 일반적인 설정).

1
"무차별 대입 시도가 호스트 또는 SSH 수준에 도달하기 전에 시도를 중지 할 수있는 방법이 많이 있습니다." 외부 네트워킹을 제어 할 수없는 호스팅 된 컴퓨터에 대한 제안 사항이있는 경우 특히 관심이 있습니다. 감사!
Kevin Keane

7

iptables 규칙을 사용하여 동일한 IP 주소에서 새 연결의 속도를 제한합니다 (주로 SSH이지만 FTP에서도 잘 작동합니다). 내가 본 것처럼 "fail2ban"및 기타 도구와 비교할 때의 이점은 iptables 경로가 커널 모드에서 완전히 발생하며 로그 파일을 꼬리 / 파싱하기 위해 사용자 모드 도구에 의존하지 않는다는 것입니다.

수백 개의 실패한 ssh 로그인

가능하다면 문제의 프로토콜에 액세스 할 수있는 소스 주소를 제한하면 도움이 될 것입니다.

SSH를 사용하면 실제로 인증서 인증을 사용하고 암호를 수락하지 않아야합니다.


@ mc0e-팔로우하지 않습니다.
Evan Anderson

7

SSH를 보호하는 또 다른 좋은 방법 (10 년 이상 사용했습니다)은 iptables의 최신 라이브러리를 기본적으로 사용하는 것입니다 (배포에 따라 다름).
기본적으로 iptables에 내장 된 포트 노킹으로 사용할 수 있습니다. 이것은 당신에게 많은 두통을 저장합니다. tcp connect (telnet은 한 가지 방법입니다. 또한 ssh 클라이언트를 사용하여 포트를 가리 켰습니다. 지정된 포트 번호에 대한 tcp 연결을 수행하는 모든 것. 퍼티를보고 있습니다!) 클라이언트가 SSH 연결을 시작하면 이것을 사용할 수 있습니다.

다음은 호스트에서 포트 4103의 서버로 텔넷 할 때 iptables가 포트 22를 호스트로 여는 예입니다. 그런 다음 텔넷을 사용하여 포트 4102 또는 4104를 사용하여 sed 개구부를 닫을 수 있습니다. 4102 및 4104의 이유는 22를 여는 것으로부터 간단한 tcp 스캔을 유지하기위한 것입니다. 포트 4103에 대한 tcp connect (telnet) 만 허용됩니다.

즐겨!

오, 나는 Fail2Ban을 선호합니다. 더 많은 유연성과 나는 금지가 tcpwrappers 대신 iptables에서 발생한다는 것을 좋아합니다.

SSH 포크 노킹

iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -m recent --rcheck --name SSH -j ACCEPT
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 4102 -m recent --name SSH --remove -j DROP
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 4103 -m recent --name SSH --set -j DROP
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 4104 -m recent --name SSH --remove -j DROP

6

Fail2ban과 Denyhosts의 또 다른 차이점은 Denyhosts가 다른 Denyhosts 사용자와 차단 목록을 공유 할 수 있다는 것입니다. Fail2ban을 사용하면 이전에 서버에서 보았던 IP 만 차단할 수 있습니다. Denyhost를 사용하면 다른 사람이 서버를 본 경우 무차별 대입 시도가 서버에 도달하지 못할 수 있으며 공격자 전에 차단 목록이 서버에 다운로드됩니다 컴퓨터에 도착합니다.

또 다른 차이점은 Fail2ban은 iptables를 사용하고 Denyhosts는 tcpwrapper를 사용한다는 것입니다. 다른 사람들은 이전에이 차이점을 언급했지만 언급 할만한 몇 가지 참고 사항이 있습니다.

iptables는 효율적으로 차단할 수있는 IP 주소 수로 제한됩니다. 이것이 Fail2ban에 차단 목록을 공유 할 메커니즘이없는 이유 중 하나 일 것입니다.

또 다른 효과는 iptables가 nftables로 교체 될 때 Fail2ban이 작동을 중지하거나 다시 작성해야한다는 것입니다. 거부 호스트는 계속 작동합니다.

따라서 둘 다 장점과 단점이 있습니다. 나는 둘 다 좋아한다. 나는 SSH를 보호하기를 원하기 때문에 Denyhosts를 사용하고 있으며 차단 목록을 공유하는 것을 좋아합니다.


5

Fail2Ban에 대해 한 가지주의 할 점은 DenyHosts보다 약 10MB 더 많은 메모리를 사용하는 것 같습니다. 따라서 128MB VPS를 사용하는 경우 해당 기능을 살펴볼 수 있습니다. 또한 기본 제공 fail2ban은 SSH에서만 설정되므로 구성을 변경하지 않아도 DenyHosts는 적은 메모리에서 동일한 작업을 수행합니다.


2
/ etc / default / fail2ban에 "ulimit -s 256"을 추가하십시오. 내 시스템에서 10MB가 줄었습니다.
pkoch

3

denyhosts는 ssh 용입니다. fail2ban은보다 포괄적입니다 (HTTP, FTP 등). 둘 다 뒤에서 iptables를 사용합니다.


"denyhosts"와 "fail2ban"은 iptables를 사용하여 "차단"동작을 수행하지만 iptables를 사용하여 속도를 제한하지는 않습니다. "사용자 토지"에서 로그를 구문 분석하고 로그 항목에 따라 작동합니다.
Evan Anderson

10
@Evan, denyhosts는 iptables를 사용하지 않습니다 (기본적으로). TCP 래퍼를 사용하고 시스템을 금지 할 때 /etc/hosts.deny를 업데이트합니다.
Zoredache

@ 조르 데슈 : 나는 정정되었습니다. 전에 "denyhosts"를 사용한 적이 있는데 "blocking"기능을 어떻게 호출하는지에 대한 잘못된 가정을했습니다. 여전히, 사용자 영역 로그 파싱 / 반응 도구이기 때문에 나는 엄격히 iptables 기반 솔루션을 "denyhosts"에 사용하는 것을 선호합니다.
Evan Anderson

1

지루한 iptables 또는 fail2ban 구성을 엉망으로 만드는 대신 개방형 커뮤니티가 모든 작업을 수행하고 대신 CSF / LFD를 사용하는 이유는 무엇입니까? 나는 언급 된 다른 모든 옵션보다 강력하게 추천 할 수 있습니다. 서버에서 수행 할 수있는 작업 은 http://configserver.com/cp/csf.html 을 참조 하십시오 . CSF는 제어판이 필요하지 않으며 셸에서 원하지 않는 사람들을 위해 간단한 UI 자체를 제공합니다. 그리고 안정적인 안정적인 비거주 펄 스크립팅이 많이 있습니다.


8
이것은 광고처럼 들리며 실제 질문에 대한 광택입니다.
Drew Khoury 2014 년

글쎄, 나는 실제 질문에 대해 광택을 내지 않았다. 나는 당신 이이 질문에 자신을 귀찮게하지 않아도하는 대안을 건 hand습니다. CSF / LFD는 단순히 다른 방화벽 제어 시스템이 아니라, 여기에 관련된 문제의 종류에서 비롯된 것입니다. 왜 아무도 진화하고 싶지 않습니까? 다른 사람들이 이미 해결했기 때문에 많은 시간을 절약 할 수 있습니다. 이것이 CSF가 존재하는 이유입니다.
Ben

가치가있는 것은 내 시간의 수입 능력을 소중히 여기는 사람으로서 가격이 맞다면 몇 달러가 들더라도 이런 종류의 일에 대한 "플러그 앤 플레이"솔루션을 원할 것입니다. 그렇게하면 내가 정말로 신경 쓰지 않는 것에 대해 배우는 데 시간을 낭비 할 필요가 없지만 보호 기능의 중요성을 인식합니다.
David

1

fail2ban에는 성공적인 ssh 로그인을 인식하고 실패 횟수를 재설정하는 메커니즘이없는 것으로 보입니다.

sshd (적어도 나의 데비안 설치시)에 대한 표준 필터는 클라이언트가 서버가 거부 한 각 ssh 키에 대한 실패 횟수를 기록합니다. 일부 사용자는 몇 번의 키를 통과 한 후에도 로그인에 성공했지만 로그인 할 때마다 많은 키를 표시하고 정기적으로 잠 깁니다.

위의 결과로, 나는 현재 fail2ban에서 멀어 질 것을 생각하고 있습니다. 이와 관련하여 적어도 거부 호스트가 더 좋습니다. 그러나 더 이상 좋은 옵션이 아니며 더 최신 버전의 데비안에서는 더 이상 지원되지 않습니다 (일부 토론은 https://www.chrissearle.org/2015/06/16/replacing-denyhosts-with-fail2ban-for- 데비안 / )

여기에 좋은 해결책이 없습니다.


LDAP 인증을 사용하는 경우 비슷한 문제가 있습니다. 너무 많은 성공적인 : 로그인은 잠겨 얻을하게됩니다 bugs.launchpad.net/ubuntu/+source/libpam-ldap/+bug/562388
마이크

모든 키가 표시되지 않도록하려면 ~ / .ssh / config 파일에서 사용할 키를 지정하는 방법을 사용자에게 표시하십시오.
BillThor

0

실제로 denyHost는 sshd 서비스 외에도 많은 다른 서비스를 막을 수 있다고 생각합니다. 구성 파일- /etc/denyhosts.conf에 다음과 같은 코드 줄이 있습니다.

# BLOCK_SERVICE: the service name that should be blocked in HOSTS_DENY
#
# man 5 hosts_access for details
#
# eg.   sshd: 127.0.0.1  # will block sshd logins from 127.0.0.1
#
# To block all services for the offending host:  
BLOCK_SERVICE = ALL
# To block only sshd:
# BLOCK_SERVICE  = sshd

BLOCK_SERVICE변수를 ALL위와 같이 설정하면 ssh 서비스를 볼 수 있습니다.


0

Denyhosts 버전 3.0 : IP 주소가 로그 파일에 나타날 때마다 Denyhosts는 hosts.deny 파일을 열고 주소와 일치하는 모든 내용을 읽습니다. 매번 메모리에 아무것도 캐시되지 않습니다. 거대한 hosts.deny 파일이 있고 많은 프로브 (많은 로그 파일 항목)의 영향을받는 경우 Denyhosts는 나타나는 모든 IP 주소에 대해 hosts.deny 파일을 읽고 다시 읽는 CPU 돼지가됩니다. 안좋다.

iptables 지원을 활성화하면 Denyhosts가 차단 된 IP 주소 목록을 느리게 생성합니다. 거부 호스트는 효율적인 IP 맵을 생성하기 위해 ipset 또는 nftables를 사용하지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.