Sshguard

From Gentoo Wiki
Jump to: navigation, search
This page is a translated version of the page Sshguard and the translation is 78% complete.

Other languages:
English • ‎español • ‎italiano • ‎русский • ‎中文(中国大陆)‎ • ‎日本語 • ‎한국어
Resources

sshguard는 침투 예방 시스템입니다. sshguard는 서버 로그를 해석하고 침입 활동을 판단하며, 방화벽 규칙을 사용하여 침입 사용자를 쫒아냅니다. sshguard는 C로 작성했기 때문에 해석기를 거치지 않습니다.

동작 원리

app-admin/sshguard 꾸러미는 하나 이상의 로그 파일을 연속적으로 추적하는 간단한 데몬입니다. 로그인 시도에 실패했을 경우에 데본에서 전달하는 로그 이벤트를 분석하며, 시스템 방화벽을 업데이트하여 로그인에 여러번 실패한 사용자를 막아버립니다.

이름에서 암시하는 의미와는 달리 sshguard는 SSH 로그만 해석하지 않습니다. 메일 시스템과 FTP 로그에 대해서도 지원합니다. 지원 서비스 전체 목록은 sshguard.net 웹 사이트에 있습니다.

설치

Emerge

app-admin/sshguard를 설치하십시오:

root #emerge --ask app-admin/sshguard

net-firewall/iptables를 설치했고 시스템 방화벽으로 사용중인지 확인하십시오. 이 글을 쓰는 시점에서는 아직 net-firewall/nftables를 지원하지 않습니다.

root #emerge --ask net-firewall/iptables

IPTables에 대한 더 많은 en사용법 및 설정법은 젠투 위키의 IPTables 게시글에서 찾아보실 수 있습니다.

설정

방화벽 준비

sshguard가 침입 사용자(IP 주소로 차단)를 차단할 때 sshguard 체인을 활용합니다.

체인을 준비하고, 새 접속을 감지하면 실행하는지 확인하십시오:

root #iptables -N sshguard
root #iptables -A INPUT -j sshguard

로그 파일 감시

sshguard의 바탕 개념은 관리자가 프로그램에게 옵션으로 감시할 로그 파일을 전달합니다. 자체적인 sshguard 설정 파일은 없습니다.

젠투에서는 /etc/conf.d/sshguard 파일에서 옵션을 잘 설정할 수 있습니다:

파일 /etc/conf.d/sshguard/var/log/messages를 읽도록 sshguard 설정
PARDONTIME="3600" # Blocks last at least 1 hour (3600 seconds)
WATCHTIME="360"   # Track IP addresses for 5 minutes (360 seconds)
THRESHOLD="10"    # How many problematic attempts trigger a block
  
LOGFILES="-l /var/log/messages"                      # Watch this file...
LOGFILES="${LOGFILES} -l /var/log/auth.log"                      # And this one
  
SSHGUARD_OPTS="-p ${PARDONTIME} -s ${WATCHTIME} -a ${THRESHOLD} ${LOGFILES}"
  1. Space-separated list of log files to monitor. (optional, no default)

FILES="/var/log/messages /var/log/auth.log"

  1. How many problematic attempts trigger a block

THRESHOLD=10

  1. Blocks last at least 24 hours (60480 seconds)

BLOCKTIME=60480

  1. Track IP addresses for 24 hours (60480 seconds)

DETECTION_TIME=60480

  1. IPv6 subnet size to block. Defaults to a single address, CIDR notation. (optional, default to 128)

IPV6_SUBNET=64

  1. IPv4 subnet size to block. Defaults to a single address, CIDR notation. (optional, default to 32)

IPV4_SUBNET=24

  1. Full path to PID file (optional, no default)

PID_FILE=/run/sshguard.pid }}

sshguard 를 사용하는 실행 시간 사용자가 로그 파일에 접근할 수 있는지 확인하십시오.

서비스

OpenRC

기본 실행 레벨에 sshguard를 추가하여 자동으로 시작하도록 한 후, 서비스를 시작하십시오:

root #rc-update add sshguard default
root #rc-service sshguard start

불량 호스트 등록

불량 호스트 등록 옵션을 설정하면 침입자가 동일한 IP 주소로 반복해서 여러번 침입했을 때 완전히 차단합니다. 불량 호스트 목록은 sshguard를 시작할 때마다 불러오고, 동작하는 동안 목록을 새로 확장합니다. sshguard에서는 호스트의 신고 횟수가 기준치를 넘으면 해당 호스트의 주소를 새로 추가합니다.

불량 목록에 등록한 주소는 다시 릴리스(허용)하지 않습니다.

불량 호스트 목록을 활성화하려면, 적당한 디렉터리 및 파일을 만드십시오:

root #mkdir -p /var/db/sshguard
root #touch /var/db/sshguard/blacklist.db

While defining a blacklist it is important to exclude trusted IP networks and hosts in a whitelist.

To enable whitelisting, create an appropriate directory and file:

root #mkdir -p /etc/sshguard
root #touch /etc/sshguard/whitelist

The whitelist has to include the loopback interface, and should have at least 1 IP trusted network f.e. 192.0.2.0/24.

파일 /etc/sshguard/whitelistWhitelisting trusted networks
127.0.0.0/8
::1/128
192.0.2.0/24
참고
The 192.0.2.0/24 entry has to be adjusted to fit the own needs.

불량 목록 파일을 설정에 추가하시고 SSHGUARD_OPTS 변수 값을 바꾸십시오:

파일 /etc/conf.d/sshguardsshguard 불량 목록 신고 처리자 설정
PARDONTIME="3600" # Blocks last at least 1 hour (3600 seconds)
WATCHTIME="360"   # Track IP addresses for 5 minutes (360 seconds)
THRESHOLD="10"    # How many problematic attempts trigger a block
  
BLACKLIST="/var/db/sshguard/blacklist.db"            # Blacklisted addresses are in this file
LOGFILES="-l /var/log/messages"                      # Watch this file...
LOGFILES="${LOGFILES} -l /var/log/auth.log"          # And this one
  
SSHGUARD_OPTS="-b 50:${BLACKLIST} -p ${PARDONTIME} -s ${WATCHTIME} -a ${THRESHOLD} ${LOGFILES}"

THRESHOLD=10 BLOCK_TIME=43200 DETECTION_TIME=604800

IPV4_SUBNET=24 IPV6_SUBNET=64

PID_FILE=/run/sshguard.pid

  1. Add following lines

BLACKLIST_FILE=10:/var/lib/sshguard/blacklist.db WHITELIST_FILE=/etc/sshguard/whitelist }}

바뀐 설정대로 동작하게 하려면 sshguard 데몬을 다시 시작하십시오:

root #/etc/init.d/sshguard restart

문제 해결

'/var/log/auth.log' 파일 추가 중 사라짐!

sshguard를 시작할 때 다음 오류가 나타납니다:

코드 /var/log/auth.log에 감시 주체를 추가할 때 나타나는 오류 메시지
Sep 23 03:39:11 foo.bar.com sshguard[64933]: File '/var/log/auth.log' vanished while adding!

대상 파일이 시스템이 발생한다면 어떤 오류(파일 경로가 다름)가 발생하기도 합니다. 파일을 만들었는지 확인하고, 해당 파일을 감시하지 않도록 sshguard 설정을 업데이트하십시오

OpenRC에서 syslog-ng 시스템을 활용할 경우 syslog-ng.conf에 다음 옵션을 추가하면 좋습니다:

파일 /etc/syslog-ng/syslog-ng.confauth.log 파일 만들기
log { source(src); destination(messages); };
log { source(src); destination(console_all); };
 
destination authlog {file("/var/log/auth.log"); };
filter f_auth { facility(auth); };
filter f_authpriv { facility(auth, authpriv); };
log { source(src);  filter(f_authpriv);  destination(authlog);  };

바뀐 설정 파일을 적용하려면 다시 불러오십시오:

root #rc-service syslog-ng reload

추가 참조

  • Iptables : 젠투 iptables 설치 및 설정

외부 자료

sshguard 문서에는 프로그램을 더 세밀하게 설정하는데 필요한 모든 정보가 들어있습니다.