Debian Jessie에서 Fail2Ban 및 Tinyhoneypot으로 IPv4 보안 강화
이 페이지에서
- 재료
- 설정
- 작동하는지 확인\n
- TinyHoneyPot과 협력하도록 Fail2Ban을 조정하겠습니다.\n
- 후기\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에는 무엇을 거부할지 알기 위한 필터가 있어야 합니다.
:~# 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를 처리할 수 없었습니다. 이 하우투가 유용하다고 생각되면 공유하세요! 친구들에게 그것에 대해 알려주십시오.