본문 바로가기
SW Developer/Server

Ubuntu 서버 SSH 보안 설정 툴 fail2ban 설치 및 운영 방법 관리 쉬운 방화벽 프로그램

by ashespia 2021. 3. 19.
SMALL

 

 

서버를 운영하다 보면 다양한 해킹 시도가 발생한다.

아마존 AWS 나 마이크로소프트 Azure 등은 보안 설절을 통해 허용되는 포트 이외에는 다 방어하는 형태 이다.

그렇지만 사내에서 소규모로 이용하는 서비스들은 온 프레미스 (On premise) 형태로 남는 PC나 서버로 구축해서 사용하는게 더 운영비용이 적게든다.

 

그러나 이들 서버들 앞단의 스위치에서 모든 걸 차단해 주지 않기 때문에 시스템에 영향이 있는 경우가 종종 발생한다.

이런 경우는 인건비가 더 발생한다.

 

결국에는 관리 상의 문제로 아마존 AWS 나 마이크로소프트 Azure 등으로 마이그레이션을 통해 off premise를 고민하게 된다. 

 

방화벽을 설정해 놓았어도 헛점은 발생하기 문에 auth log를 보면 sshd를 통한 접속 시도들이 엄청나게 많이 발생함을 알 수 있다. 

 

root@ta64amxfota: /home/amdev/.ssh]tail -f /var/log/auth.log

Mar 10 15:28:23 ta64amxfota su[12048]: pam_unix(su:session): session opened for user root by amdev(uid=1001)

Mar 10 15:29:10 ta64amxfota sshd[11036]: Received signal 15; terminating.

Mar 10 15:29:10 ta64amxfota sshd[12085]: Server listening on 0.0.0.0 port 2000.

Mar 10 15:29:10 ta64amxfota sshd[12085]: Server listening on :: port 2000.

Mar 10 15:29:16 ta64amxfota sshd[12087]: error: buffer_get_ret: trying to get more bytes 257 than in buffer 28

Mar 10 15:29:16 ta64amxfota sshd[12087]: error: buffer_get_string_ret: buffer_get failed

Mar 10 15:29:16 ta64amxfota sshd[12087]: error: buffer_get_bignum2_ret: invalid bignum

Mar 10 15:29:16 ta64amxfota sshd[12087]: error: key_from_blob: can't read rsa key

Mar 10 15:29:16 ta64amxfota sshd[12087]: error: key_read: key_from_blob AAAAB3NzaC1yc2EAAAABJQAAAQEArKB/gsGyQUP9F1zSm+EMmstB4h+GH7FHxZpF\n failed

Mar 10 15:29:16 ta64amxfota sshd[12087]: error: Received disconnect from 106.245.242.234: 14: No supported authentication methods available [preauth]

 

 

 

Fail2ban 설치

fail2ban 공식 사이트 http://www.fail2ban.org/wiki/index.php/Main_Page

 

Ubuntu Fail2ban 설치 방법

sudo apt-get install fail2ban

 

root@ta64amxfota: /home/amdev]sudo apt-get install fail2ban

Reading package lists... Done

Building dependency tree

Reading state information... Done

The following packages were automatically installed and are no longer required:

  libdbusmenu-gtk4 linux-signed-image-generic-lts-xenial

Use 'apt-get autoremove' to remove them.

The following extra packages will be installed:

  python-pyinotify whois

Suggested packages:

  python-gamin python-pyinotify-doc

The following NEW packages will be installed:

  fail2ban python-pyinotify whois

0 upgraded, 3 newly installed, 0 to remove and 12 not upgraded.

Need to get 184 kB of archives.

After this operation, 927 kB of additional disk space will be used.

Do you want to continue? [Y/n] y

0% [Working]

Get:1 http://kr.archive.ubuntu.com/ubuntu/ trusty/universe fail2ban all 0.8.11-1 [129 kB]

Get:2 http://kr.archive.ubuntu.com/ubuntu/ trusty/main python-pyinotify all 0.9.4-1build1 [24.5 kB]

Get:3 http://kr.archive.ubuntu.com/ubuntu/ trusty/main whois amd64 5.1.1 [30.2 kB]

Fetched 184 kB in 2s (64.0 kB/s)

Selecting previously unselected package fail2ban.

(Reading database ... 222583 files and directories currently installed.)

Preparing to unpack .../fail2ban_0.8.11-1_all.deb ...

Unpacking fail2ban (0.8.11-1) ...

Selecting previously unselected package python-pyinotify.

Preparing to unpack .../python-pyinotify_0.9.4-1build1_all.deb ...

Unpacking python-pyinotify (0.9.4-1build1) ...

Selecting previously unselected package whois.

Preparing to unpack .../archives/whois_5.1.1_amd64.deb ...

Unpacking whois (5.1.1) ...

Processing triggers for man-db (2.6.7.1-1ubuntu1) ...

Processing triggers for ureadahead (0.100.0-16) ...

ureadahead will be reprofiled on next reboot

Setting up fail2ban (0.8.11-1) ...

 * Starting authentication failure monitor fail2ban                                                                                                                                                                                   [ OK ]

Setting up python-pyinotify (0.9.4-1build1) ...

Setting up whois (5.1.1) ...

Processing triggers for ureadahead (0.100.0-16) ...

 

 

 

Fail2ban 설정 파일 위치
Ubuntu fail2ban 설정 파일 위치 
/etc/fail2ban/jail.conf

fail2ban.conf 에는 fail2ban의 로그 레벨 pid 소켓 파일 설정만 존재한다.

 

실제 차단할 서비스들은 jail.conf에서 설정된다.

 

fail2ban 설정 파일 위치

 

fail2ban 설정 파일 jail.conf 주요 설정

fail2ban을 통해 ssh 접속 시도 시에 iptables 에 자동으로 등록해서 접근을 차단할 수 있다. 

 

ignorecommand =     #123.111.0.444/24 접속 허용할 아이피 시도를 몇 번을 하든 차단 안됨.

# "bantime" is the number of seconds that a host is banned.
bantime  = 500    #일정 횟수를 초과하여 접근 시도 시, 접근 거부 시간. 500초

# A host is banned if it has generated "maxretry" during the last "findtime"
# seconds.
findtime  = 600    #지정 횟수 초과 시 차단할 초. 600초

# "maxretry" is the number of failures before a host get banned.
maxretry = 3    #3회를 초과 시 접근 차단.

#destemail = #차단 발생시 수신할 메일 주소 기본설정 주석처리

 

config 파일을 보면 ssh 이외에 다양한 서버 기능들을 확장 설정 가능하다.

아래 서버들의 기본 설정은 전부 Disable 상태 이다.

 

- HTTP Servers 

  apache / apache-multiport / apache-noscript / apache-overflows / php-url-fopen / lighttpd-fastcgi / lighttpd-auth / nginx-http-auth / roundcube-auth / sogo-auth

 

- FTP Servers 

vsftpd / proftpd / pure-ftpd / wuftpd

 

- Mail servers

postfix / couriersmtp / courierauth / sasl / dovecot

 

- Mysql

mysqld-auth

 

- DNS Servers

named-refused-udp / named-refused-tcp

 

Fail2ban 실행 파일들

 

root@ta64amxfota: /home/amdev]ls -al /usr/bin/ | grep fail

-rwxr-xr-x  1 root root       12670 Nov 18  2013 fail2ban-client

-rwxr-xr-x  1 root root       12583 Nov 18  2013 fail2ban-regex

-rwxr-xr-x  1 root root        4502 Nov 18  2013 fail2ban-server

 

 

Fail2ban 로그 파일 위치
/var/log/fail2ban.log 

 

root@ta64amxfota: /home/amdev]tail -f /var/log/fail2ban.log

2021-03-11 15:35:31,633 fail2ban.server : INFO   Exiting Fail2ban

2021-03-11 15:35:31,997 fail2ban.server : INFO   Changed logging target to /var/log/fail2ban.log for Fail2ban v0.8.11

2021-03-11 15:35:31,998 fail2ban.jail   : INFO   Creating new jail 'ssh'

2021-03-11 15:35:32,027 fail2ban.jail   : INFO   Jail 'ssh' uses pyinotify

2021-03-11 15:35:32,053 fail2ban.jail   : INFO   Initiated 'pyinotify' backend

2021-03-11 15:35:32,054 fail2ban.filter : INFO   Added logfile = /var/log/auth.log

2021-03-11 15:35:32,055 fail2ban.filter : INFO   Set maxRetry = 6

2021-03-11 15:35:32,056 fail2ban.filter : INFO   Set findtime = 600

2021-03-11 15:35:32,056 fail2ban.actions: INFO   Set banTime = 600

2021-03-11 15:35:32,093 fail2ban.jail   : INFO   Jail 'ssh' started

 

 

fail2ban 동작 상태 확인 명령어

 

fail2ban-client status

 

fail2ban 설정 파일 jail.conf 주요 설정에 보면 HTTP Servers 종류인 apache php lighttpd nginx roundcube sogo 들과 FTP Server 종류들인 vsftpd proftpd pure-ftpd wuftpd 들도 fail2ban에 등록해서 확인 가능하다.

아래 처럼 현재는 ssh 만 jail 리스트에 추가되어 있다.

 

root@ta64amxfota: /home/amdev]fail2ban-client status

Status

|- Number of jail:      1

`- Jail list:           ssh

 

 

 

부팅 시 fail2ban 자동 실행 확인

 

Ubuntu fail2ban의 경우 설치 시저메 init.d에 자동실행 등록되어 따로 설정해줄 필요가 없다.

시스템 재부팅시 정상적으로 자동 실행되는지 아래와 같이 확인해 봤다.

 

amdev@ta64amxfota:/etc/init.d$ ls -al | grep fail2ban

-rwxr-xr-x   1 root root  6383 11ì›” 18  2013 fail2ban

 

Fail2ban 동작 상태 확인

Fail2ban이 잘 돌고 있는지 확인 하는 방법은 iptables에 접속 시도한 ip나 포트 등으 잘 막히도록 등록되어있는지 확인하는 방법이있다.

 

fail2ban을 설정한지 몇 분 지나지 않았는 데 엄청 많은 ip들이 필터링에 등록되어 있다.

 

root@fota-common-amt: /home/fota]iptables -L

Chain INPUT (policy ACCEPT)

target     prot opt source               destination

fail2ban-ssh  tcp  --  anywhere             anywhere             multiport dports ssh

 

Chain FORWARD (policy ACCEPT)

target     prot opt source               destination

 

Chain OUTPUT (policy ACCEPT)

target     prot opt source               destination

 

Chain fail2ban-ssh (1 references)

target     prot opt source               destination

REJECT     all  --  dhcp.tripleplay.in   anywhere             reject-with icmp-port-unreachable

REJECT     all  --  118-163-178-146.HINET-IP.hinet.net  anywhere             reject-with icmp-port-unreachable

REJECT     all  --  189-041-007-202.xd-dynamic.algarnetsuper.com.br  anywhere             reject-with icmp-port-unreachable

REJECT     all  --  dslC3E450A6.fixip.t-online.hu  anywhere             reject-with icmp-port-unreachable

REJECT     all  --  106.75.101.149       anywhere             reject-with icmp-port-unreachable

REJECT     all  --  182.253.43.24        anywhere             reject-with icmp-port-unreachable

REJECT     all  --  106.75.48.55         anywhere             reject-with icmp-port-unreachable

REJECT     all  --  b1c02038.virtua.com.br  anywhere             reject-with icmp-port-unreachable

REJECT     all  --  43.128.5.20          anywhere             reject-with icmp-port-unreachable

REJECT     all  --  220.85.144.136       anywhere             reject-with icmp-port-unreachable

REJECT     all  --  121.4.79.126         anywhere             reject-with icmp-port-unreachable

REJECT     all  --  1.180.211.138        anywhere             reject-with icmp-port-unreachable

REJECT     all  --  115.159.147.151      anywhere             reject-with icmp-port-unreachable

RETURN     all  --  anywhere             anywhere

root@fota-common-amt: /home/fota]

LIST

댓글