Fail2Ban은 지속해서 잘못된 패스워드를 입력한 IP 주소들을 방화벽 규칙에 추가해서 차단(Ban)한다. sshd(SSH 서버) 이외에도 Apache Web Server(아파치 웹 서버) 등 여러 서버의 로그를 읽어 차단할 수 있지만, 이 글에서는 간단하게 SSH 서버 설정만 다룬다.


모든 명령을 root 계정으로 실행했으며 해당 서버의 배포판과 버전은 CentOS Linux release 7.6.1810 (Core), 패키지들의 버전은 Fail2Ban v0.9.7, firewalld v0.5.3, iptables v1.4.21이다.



1. Python 3.4, EPEL 저장소 설치


Fail2ban 0.9.x 버전은 Python 2.6 버전 이상 혹은 Python 3.2 버전 이상을 필요로 한다.


# yum -y install python34



EPEL 패키지 저장소 설치


# yum -y install epel-release



2. Fail2Ban 설치


yum -y install fail2ban



3. Fail2Ban 구성


firewalld 서비스를 이용하는 CentOS에서는 아래와 같이 해당 파일을 설정해야 한다.



# vim /etc/fail2ban/jail.conf


※ 필수

87번 줄의 "backend = auto"를 "backend = systemd"로 변경한다.

161번 줄의 "banaction = iptables-multiport"를 "banaction = firewallcmd-new"로 변경한다.

224번 줄의 "[sshd]" 아래에 "enabled = true"를 추가한다.


선택

59번 줄의 bantime : 차단 기간 (초 단위)

63번 줄의 findtime : 설정된 findtime 내에 maxretry 만큼 실패하면 차단 (초 단위)

66번 줄의 maxretry : 설정된 숫자만큼 실패하면 차단



/etc/fail2ban/fail2ban.conf 파일은 굳이 건드리지 않아도 서비스가 작동하지만 간단하게 설명하자면…


loglevel – 기록될 로그의 최소 레벨. 설정 가능한 레벨은 다음과 같다.

CRITICAL, ERROR, WARNING, NOTICE, INFO, DEBUG


logtarget – 로그가 기록될 파일 경로. 기본 설정은 /var/log/fail2ban.log이며 다음 네 가지 값 중 하나를 설정할 수 있다.

STDOUT, STDERR, SYSLOG, File (예 /var/log/fail2ban.log)


socket – socket 파일이 위치할 디렉터리

pidfile – pid 파일의 위치


설정을 편집했으면 fail2ban.conf, jail.conf의 설정을 각각 fail2ban.local, jail.local로 복사해둔다.

서비스 시작 시 .conf파일부터 먼저 읽고 그 다음 .local의 설정을 읽는데,

fail2ban을 업데이트하면 .conf파일이 초기화되기 때문


# cp /etc/fail2ban/fail2ban.conf /etc/fail2ban/fail2ban.local

cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

# ls /etc/fail2ban/



4. Fail2Ban 서비스 시작 및 자동 실행 등록


# systemctl start fail2ban.service

# systemctl enable fail2ban.service

# systemctl status fail2ban.service



5. 로그 및 차단 현황 보기


# tail -30 /var/log/fail2ban.log



# fail2ban-client status sshd



# iptables -L f2b-sshd





태그 : 리눅스, Linux, CentOS, 서버, Server, 보안, SSH, sshd, Fail2Ban, Firewalld, Firewall, 방화벽, iptables

'Linux > CentOS' 카테고리의 다른 글

(CentOS 7) Strongswan을 이용한 IKEv2 VPN 서버 구축하기  (7) 2019.02.24

Strongswan(스트롱스완)은 오픈소스 멀티플랫폼 IPsec 기반 VPN 솔루션으로 IKEv1과 IKEv2 키 교환 프로토콜, X.509 인증서 혹은 사전 공유키 기반 인증 그리고 안전한 IKEv2 EAP 사용자 인증을 지원하며 강력한 인증 메커니즘에 중점을 두었다. 


이 글에서는 Strongswan과 EAP-MSCHAPv2 인증, Letsencrypt 인증서를 사용하는 IKEv2/IPsec 서버를 리눅스 CentOS 7에 설치하는 과정을 담아내었다.


이 글에 쓰인 CentOS 7 서버는 미국 뉴저지주에 위치했으며 test.vorcloud.com 도메인을 사용했다.

모든 명령은 root 계정에서 실행되었으며 보라색 글씨는 그대로 써도 되는 부분을 의미하고 빨간 글씨는 바꿔줘야 함을 의미한다. 



1. Strongswan 설치하기


EPEL 패키지 저장소와 Strongswan을 설치한다.


yum -y install epel-release

# yum -y install strongswan



2. Let's encrypt를 이용한 SSL 인증서 만들기


'test.vorcloud.com' 도메인 주소에 대한 인증서를 만들기 위해 letsencrypt 툴 certbot을 설치한다.


yum -y install certbot



인증서 제작에 앞서 firewall-cmd 명령어를 이용해 HTTP 및 HTTPS 포트를 열어둘 필요가 있다.

아래의 명령어를 입력해서 수행한다.


# firewall-cmd --add-service=http --permanent 

# firewall-cmd --add-service=https --permanent 

# firewall-cmd --reload




이제 새로운 SSL 인증서 파일들을 만들 준비가 되었다. 아래 명령어를 입력하되 붉은 글씨로 된 부분은 자신의 서버와 어드민에 맞게 바꿔준다.


certbot certonly --rsa-key-size 4096 --standalone --agree-tos --no-eff-email --email vorcloud@post.com -d test.vorcloud.com




letsencrypt 인증서들이 /etc/letsencrypt/live 디렉터리에 생성되었다.

이제 생성된 인증서 파일들('fullchain.pem', 'privkey.pem', 'chain.pem')을 /etc/strongswan/ipsec.d/ 디렉터리로 복사하고 제대로 시행되었는지 ls 명령어를 이용해 파일들을 확인한다.


cp /etc/letsencrypt/live/test.vorcloud.com/fullchain.pem /etc/strongswan/ipsec.d/certs/

# cp /etc/letsencrypt/live/test.vorcloud.com/privkey.pem /etc/strongswan/ipsec.d/private/

# cp /etc/letsencrypt/live/test.vorcloud.com/chain.pem /etc/strongswan/ipsec.d/cacerts/

# ls /etc/strongswan/ipsec.d -R




3. Strongswan 설정



/etc/strongswan/ 디렉터리로 가서 ipsec.conf파일을 ipsec.conf.original로 이름을 바꿔 백업한다.


cd /etc/strongswan/

# mv ipsec.conf{,.original}

# ls



vim 에디터를 이용해 /etc/strongswan/ipsec.conf파일을 새로 만들어서 편집한다.

(다른 텍스트 에디터를 사용해도 상관없다.)

아래 박스의 내용의 수정할 부분을 수정해서 복사/붙여넣기 하자.


vim /etc/strongswan/ipsec.conf


#global configuration IPsec

#chron logger

config setup

    charondebug="ike 1, knl 1, cfg 0"

    uniqueids=no


#define new ipsec connection

conn myVPN

    auto=add

    compress=no

    type=tunnel

    keyexchange=ikev2

    ike=aes128-sha1-modp1024,aes128-sha1-modp1536,aes128-sha1-modp2048,aes128-sha256-ecp256,aes128-sha256-modp1024,aes128-sha256-modp1536,aes128-sha256-modp2048,aes256-aes128-sha256-sha1-modp2048-modp4096-modp1024,aes256-sha1-modp1024,aes256-sha256-modp1024,aes256-sha256-modp1536,aes256-sha256-modp2048,aes256-sha256-modp4096,aes256-sha384-ecp384,aes256-sha384-modp1024,aes256-sha384-modp1536,aes256-sha384-modp2048,aes256-sha384-modp4096,aes256gcm16-aes256gcm12-aes128gcm16-aes128gcm12-sha256-sha1-modp2048-modp4096-modp1024,3des-sha1-modp1024!

    esp=aes128-aes256-sha1-sha256-modp2048-modp4096-modp1024,aes128-sha1,aes128-sha1-modp1024,aes128-sha1-modp1536,aes128-sha1-modp2048,aes128-sha256,aes128-sha256-ecp256,aes128-sha256-modp1024,aes128-sha256-modp1536,aes128-sha256-modp2048,aes128gcm12-aes128gcm16-aes256gcm12-aes256gcm16-modp2048-modp4096-modp1024,aes128gcm16,aes128gcm16-ecp256,aes256-sha1,aes256-sha256,aes256-sha256-modp1024,aes256-sha256-modp1536,aes256-sha256-modp2048,aes256-sha256-modp4096,aes256-sha384,aes256-sha384-ecp384,aes256-sha384-modp1024,aes256-sha384-modp1536,aes256-sha384-modp2048,aes256-sha384-modp4096,aes256gcm16,aes256gcm16-ecp384,3des-sha1!

    fragmentation=yes

    forceencaps=yes

    dpdaction=clear

    dpddelay=300s

    rekey=no

    left=%any

    leftid=@test.vorcloud.com

    leftcert=fullchain.pem

    leftsendcert=always

    leftsubnet=0.0.0.0/0

    right=%any

    rightid=%any

    rightauth=eap-mschapv2

    rightsourceip=10.11.12.0/24

    rightdns=1.1.1.1,1.0.0.1

    rightsendcert=never

    eap_identity=%identity


- myVPN이라는 이름의 IPsec VPN tunnel을 만든다.

- IKEv2와 ESP cipher suites를 이용한 인증임을 명시한다.

- left(서버)가 /etc/strongswan/ipsec.d/certs/ 디렉터리에 위치한 fullchain.pem letsencrypt 증명서를 사용하며 test.vorcloud.com 도메인을 사용한다.

- right(클라이언트)가 eap-mschapv2 EAP 인증을 사용하고, '10.11.12.0/24'의 가상 네트워크가 부여되며 , Cloudflare DNS 사용을 하게 설정한다.



vim /etc/strongswan/ipsec.secrets 파일을 편집해 RSA 서버 개인키 및 EAP 유저 자격 증명 암호를 설정한다. 아래와 같이 내용을 적으면 되며 붉은 부분을 필요에 맞게 변경하거나 유저를 더 추가하면 된다.



vim /etc/strongswan/ipsec.secrets


# ipsec.secrets - strongSwan IPsec secrets file

: RSA "privkey.pem"

testuser1 : EAP "abc!123"

testuser2 : EAP "vorcloud@life"


- /etc/strongswan/ipsec.d/private에 있는 privkey.pem으로 RSA 서버 개인 키를 설정한다.

EAP 유저 증명을 '유저이름 : EAP "비밀번호"' 포맷으로 정의한다.



4. Firewalld에서 NAT 활성화


IPsec 프로토콜 인증 헤더(AH)와 보안 페이로드 캡슐화(ESP)를 rich-rule 설정을 이용해 Firewalld에 추가한다.


firewall-cmd --zone=public --permanent --add-rich-rule='rule protocol value="esp" accept'

# firewall-cmd --zone=public --permanent --add-rich-rule='rule protocol value="ah" accept'



IPsec UDP 포트와 서비스를 허용한다.


firewall-cmd --zone=public --permanent --add-port=500/udp

# firewall-cmd --zone=public --permanent --add-port=4500/udp

# firewall-cmd --zone=public --permanent --add-service="ipsec"



NAT masquerading을 활성화하고 설정 적용 및 설정 출력


firewall-cmd --zone=public --permanent --add-masquerade

# firewall-cmd --reload

# firewall-cmd --list-all




5. 포트포워딩


텍스트 에디터로 /etc/sysctl.conf에 아래 내용을 추가한다.


vim /etc/sysctl.conf


net.ipv4.ip_forward = 1

net.ipv4.conf.all.accept_redirects = 0

net.ipv4.conf.all.send_redirects = 0


설정 적용


sysctl -p



서비스 시작 및 리부팅 시 자동 시작 설정, 서비스 상태 보기


systemctl start strongswan

# systemctl enable strongswan

# systemctl status strongswan




Windows에서 연결하기



네트워크 공유 센터에서 새 연결 또는 네트워크 설정 클릭



회사에 연결 클릭



아니요, 새 연결을 만듭니다.



내 인터넷 연결 사용(VPN)



인터넷 주소 : test.vorcloud.com

대상 이름 : vorCloud Test



만들어진 VPN 연결 우클릭하고 속성 클릭



보안 탭에서 VPN 종류 IKEv2로 설정, 확인



우클릭 후 연결/연결 끊기 클릭








유저이름과 비밀번호 입력, 확인




연결이 된다.



https://myip.info/에 접속하면 Location이 미국인것을 확인할 수 있다.





iOS에서 연결하기




설정 - VPN





VPN 구성 추가...

유형 : IKEv2

설명 : vorCloud Test

서버 : test.vorcloud.com

원격 ID : test.vorcloud.com

사용자 이름 : testuser2

암호 : vorcloud@life

완료 터치





vorCloud Test 선택 후 VPN 구성 아래의 상태 활성화




웹 브라우저에서 https://myip.info/ 에 접속 후 Location 확인





서버에서 연결 확인하기



strongswan statusall





태그 : 리눅스, Linux, CentOS, 서버, Server, VPN, 네트워크, Network, Networking, 보안, 야동 규제 ㅎㅎ;


'Linux > CentOS' 카테고리의 다른 글

(CentOS 7) Fail2Ban, firewalld를 이용한 SSH 보안 강화  (2) 2019.02.27

+ Recent posts