웹사이트 검색

Debian Jessie에서 Fail2Ban 및 Tinyhoneypot으로 IPv4 보안 강화


이 페이지에서

  1. 재료
  2. 설정
  3. 작동하는지 확인\n
  4. TinyHoneyPot과 협력하도록 Fail2Ban을 조정하겠습니다.\n
  5. 후기\n

IPv4 주소 지정 시스템에서 보안을 강화하기 위한 5분 연습입니다. 이 튜토리얼에서 설명하는 설정의 목적은 일정 기간 동안 포트 스캐너와 악의적인 포트 오프너를 잠그는 것입니다. 이 연습은 Debian Jessie에서만 시도되고 적용됩니다. 실습 중에 각 명령은 루트로 커밋됩니다. 루트 액세스 권한을 얻는 방법은 귀하의 거래입니다.

su -, sudo, 콘솔 로그인 등...

게으른 초보자를 위한 지침: bash 프롬프트를 표시할 때 텍스트의 굵은 부분을 자신의 것으로 복사 붙여넣기만 하면 됩니다.

성분

  • fail2ban 소프트웨어는 방화벽 규칙을 동적으로 처리하여 악당을 차단할 수 있습니다.\n
  • tinyhoneypot은 TCP/IP 포트에서 수신 대기하고 오프너 세부 정보를 로깅할 수 있습니다.\n
  • xinetd 서비스는 tinyhoneypot을 시작하고 수신 포트를 관리합니다.\n

재료 설치: ( 텍스트의 굵은 부분을 복사하여 붙여넣기 )

:~# apt-get install tinyhoneypot fail2ban xinetd

설정

SSH가 다른 포트에서 수신 대기하도록 하려면 ssh 구성 파일을 대체 ssh 포트로 바꾸십시오.

:~# sed -i.orig 's/Port 22/Port 2201/m' /etc/ssh/sshd_config

원래 /etc/ssh/sshd_config 구성은 /etc/ssh/sshd_config.orig로 저장됩니다.

SSH 서비스를 다시 시작하면 이제 2201 포트(22가 아님)에서 수신 대기합니다.

:~# netstat -lptn | grep ssh
tcp 0 0 0.0.0.0:2201 0.0.0.0:* LISTEN 4313/sshd
tcp6 0 0 :::2201 :::* LISTEN 4313/sshd

여태까지는 그런대로 잘됐다..

tinyhoneypot을 시작하고 TCP의 포트 22에서 수신 대기하도록 Xinetd를 구성합니다.

:~# cp -v /usr/share/doc/tinyhoneypot/examples/xinetd.d/thp-pasv /etc/xinetd.d/

다음과 같이 /etc/xinetd.d/thp-pasv를 편집하십시오.

:~# cat /etc/xinetd.d/thp-pasv
# default: on
# description: thp-ftpd calls the generic thpsvcs with param "ftp",
#       resulting in an ftpd emulation.

service thp-pasv
{
        type                    = UNLISTED
        socket_type             = stream
        protocol                = tcp
        port                    = 22
        wait                    = no
        user                    = thpot
        server                  = /usr/sbin/thpot
        server_args             = nullresp
        nice                    = 10
        disable                 = no
        instances               = 1
        per_source              = 1

}

(RE) 새로운 설정으로 xinetd를 시작하고 포트 22에서 수신하는지 확인하십시오.

:~# netstat -lptn | grep xinetd
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 4567/xinetd

작동하는지 확인하십시오.

다른 컴퓨터에서 ssh 연결을 엽니다.

:~$ ssh 192.168.88.212

잠시 후 아무 일도 일어나지 않으면 [Ctrl + C]로 중단하세요.

그리고 테스트 머신에서 로그 항목을 확인합니다.

:~# cat /var/log/thpot/captures
Feb 29 13:02:10 SID=56D4334221165.nullresp PID=4837 SRC=192.168.88.242 SPT=47187 ET=00:00:11 BYTES=39

모든 것이 잘 된 경우 캡처 로그에 항목이 있어야 합니다.

TinyHoneyPot과 협력하도록 Fail2Ban을 조정할 수 있습니다.

:/etc/fail2ban# cp -v jail.conf jail.local

jail.conf를 편집하지 마십시오!! jail.local로 복사본을 만들고 .local 파일에서만 변경하세요!

jail.local에서 [ssh] 섹션을 찾아 /etc/ssh/sshd_config의 [Port 2201]에 따라 수정합니다.

[ssh]

enabled  = true
port     = 2201
filter   = sshd
logpath  = /var/log/auth.log
maxretry = 6

jail.local의 JAIL 섹션에 만들고 입력합니다.

이렇게 하면 Fail2Ban이 tinyhoneypot의 로그 파일을 읽고 거부할 IPv4 주소를 가져옵니다. [ssh] 섹션 뒤에 배치하는 것이 좋습니다. 약 137 행입니다.

[thp-ssh]

enabled  = true
port     = all
filter   = thpot
logpath  = /var/log/thpot/captures
banaction = iptables-allports
maxretry = 1
findtime = 1800
bantime = 99999

Fail2ban에는 무엇을 거부할지 알기 위한 필터가 있어야 합니다. 에는 IPv4 주소를 대체하는 매크로가 있습니다. 이에 대한 필터를 생성합니다:

:~# cat /etc/fail2ban/filter.d/thpot.local
[Definition]

failregex = SRC=<HOST>
ignoreregex =

그건 다됐다!

간단한 테스트....

:~# service fail2ban restart

/var/log/fail2ban.log 끝에 비슷한 내용이 표시되어야 합니다.

2016-02-29 13:54:06,915 fail2ban.jail   [6102]: INFO    Creating new jail 'thp-ssh'
2016-02-29 13:54:06,915 fail2ban.jail   [6102]: INFO    Jail 'thp-ssh' uses pyinotify
2016-02-29 13:54:06,920 fail2ban.jail   [6102]: INFO    Initiated 'pyinotify' backend
2016-02-29 13:54:06,922 fail2ban.filter [6102]: INFO    Added logfile = /var/log/thpot/captures
2016-02-29 13:54:06,923 fail2ban.filter [6102]: INFO    Set maxRetry = 1
2016-02-29 13:54:06,925 fail2ban.filter [6102]: INFO    Set findtime = 1800
2016-02-29 13:54:06,926 fail2ban.actions[6102]: INFO    Set banTime = 99999
2016-02-29 13:54:06,934 fail2ban.jail   [6102]: INFO    Jail 'ssh' started
2016-02-29 13:54:06,940 fail2ban.jail   [6102]: INFO    Jail 'thp-ssh' started

jail.local에서 사용자 지정 값을 확인하고 필요한 경우 미세 조정할 수 있습니다.

findtime = 1800
bantime = 99999

현재 iptables 규칙을 살펴보십시오.

:~# iptables-save
# Generated by iptables-save v1.4.21 on Mon Feb 29 14:05:17 2016
*filter
:INPUT ACCEPT [2:64]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:fail2ban-ssh - [0:0]
:fail2ban-thp-ssh - [0:0]
-A INPUT -p tcp -j fail2ban-thp-ssh
-A INPUT -p tcp -m multiport --dports 2201 -j fail2ban-ssh
-A fail2ban-ssh -j RETURN
-A fail2ban-thp-ssh -j RETURN
COMMIT
# Completed on Mon Feb 29 14:05:17 2016

다른 컴퓨터에서 거부 규칙을 확인합니다.

:~# ssh 192.168.88.212
ssh: connect to host 192.168.88.212 port 22: Connection refused

첫 번째 작업은 아무 작업도 수행하지 않습니다. 공격자는 아마도 잠시 후에 중단할 것입니다. 두 번째 작업은 거부됩니다.

이제 iptables 규칙은 다음과 같아야 합니다.

:~# iptables-save
# Generated by iptables-save v1.4.21 on Mon Feb 29 14:10:53 2016
*filter
:INPUT ACCEPT [4:542]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [1:88]
:fail2ban-ssh - [0:0]
:fail2ban-thp-ssh - [0:0]
-A INPUT -p tcp -j fail2ban-thp-ssh
-A INPUT -p tcp -m multiport --dports 2201 -j fail2ban-ssh
-A fail2ban-ssh -j RETURN
-A fail2ban-thp-ssh -s 192.168.88.242/32 -j REJECT --reject-with icmp-port-unreachable
-A fail2ban-thp-ssh -j RETURN
COMMIT
# Completed on Mon Feb 29 14:10:53 2016

결과는 다음과 같습니다. 공격자 PC는 각 포트에서 거부됩니다.

포스트스크립트

이 하우투를 작성할 당시에는 Fail2Ban도 아니고 tinyhoneypot도 IPv6를 처리할 수 없었습니다. 이 하우투가 유용하다고 생각되면 공유하세요! 친구들에게 그것에 대해 알려주십시오.