서버를 운영하다 보면 다양한 해킹 시도가 발생한다.
아마존 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 설정 파일 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]
'SW Developer > Server' 카테고리의 다른 글
[AWS][Lightsail] 윈도우 Windows 서버 세팅 생성 파일 전송 공유 방법 및 EC2와 차이점 (0) | 2021.06.30 |
---|---|
[Ubuntu][ELK] metricbeat index 1개 또는 한번에 전체 삭제 방법 (0) | 2021.05.06 |
[Ubuntu][ELK] APM metricbeat 설정 관련 명령어 및 제거 방법 (0) | 2021.05.06 |
[서버관리] 서버관리 솔루션 종류 (0) | 2020.11.18 |
[서버관리] 우분투 Ubuntu Crontab -e 를 명령어를 통한 실행 및 설정 (0) | 2020.11.18 |
댓글