리눅스 서버 보안 : iptables vs fail2ban


10

리눅스 서버 보안, 특히 무차별 대입 공격fail2ban vs custom iptables 사용 에 관한 커뮤니티의 두뇌를 선택하고 싶습니다 .

비슷한 질문이 몇 개 있지만 그 중 어느 것도 내 만족을 주제로 다루지 않습니다. 요컨대 나는 무차별 대입 공격으로부터 인터넷에 노출 된 Linux 서버 (일반 서비스, ssh, 웹, 메일 실행)를 보호하는 최상의 솔루션을 결정하려고합니다.

루트 또는 비밀번호 로그인을 허용하지 않고, 기본 포트를 변경하고, 소프트웨어를 최신 상태로 유지하고, 로그 파일을 확인하고, 특정 호스트 만 서버에 액세스하고 보안을 사용하여 ssh를 잠그는 등 서버 보안을 적절히 처리하고 있습니다. 일반적인 보안 준수를 위해 Lynis ( https://cisofy.com/lynis/ ) 와 같은 감사 도구를 사용해야하므로이 질문은 반드시 입력과 조언이 항상 환영이 되지만 반드시 그런 것은 아닙니다 .

내 질문은 어떤 솔루션을 사용해야하는지 (fail2ban 또는 iptables), 어떻게 구성해야합니까, 아니면 무차별 대입 공격을 방지하기 위해이 둘을 조합하여 사용해야합니까?

주제에 관한 흥미로운 응답이 있습니다 ( Denyhosts vs fail2ban vs iptables-무차별 강제 로그온을 방지하는 가장 좋은 방법은 무엇입니까? ). 나에게 가장 흥미로운 대답은 https://serverfault.com/a/128964 이며 iptables 라우팅 은 사용자 모드 도구를 사용하여 로그 파일을 구문 분석하는 fail2ban과 달리 커널에서 발생 합니다. Fail2ban은 물론 iptables를 사용하지만 작업을 수행 할 때까지 로그 파일을 구문 분석하고 패턴을 일치시켜야합니다.

그런 다음 iptables를 사용하고 속도 제한 ( https://www.rackaid.com/blog/how-to-block-ssh-brute-force-attacks/ )을 사용하여 일정 기간 동안 IP에서 요청을 삭제 하는 것이 합리적입니까? 연결하려는 프로토콜에 관계없이 특정 기간 동안 너무 많은 연결 시도를하는 시간? 그렇다면 해당 패킷에 드롭 대 거부를 사용하는 것에 대한 흥미로운 생각이 있습니다 ( http://www.chiark.greenend.org.uk/~peterb/network/drop-vs-reject ).

Fail2ban은 기본 구성에서 해결되지 않을 수있는 서비스에 대해 사용자 정의 ' 규칙 ' 을 작성할 수있는 형태로 사용자 정의 구성을 허용 합니다. 설치 및 설정이 쉽고 강력하지만 x 값을 초과하는 서비스 / 프로토콜에서 2 번의 액세스 시도가 실패하면 서버에서 IP 를 ' 차단 '하는 것만으로도 과잉이 될 수 있습니다 시간?

여기서의 목표는 매일 로그 워치 보고서를 열고 서버에 연결에 실패한 페이지를 스크롤 할 필요가 없습니다.

시간 내 주셔서 감사합니다.


3
당신은 찾을 수 있습니다 내 서버가 잘 구성되어 있다면 방화벽을 필요 왜? 이 문제에 대한 정보를 얻을 수 있습니다.
MadHatter

답변:


21

fail2ban 또는 iptables를 사용해야합니까?

방화벽 솔루션과 함께 fail2ban 사용 하여 기존 방화벽 규칙을 필요에 따라 확장 하여 규칙에 따라 기존 방화벽 규칙 을 확장 하여 공개 서비스에서 바람직하지 않은 조치를 수행하는 시스템의 특정 ip 주소를 차단합니다. 그들은 서로 협력하여 일합니다.

단순화 : 방화벽은 네트워크 연결 및 패킷 만 볼 수 있으며 그 안에있는 패턴을 이해할 수 있지만 악의적이거나 잘못된 요청과 악의적 인 요청을 구분하기위한 응용 프로그램 수준의 통찰력은 없습니다. 예를 들어, 방화벽은 많은 HTTP API 요청과 Wordpress 관리 페이지의 무차별 암호 추측으로 인한 여러 번의 잘못된 로그인 시도 사이의 차이를 방화벽에서 알 수 없으므로 방화벽은 모두 포트 80 또는 443에 대한 TCP 연결입니다.

Fail2ban은 다소 간접적이지만 방화벽에 대한 응용 프로그램 수준의 통찰력을 제공하기위한 일반적이고 확장 가능한 접근 방식입니다.
종종 응용 프로그램은 악의적이거나 잘못된 요청을 원치 않는 등록을하고 기록하지만 더 이상 남용을 방지 할 수있는 기본 기능은 거의 없습니다. 약간 분리되어 있지만 Fail2ban은 기록 된 악성 이벤트에 대해 조치를 취하고 일반적으로 추가 액세스를 거부하도록 방화벽을 동적으로 재구성하여 피해를 제한하고 추가 악용을 방지 할 수 있습니다. 즉, Fail2ban은 기존 응용 프로그램을 수정하지 않고 남용을 방지 할 수있는 수단을 제공합니다.

방화벽에 응용 프로그램 수준의 통찰력을 제공하는 다른 방법은 침입 탐지 / 예방 시스템을 사용하는 것 입니다.


예를 들어 웹 서버는 공용 서비스이며 방화벽에는 TCP 포트 80 및 443이 인터넷을 위해 열려 있습니다.
일반적으로 HTTP / HTTPS 포트에는 속도 제한이 없습니다. 예를 들어 NAT 게이트웨이 나 웹 프록시 뒤에있는 여러 유효한 사용자가 단일 출처를 가질 수 있기 때문입니다.

웹 서버에 대한 바람직하지 않은 악의적 인 행동을 감지하면 fail2ban을 사용하여 이러한 위반자를 자동으로 차단합니다 (완전히 차단하거나 포트 80 및 443에 대한 액세스를 잠그는 것만으로).

반면 SSH 액세스는 공용 서비스가 아니지만 방화벽의 SSH 액세스를 허용 된 IP 주소 범위로만 제한 할 수없는 경우 속도 제한 수신 연결이 무차별 화를 줄이는 한 가지 방법입니다 -강제 공격. 그러나 방화벽은 사용자 플레이가 성공적인 플레이 북을 실행 중이고 봇이 루트로 로그인하지 못했기 때문에 5 번의 로그인 성공을 구별 할 수 없습니다.


이것은 내가 찾던 통찰력입니다. 시간을 내 주셔서 감사합니다.
kingmilo

2
심층 패킷 검사를 수행 할 수있는 응용 프로그램 방화벽 (응용 프로그램 게이트웨이라고도 함)이 있습니다.
gardenhead

@gardenhead는 동의했고 +1; iptablesOP 가 언급 했기 때문에 나는 주로 커널에 리눅스 패킷 필터를 빌드하는 데 중점을 두었습니다. 내 "의견" 응용 프로그램 방화벽에서는 패킷 을 검사하지 않고 응용 프로그램 프로토콜을 인식하고 전체 요청을 검사해야합니다. 웹에서 당신은 아파치의 mod_security, F5 및 Bluecoat 어플라이언스와 같은 제품을 다루고 심지어 "겸손한"리버스 프록시
HBruijn

@HBruijn 당신 말이 맞아요-패킷이라는 용어를 잘못 사용했습니다. 응용 프로그램 게이트웨이의 구축 방법에 대한 자세한 내용은 알지 못하지만 검사 및 전달 전에 완전한 응용 프로그램 계층 메시지를 작성하기에 충분한 패킷을 수신하기를 기다립니다.
gardenhead

1
팁 : 다른 서비스에 fail2ban을 사용하는 경우에도 ssh에 iptables recent 모듈을 사용하십시오 . 규칙이 제대로 정리되지 않는 흥미로운 실패 모드가있을 수 있으며, 그로 인해 로그인이 영향을 받으면 실제로 성 가실 수 있습니다 (문제를 디버그하기 어렵게 함). 로 최근 액세스를 다시 얻기의 좋은 기회를 가질 수 있도록, 실제 규칙은 변경할 필요가 없습니다.
Simon Richter

8

fail2ban 또는 iptables를 사용해야합니까?

이것은 "안전 벨트 나 자동차를 사용해야합니까?"라고 묻는 것과 다소 비슷합니다.

먼저 fail2ban은 텍스트 파일에서 반복되는 항목을 자동으로 감지하고 지정된 임계 값을 충족 할 때 일부 명령을 실행하는 도구 일뿐입니다.

우리는 종종 정책 위반을 나타내는 반복 로그 항목에 의해 입증 된 바와 같이 일부 정책을 위반하는 호스트를 차단하기 위해 사용하지만 이것이 유일한 것은 아닙니다.

fail2ban을 사용하여 요청시 iptables 규칙을 추가 및 제거 있습니다 . iptables 규칙을 직접 추가하거나 제거하거나 fail2ban을 사용하여 완전히 다른 방식으로 응답 할 수 있습니다. 구성 방법에 관한 모든 것입니다.

fail2ban 실행 여부에 관계없이 일반적인 방화벽이 있어야합니다. 예를 들어, 이러한 방화벽은 합법적 이지 않은 트래픽을 차단 (수신 또는 발신)하는 것 입니다. 예를 들어, 해당 데이터베이스 서버는 실제로 전체 인터넷에서 포트 25의 수신 연결을 처리해야합니까?

그 꼭대기에 서버 보안을 위해 많은 일을하지 않을 것이다 잠시 동안의 기분을 상하게 IP (들)을 차단하여 정책 위반에 fail2ban 응답을 갖는 그 자체 는 것 (좋은 번만 방화벽을 통과 할 필요가 악용)하지만를 시스템 로그를 포함하되 이에 국한되지 않는 시스템의 소음 수준을 줄입니다. 이를 수행하는 간단한 방법은 fail2ban이 iptables를 실행하여 잠시 동안 패킷을 삭제하도록 커널을 구성하는 것입니다. 호스트 방화벽 대신 경계 방화벽을 재구성 할 수 있다면 훨씬 더 좋습니다.

다시 말해, 처음부터 쉽게 분리 될 수있는 한, 둘 다 원합니다.

내가 달성하려고하는 모든 것이 도끼 시간 동안 서비스 / 프로토콜에서 2 번의 액세스 시도를 실패하면 서버에서 IP를 '차단'하는 것만으로도 과잉 일 수 있습니까?

정확히 유스 케이스 fail2ban을 해결하기 위해 설계되었습니다. 의도 한 목적으로 도구를 사용하는 것은 결코 과도하지 않습니다.

여기서의 목표는 매일 로그 워치 보고서를 열고 서버에 연결에 실패한 페이지를 스크롤 할 필요가 없습니다.

질문과 직접 ​​관련이없는 것 : 검토를 위해 로그를 필터링 할 때마다 특정 항목에 대해 수행 할 작업을 고려하십시오. 항목에 대해 수행하려는 모든 작업이 "meh"라고 말하고 계속 진행하면 필터링 할 수 있습니다. 필요한 경우 검토를 위해 전체 로그를 저장해야하지만 실제로 표시 될 때 실제로 수행 할 작업 만 정기적 인 모니터링 워크 플로우로 푸시하십시오 . 몇 번의 연결 시도가 실패한 후 호스트를 차단하도록 fail2ban을 설정 한 경우 수동으로 검토 할 필요가없고 모니터링 알림에서 호스트를 삭제할 수 있습니다. 합법적 인 사용자가 액세스 손실에 대해 불평하는 경우 전체 로그를 가져 와서 살펴보십시오.


광범위한 피드백에 감사하고, 나는 그 둘이 완전히 별개의 기능을 가지고 있다고 생각하지 않았다고 생각합니다.
kingmilo

4

몇 년 전에 같은 질문을 해결했습니다. 성능과 쉬운 설정으로 인해 최근 모듈과 함께 iptables를 사용하기로 결정했습니다. 호스트에서 많은 가상 컨테이너를 보호해야했습니다. 규칙으로 DOS 벡터를 열지 마십시오. 또한 ipset을 사용하여 네트워크 목록 또는 규칙의 IP 목록과 일치 시키십시오. 화이트리스트에 사용합니다. 하나의 목록에있는 한 국가의 모든 네트워크는 미세 조정에 좋습니다. 또한 하나의 포트를 추가하여 동일한 규칙 세트로 다른 서비스를 보호하는 것은 매우 쉽습니다. 따라서 fail2ban로 변경하는 것을 좋아하지 않지만 다른 요구가있는 사람은 fail2ban에 만족할 것입니다.

다음은 몇 가지 샘플입니다.

  #
  # SSH tracking sample
  #
  #################################################################################
  iptables -X IN_SSH
  iptables -N IN_SSH
  iptables -A IN_SSH -m set --match-set net_blacklist src -p tcp -j REJECT
  iptables -A IN_SSH -m set --match-set net_whitelist src -p tcp --match limit --limit 5/second -j LOG --log-prefix whitelist_de_prefix
  iptables -A IN_SSH -m set --match-set net_whitelist src -p tcp -j ACCEPT
  # filter update
  iptables -A IN_SSH -m recent --name sshbf --set --rsource
  # connlimit
  iptables -A IN_SSH -m connlimit --connlimit-above 4 --match limit --limit 5/second -j LOG --log-prefix ssh_connlimit_per_ip_above_4
  iptables -A IN_SSH -m connlimit --connlimit-above 4 -j REJECT
  # filter
  iptables -A IN_SSH -m recent --name sshbf --rttl --rcheck --hitcount 13 --seconds 60 --match limit --limit 5/second -j LOG --log-prefix ssh_filtered_13in60sec
  iptables -A IN_SSH -m recent --name sshbf --rttl --rcheck --hitcount 13 --seconds 60 -j REJECT
  iptables -A IN_SSH -j ACCEPT

iptables -A FORWARD -p tcp --dport ssh --syn --jump IN_SSH
# iptables -A INPUT -p tcp --dport ssh --syn --jump IN_SSH

로깅 메시지의 출력은 fail2ban과 결합 될 수 있습니다. INPUT 규칙에도 사용할 수 있습니다.

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