작업 환경

    • VMware Workstation Pro (17.6.2 ver)
    • Server : 
      • Rocky_Linux(8.10 ver) : 192.168.10.100/24 (VMnet1)
    • Client:
      • Kali_Linux(2024.04 ver) : 172.16.10.200 (VMnet3)
    • GNS 구성도

 

 

구성 흐름

0. 앱 비밀번호 생성

1. 패키지 설치

2.msmtp 설정

3. fail2ban 설정

4. 테스트

 

1. 패키지 설치

 

1-1. EPEL 설치

sudo dnf install epel-release -y

sudo dnf makecache # 저장소 정보 업데이트
  • EPEL(Extra Packages for Enterprise Linux) 저장소는 Red Hat 계열 배포판에서 추가적인 패키지를 제공한다.
  • EPEL을 설치하거나, 활성화하여 필요한 패키지들을 설치할 수 있다. (비활성화시 아래의 패키지들 설치 오류발생)

 

1-2. Fail2Ban 설치 및 서비스 시작

sudo dnf install fail2ban -y

fail2ban-client -V   # 버전 확인  1.0.2

sudo systemctl start fail2ban  # Fail2Ban 서비스 시작

sudo systemctl enable fail2ban  # Fail2Ban  서비스 부팅 시 자동 시작 설정

 

  • Fail2Ban은 서버의 로그 파일을 지속적으로 감시하고, 특정한 패턴(SSH 로그인 실패 5회)을 발견하면 공격자 IP를 자동으로 차단해주는 보안 도구

부팅시 자동시작 설정 완료

 

1-3. Devekionebt Tools 설치

sudo dnf groupinstall "Development Tools" -y
  • Development Tools 는 C/C++같은 언어로 만들어진 소스코드 기반의 프로그램을 컴파일할 수 있도록 필요한 도구들을 한 번에 설치해주는 메타 패키지 그룹
  • 포함된 대표 패키지들은 다음과 같다
    • gcc : GNU C 컴파일러
    • make : Makefile 기반 자동 빌드 도구
    • autoconf : 소스 빌드를 위한 설정 생성 도구
    • automake : GNU 표준 Makefile 생성기
    • binutils : 바이너리 처리 툴 모음(ld, objdump)
    • libtool : 공유 라이브러리 관리 도구
    • gdb : 디버거

 

1-4. whois 설치

sudo yum install whois

which whois   # 설치 확인

 

1-5. msmtp 설치

sudo dnf install msmtp -y

msmtp --version  # 버전 확인  1.8.10

 

 

2. msmtp 설정

 

2-1. msmtprc 파일 추가

vi ~/.msmtprc  # 아래와 같이 파일 생성

account default
host smtp.gmail.com
port 587
from your_email@gmail.com
auth on
user your_email@gmail.com
password xxxxxxxxxxxxxxxxxxx
tls on
tls_starttls on
logfile ~/.msmtp.log
  • account default : "default" 라는 이름의 계정을 정의
  • host stmp.gmail.com : Gmail 의 SMTP 서버 주소, Gmail을 통해 메일을 보내기 위해 반드시 이 주소 사용
  • port 587 : SMTP 서버의 포트 번호, 587번 포트는 STARTTLS 를 사용하는 암호화된 메일 전송에 사용
  • from your_email@gmail.com : 보낸 사람 이메일 주소
  • auth on : 인증을 활성화, Gmail SMTP 서버는 인증 없는 발송을 허용하지 않으므로 필수
  • user your_email@gmail.com : 받는 사람 이메일 주소
  • password xxxxxxxxxxxxxxxxxxx : 앱 비밀번호 설정
    • 이 방법은 GNOME-Keyring 방식과 plain password 방식이 있다.
    • GNOME-Keyring 방식은 다른 파일에 적혀있 앱 비밀번호를 가져오도록 해주나, 서버에서 설치는 리소스 낭비가 된다.
    • 따라서, 서버에서는 plain password + chmod 600 방식을 사용하는 것이 일반적으로 더 좋다.
    • 보안을 더 높이고 싶다면 pass 또는 gpg-agent 연동을 고려
  • tls on : TLS 암호화 사용을 활성화, 보안 강화를 위해 필수
  • tls_starttls on : STARTTLS 명령으로 암호화 세션을 시작, 포트 587을 쓸 때 꼭 필요한 설정
  • logfile ~/.msmtp.log : msmtp가 메일을 보낼 때 생기는 로그를 기록할 파일 경로

 

2-2. msmtprc 파일 권한 수정

chmod 600 ~/.msmtprc

앱 비밀번호를 평문 그대로 파일에 저장을 했으므로 소유자(root)만 r, w 가 가능하도록 설정

 

3. Fail2Ban 설정

 

3-1. jail.local 파일 추가

vi /etc/fail2ban/jail.local   # 파일에 아래 내용 수정

[DEFAULT]
destemail = youremail@gmail.com
sender = youremail@gmail.com
mta = mail
action = %(action_mwl)s
#action = %(action_)s
#action = %(action_iptables)s
bantime = 240
findtime = 300
maxretry = 5

[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/secure
maxretry = 5
  • destemail = your_email@gmail.com : 메일 수신자 주소
  • sender = your_email@gmail.com : 메일 발송자 주소
  • mta = msmtp : 메일 전송 에이전트 설정
  • action = %(action_)s : 액션을 설정
    • 메일을 보내고, 로그파일과 차단된 IP 주소도 포함해서 메일을 보내도록 하는 설정
    • 이메일로 로그내용, 차단된 IP 주소, 메일 제목/본문 을 받게 된다
  • bantime = 300 : 차단 시간을 설정 (테스트를 위해 300초)
  • findtime = 300 : 실패 시도 기간 설정(300초 동안 몇 번 실패했는지 체크)
  • maxretry = 5 : 최대 재시도 횟수(5번 실패시 해당 IP 차단)
  • [sshd]
    enabled = true : SSH 관련 jail을 활성화하는 설정, true로 설정되면 SSH 로그인 시도가 실패할 때, Fail2Ban 이 해당 IP 차단하고 메일 전송

 

3-2. mail-whois-lines.conf 파일 추가

vi /etc/fail2ban/action.d/mail-whois-lines.conf  # 아래 내용 수정

[Definition]

actionstart =
actionstop =
actioncheck =

actionban = printf '📛 경고: SSH 접속 차단 발생\n\n다음 IP 주소가 SSH 로그인 시도를 %(maxretry)s회 이상 실패하여 Fail2Ban에
 의해 차단되었습니다.\n\n🔹 차단된 IP 주소 : <ip>\n🔹 차단된 서비스 : <name>\n🔹 감지 시간       : $(date)\n🔹 허용 실패 횟
수 : %(maxretry)s회\n🔹 차단 시간       : %(bantime)s초\n\n🔎 WHOIS 정보:\n\n$(/usr/bin/whois <ip>)\n\n-- Fail2Ban 알림 시>스템' | msmtp --from=yourmail@gmail.com -t yourmail@gmail.com@gmail.com -a default --subject="[Fail2Ban Alert] <name>: banned <ip>"

actionunban =

 

jail.conf 파일에서

action = %(action_mwl)s 로 설정을 하였으므로 action 파일이 필요하다.

그 파일이 mail-whois-lines.conf 이다.

 

 

3-3. sendmail → msmtp가 되도록 심볼릭 링크 생성

mv /usr/sbin/sendmail /usr/sbin/sendmail.backup   # 기존의 sendmail 백업 만들어두기

ln -s /usr/bin/msmtp /usr/sbin/sendmail    # sendmail -> msmtp가 되도록 링크

ls -l /usr/sbin/sendmail    # 확인

다음과 같이 결과가 나오면 된다

 

 

4. 테스트

 

 

4-1. Fail2Ban 재시작 및 로그 실시간 확인

sudo systemctl restart fail2ban  # 재시작

sudo systemctl status fail2ban   # 상태 확인   running 이면 OK

systemctl status fail2ban 확인

 

 

4-2. 실패 유도 테스트(칼리에서 진행)

ssh wronguser@your_server_ip

칼리 리눅스에서 SSH 로그인 5회 이상 실패 → Connection refused 된 것을 확인할 수 있다.

 

 

4-2. 차단 확인

fail2ban-client status sshd

로키 리눅스에서 칼리 리눅스 IP(172.16.10.200)가 차단된 것을 확인할 수 있다.

 

 

 

4-3. 메일 확인

 


참고

fail2ban-client -d

 

 

'Linux' 카테고리의 다른 글

[Linux] FTP 구성  (0) 2025.04.08

작업 환경

  • VMware Workstation Pro (17.6.2 ver)
  • Server : 
    • Rocky_Linux(8.10 ver) : 10.10.10.10/24 (VMnet1)
  • Client:
    • Kali_Linux(2024.04 ver) : 20.20.20.20/24 (VMnet2)
  • GNS 구성도

 

구성 흐름

1. HDD(3G) 추가 및 mount

2. 유저를 생성하기 전, 홈 디렉터리 및 스켈파일 생성

3. ftp 서비스 관련 설정

4. 방화벽 설정

 


1. HDD(3G) 추가 및 mount 

 

① HDD 스캔하기

find / -name scan

 

② 새로 추가한 HDD를 PC에 인식시키기

echo "- - -" > /sys/devices/pci0000:00/0000:00:10.0/host2/scsi_host/host2/scan

 

③ 확인

/dev/sdb 생성 확인

 

④ ext4 타입으로 포맷

mkfs.ext4 /dev/sdb

 

⑤ /export/sdb 디렉터리에 mount

mount /dev/sdb /export/sdb

 

⑥ 자동 마운트 설정

  • 첫 번째, 해당 디스크의 UUID를 알아야함(복사)
blkid

  • 두 번째, 자동 마운트 설정 파일로 접근
vi /etc/fstab

 

  • 세 번째, UUID 정보를 파일 맨 아래에 추가

 ""

더보기

※참고 /etc/fstab 파일의 각 행은 모두 6개의 항목으로 구성되어 있다.

  1. 장치명 : 사용자가 보유한 볼륨 이름 
  2. 마운트 포인트 : 볼륨을 마운트하려는 위치(절대경로)
  3. 파일시스템 : ext4, swap, xfs 등등
  4. 마운트 옵션 : defaults(auto, rw, nouser, exec, suid 옵션을 모두 포함)
  5. dump 설정 : 0 (dump 되지 않는 파일 시스템), 1 (백업 등의 목적으로 dump 가능한 파일 시스템)
  6. fsck 설정 : 부팅시 fsck를 통해 파일 시스템을 체크할지 여부 설정
    • 0 : 부팅 시 fsck 미실행, 1 : 부팅 시 root 파일 시스템 체크, 2 : 부팅 시 root 이외의 파일 시스템 체크

 

2. 유저 생성

- 홈 경로 : /export/sdb/home/유저명

- 스켈경로 : /skel3/유저명

mkdir -p /export/sdb/home/user5/pub # 홈경로 생성

mkdir /skel3
cp -a /etc/skel/ /skel3/user5   # 스켈경로 생성

useradd -d /export/sdb/home/user5 -mk /skel3/user5 user5  # user5 생성
passwd 	# 패스워드 설정

chown user5:user5 /export/sdb/home/user5  # root로 생성 -> 소유자를 admin5로 변경
chmod 740 /export/sdb/home/user5   # 소유자=모든 권한, 그룹=읽기만가능

useradd test5
passwd test5
usermod -G admin5 test5   # admin5 그룹에 test5를 추가
usermod -d ~admin5/pub    # test5 홈디렉터리 변경
tail -n 2 /etc/passwd  # 확인
id test5  # 확인

 

 

3. ftp 서비스 관련 설정

- FTP에 대한 설정은 /etc/vsftpd/vsftpd.conf 파일에서 진행

vi /etc/vsftp/vsftpd.conf
# /etc/vsftpd/vsftpd.conf 모든 설정 정리

anonymous_enable=NO    # 익명 사용자 FTP 접근 차단

local_enable=YES       # 로컬 사용자의 FTP 접근 허용

write_enable=YES       # 로컬 사용자의 파일 업로드/수정 허용

local_umask=022        # 로컬 사용자가 파일 업로드시의 기본 파일 권한 설정

#anon_upload_enable=YES   # 익명 사용자의 파일 업로드 설정. (주석=비활성화)

#anon_mkdir_write_enable=YES   # 익명 사용자가 디렉토리를 생성 권한 설정 (주석=비활성화)

dirmessage_enable=YES     # 디렉토리에 접근할 때, 디렉토리 메시지 표시(ex = README파일)

xferlog_enable=YES     # 파일 전송 로그를 활성화

connect_from_port_20=YES    # FTP 데이터 전송을 위해 포트 20을 사용하도록 설정

#chown_uploads=YES     # 업로드된 파일의 소유권을 변경하도록 설정 (주석=비활성화)
#chown_username=whoever   # 파일 소유자가 될 사용자를 지정 (whoever=파일 소유자)

#xferlog_file=/var/log/xferlog   # 로그 파일의 전송 위치를 지정(주석=기본 위치로 설정)

xferlog_std_format=YES    # 표준 형식으로 전송 로그를 기록(쉽게 분석가능)

#idle_session_timeout=600   # 세션이 비활성 상태로 유지되는 시간(초)을 설정

#data_connection_timeout=120  # 데이터 연결 타임아웃 시간을 설정(데이터 미 전송시 연결 해제)

#nopriv_user=ftpsecure  # 

#async_abor_enable=YES  # ABOR 명령을 허용하는 설정(ABOR : FTP에서 전송을 중단하는 명령)

#ascii_upload_enable=YES  # 텍스트 파일을 업로드할 때 ASCII 모드를 사용하도록 설정
#ascii_download_enable=YES # 텍스트 파일을 다운로드할 때 ASCII 모드를 사용하도록 설정

banner_file=/sun/sun  # FTP 서버에 접속할 때 표시할 배너 메시지 파일을 설정

#deny_email_enable=YES  # 이메일 도메인 차단 기능을 활성화

#banned_email_file=/etc/vsftpd/banned_emails  # 차단된 이메일 주소 목록을 저장하는 파일을 지정

#chroot_local_user=YES  # 로컬 사용자를 자신들의 홈 디렉토리로 제한(홈 디렉토리 외 접근 불가)
#chroot_list_enable=YES  # 위의 설정 활성화 시 예외시킬 유저는 아래의 list에 정보가 있어야 함

#chroot_list_file=/etc/vsftpd/chroot_list # 위의 설정 활성화 시, 예외 시킬 파일 경로 설정

#ls_recurse_enable=YES  # 디렉토리 목록을 재귀적으로 표시

listen=YES               # FTP 서버가 들어오는 연결을 수락하도록 설정(YES=서버 수신 대기 상태)
listen_ipv6=NO           # IPv6 주소에서의 연결을 비활성화(NO=IPv4 주소만 사용)
pam_service_name=vsftpd  # PAM을 사용하여 인증을 처리하는 서비스 <- vsftpd 사용
userlist_enable=YES      # FTP 접속을 허용할 사용자 목록을 관리하는 기능을 활성화
anon_root=/anon          # 익명 사용자가 접속할 기본 디렉토리를 /anon으로 설정
pasv_enable=yes          # 패시브 모드를 활성화
pasv_min_port=50000      # 패시브 모드에서 사용할 최소 포트 번호를 50000으로 설정
pasv_max_port=50010      # 패시브 모드에서 사용할 최대 포트 번호를 50010으로 설정
		 	 # 위의 포트 범위를 방화벽에서 열어야 함

 

  • 설정마치면 항상 서비스 재시작
systemctl restart vsftpd

 

4. 방화벽 설정

  • 방화벽(데몬) 재시작
systemctl restart firewalld
  • 방화벽(데몬) 상태 확인
systemctl status firewalld

 

  • 방화벽에 ftp 서비스 추가
firewall-cmd --permanent --add-service ftp

  • 방화벽 재시작
firewalld-cmd --reload

  • 방화벽 리스트 확인
firewall-cmd --list-all

 

 

 


알FTP로 접근하면 파일 공유 가능해진다.