작업 환경

  • VMware Workstation Pro (17.6.2 ver)
  • Server 
    • Rocky_Linux(8.10 ver) : NAT
U-12 (상) 2. 파일 및 디렉토리 관리 > 2.8 /etc/services 파일 소유자 및 권한 설정
취약점 개요
점검 내용 /etc/services 파일 권한 적절성 점검
점검 목적 /etc/services 파일을 관리자만 제어할 수 있게 하여 비인가자들의 임의적인 파일 변조를 방지하기 위함
 보안 위협 services 파일의 접근권한이 적절하지 않을 경우 비인가 사용자가 운영 포트번호를 변경하여
정상적인 서비스를 제한하거나, 허용되지 않은 포트를 오픈하여 악성 서비스를 의도적으로 실행할 수 있음
판단 기준

양호 : /etc/services 파일의 소유자가 root(또는 bin, sys)이고, 권한이 644 이하인 경우
취약 : /etc/services 파일의 소유자가 root(또는 bin, sys)가 아니거나, 권한이 644 이하가 아닌 경우
참고 /etc/services : 서비스 관리를 위해 사용되는 파일. 해당 파일에 서버에서 사용하는 모든 포트(port)에 대해 정의되어
있으며, 필요시 서비스 기본사용 포트를 변경하여 네트워크 서비스를 운용할 수 있음

 

파일 확인법

ls -l /etc/services

 

/etc/services 파일 권한 확인

 

LINUX

  • Step 1) "/etc/services" 파일의 소유자 및 권한 변경 (소유자 root, 권한 644)
    • chown root /etc/services
    • chmod 644 /etc/services

 


권한 설정이 잘되어 있었다.

 

작업 환경

    • 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) : NAT
U-11 (상) 2. 파일 및 디렉토리 관리 > 2.7 /etc/syslog.conf 파일 소유자 및 권한 설정
취약점 개요
점검 내용 /etc/syslog.conf 파일 권한 적절성 점검
점검 목적 /etc/syslog.conf 파일의 권한 적절성을 점검하여, 관리자 외 비인가자의 임의적인 syslog.conf 파일 변조를 방지
 보안 위협 syslog.conf 파일의 설정 내용을 참조하여 로그의 저장위치가 노출되며 로그를 기록하지 않도록 설정하거나
대량의 로그를 기록하게 하여 시스템 과부하를 유도할 수 있음
판단 기준

양호 : /etc/syslog.conf 파일의 소유자가 root(또는 bin, sys)이고, 권한이 640 이하인 경우
취약 :  /etc/syslog.conf 파일의 소유자가 root(또는 bin, sys)가 아니거나, 권한이 640 이하가 아닌 경우
참고 /etc/syslog.conf : syslogd 데몬 실행 시 참조되는 설정파일로 시스템 로그 기록의 종류, 위치 및 Level을 설정할 수 있음

 

파일 확인법

ls -l /etc/syslog.conf
ls -l /etc/rsyslog.conf # CentOS 6 이상

 

LINUX

  • Step 1) "/etc/syslog.conf" 파일의 소유자 및 권한 변경 (소유자 root, 640)
    • chown root /etc/syslog.conf
    • chmod 640 /etc/syslog.conf

LINUX (CentOS 6 이상)

  • Step 1) "/etc/rsyslog.conf" 파일의 소유자 및 권한 변경 (소유자 root, 640)
    • chown root /etc/rsyslog.conf
    • chmod 640 /etc/rsyslog.conf

/etc/rsyslog.conf 권한 변경