페이지 목차
이 페이지에서 검색
EIS
이 페이지에 묻기
EIS · 현재 차시와 목차 본문에서만 찾아 답합니다. 답을 지어내지 않고 해당하는 대목을 그대로 보여 주며, 여기에 없으면 없다고 알려 드립니다.
생성형 AI가 아니라 이 페이지 본문을 찾아 그대로 보여 주는 방식입니다. 외부로 나가는 요청이 없습니다.
EIS · SECURITY
EIS
생성 수정
정보보안기사의 시스템·네트워크·애플리케이션 보안과 암호·관리·실기 내용을 개념의 경계와 실습으로 연결합니다.
29개 문서 · 3 · 어플리케이션보안 · 13 / 29
12 · FTP · 메일 보안
지도 위치 : 3과목 어플리케이션 보안 · README 4장 ③ 영역(어플리케이션) — 인터넷 응용 서비스의 공격 ↔ 대응 | 출제기준: 1. 인터넷 응용 보안 > 1. FTP 보안, 2. 메일 보안 | 이전: 11 네트워크 보안 솔루션과 분석 | 다음: 13 웹 · 앱 보안 출제 빈도 : ⭐⭐⭐ (회당 약 5.1문항 — 출제분석.md. FTP 1.9
2.1, 메일 2.83.5) · 변화 – 세세항목 : FTP 보안 — FTP 개념 / FTP 서비스 운영 / FTP 공격 유형 / FTP 보안기술 · 메일 보안 — 메일 개념 / 메일 서비스 운영 / 메일 서비스 공격유형(스팸 메일, 악성 메일, 웜 등)과 대책 / 메일 보안 기술
이 노트를 다 읽으면
- FTP의 액티브 · 패시브 모드 에서 누가 누구에게 어느 포트로 연결하는지 그림으로 그릴 수 있다.
- FTP 바운스 · TFTP · 익명 FTP 의 위험과 대책을 말하고,
ftpusers·xferlog를 읽을 수 있다. - 메일이 MUA → MTA → MDA → (POP3/IMAP) → MUA 로 흘러가는 경로와 각 단계의 포트를 말할 수 있다.
- 오픈 릴레이 가 왜 위험한지, sendmail
access파일의 OK · RELAY · REJECT · DISCARD를 구별할 수 있다. - 스팸 대응 기술 SpamAssassin · RBL · SPF · DKIM · DMARC 를 "무엇을 근거로 판단하는가"로 가를 수 있다.
- PGP · S/MIME · PEM 을 신뢰 모델(CA를 쓰는가)과 제공 기능으로 비교하고, PGP가 수신 부인방지 를 제공하지 않는 이유를 말할 수 있다.
0. 이 노트의 판별 축
| # | 축 | 왼쪽 (0) | 오른쪽 (1) | 이 축으로 갈리는 것 | 큰 축 (README 5장) |
|---|---|---|---|---|---|
| 1 | 데이터 연결을 누가 여는가 | 서버가 연다 (액티브) | 클라이언트가 연다 (패시브) | FTP Active ↔ Passive | 이 노트의 축 |
| 2 | 보내는 쪽인가 받는 쪽인가 | 송신 · 중계 (SMTP) | 수신 · 열람 (POP3 · IMAP) | 메일 프로토콜 구분 | ⑧ 하위 ↔ 상위 계층 (모두 L7 안에서의 역할 구분) |
| 3 | 무엇을 근거로 스팸을 거르나 | 보낸 곳(IP · 도메인)을 본다 | 내용(헤더 · 본문)을 본다 | RBL · SPF ↔ SpamAssassin · 본문 필터 | ⑦ 오용 ↔ 이상 탐지의 응용 |
| 4 | 키를 누가 보증하나 | 사용자끼리 서로 보증 (신뢰의 웹) | 인증기관(CA)이 보증 | PGP ↔ S/MIME · PEM | ⑤ 대칭 ↔ 비대칭 (공개키 신뢰 모델) |
| 5 | 공격인가 방어인가 | FTP 바운스 · 오픈 릴레이 악용 · 메일 폭탄 | ftpusers · access 파일 · SPF · PGP | 공격기법 ↔ 대응기술 | ① 공격 ↔ 방어 |
이 노트가 답하는 질문은 "오래된 인터넷 서비스(FTP · 메일)는 왜 기본 상태로 위험하고, 무엇을 덧대어 지키는가" 입니다. 두 서비스 모두 인터넷 초기에 인증 · 암호화 없이 설계됐습니다. 그래서 보안은 늘 "덧대는" 방식(설정 파일로 막기, 위에 암호를 씌우기)입니다. 앞에서 배운 포트 번호와 TCP 연결(06번 노트), 방화벽(11번 노트)을 알아야 액티브 · 패시브 문제가 풀리고, 앞에서 배운 전자서명과 공개키(18 · 19번 노트)를 알아야 PGP · S/MIME이 풀립니다.
1. FTP의 구조 — 연결이 두 개다
1.1 정의와 포트
FTP (File Transfer Protocol) — [파일 전송 프로토콜]인데, [ 명령을 주고받는 제어 연결과 파일을 실어 나르는 데이터 연결을 따로 연다 ]는 점에서 연결 하나로 끝나는 TFTP · SFTP와 구별된다.
| 연결 | 서버 포트 | 하는 일 | 살아 있는 기간 |
|---|---|---|---|
| 제어 연결 | TCP 21 | USER, PASS, PORT, PASV, RETR 같은 명령 | 세션 내내 |
| 데이터 연결 | TCP 20 (액티브) / 1024 이상 임의 포트 (패시브) | 파일 내용, 디렉터리 목록 | 전송 한 번마다 열고 닫음 |
1.2 ⭐ 액티브 ↔ 패시브
| 액티브 (Active, 기본 모드) | 패시브 (Passive) | |
|---|---|---|
| 제어 연결 | 클라이언트(임의 포트 N) → 서버 21 | 같음 |
| 클라이언트가 보내는 명령 | PORT — "내 N+1 포트로 접속해" | PASV — "데이터 포트 하나 열어 줘" |
| 데이터 연결 방향 | 서버 20 → 클라이언트 N+1 (서버가 연다) | 클라이언트 N+1 → 서버의 임의 포트 P (클라이언트가 연다) |
| 서버 응답 | 200 PORT command successful | 227 Entering Passive Mode (h1,h2,h3,h4,p1,p2) |
| 곤란한 쪽 | 클라이언트 쪽 방화벽 · NAT — 밖에서 안으로 들어오는 연결이라 막힘 | 서버 쪽 방화벽 — 1024 이상 포트를 열어 둬야 함 |
| 모드를 정하는 쪽 | 클라이언트 | 클라이언트 |
💡 포트 계산: PORT 192,168,0,10,7,138 또는 227 (...,7,138)의 데이터 포트는 p1 × 256 + p2 = 7 × 256 + 138 = 1930 입니다.
📝 기출 포인트 — "FTP의 기본 모드는 액티브이며 모드를 바꾸는 주체는 클라이언트 "가 7회 이상 반복된 단골 문항입니다. "패시브를 쓰는 이유 = 클라이언트가 방화벽 뒤에 있어 서버가 안으로 접속할 수 없기 때문 ", "액티브의 데이터 포트는 서버 20번", PORT 인자로 포트 번호를 계산하는 유형도 나왔습니다.
⚠️ 반례: "패시브 모드에서는 서버 20번 포트를 쓴다" ❌. 20번은 액티브 모드의 서버 데이터 포트 입니다. 패시브는 서버가 고른 임의 포트입니다. 그래서 vsftpd에서는 pasv_min_port · pasv_max_port로 그 범위를 좁혀 방화벽 구멍을 줄입니다.
💡 비유는 마지막에 — 액티브는 "내가 전화번호를 줄 테니 네가 걸어 줘 ", 패시브는 " 네 번호를 알려 줘, 내가 걸게 "입니다. 수신 전화를 막아 둔 사람(방화벽 뒤 클라이언트)은 패시브를 씁니다.
1.3 FTP 명령과 응답
| 명령 | 기능 | 헷갈리는 짝 |
|---|---|---|
USER / PASS | 계정 · 비밀번호 전송 ( 평문 ) | — |
RETR | 서버 → 클라이언트 다운로드 | STOR (업로드) |
STOR | 클라이언트 → 서버 업로드 | APPE (이어 붙이기) |
LIST / NLST | 디렉터리 목록 | — |
ABOR | 진행 중인 전송 중단 | QUIT (세션 종료) |
📝 기출 포인트 — "FTP 명령의 기능 중 틀린 것" 유형. ABOR를 "로그아웃", STOR를 "다운로드"처럼 바꿔 놓은 보기를 찾습니다.
1.4 FTP의 형제들 — TFTP · SFTP · FTPS
| 프로토콜 | 전송 계층 · 포트 | 인증 | 암호화 | 정체 |
|---|---|---|---|---|
| FTP | TCP 21 / 20 | 계정 · 비밀번호 (평문) | 없음 | 원조 |
| TFTP | UDP 69 | 없음 | 없음 | 목록 보기 · 인증 없이 파일 받기/보내기만. 네트워크 장비 설정 백업 · 디스크 없는 장비 부팅용 |
| SFTP | TCP 22 | SSH 인증 | 있음 | SSH의 하위 기능 (FTP가 아님) |
| FTPS | TCP 21 (명시적 AUTH TLS) / 990 (암묵적) | FTP와 같음 | TLS | FTP에 TLS를 씌운 것 |
TFTP — [파일 전송 프로토콜]인데, [ UDP를 쓰고 사용자 인증이 없다 ]는 점에서 TCP와 계정 인증을 쓰는 FTP와 구별된다.
📝 기출 포인트 — TFTP는 5회 이상: " UDP 69 · 인증 없음 · 디렉터리 목록 불가 ". 보안 대책으로 " 불필요하면 비활성화 , 필요하면 secure 모드(
-s, 지정 디렉터리로 제한)". "FTP 대신 TFTP를 쓰는 것이 안전하다"는 보기는 ❌입니다.
2. FTP 공격과 운영 보안
2.1 ⭐ FTP 바운스 (FTP Bounce)
FTP 바운스 공격 — [FTP 프로토콜 악용 공격]인데, [ PORT 명령에 클라이언트 자신이 아닌 제3 호스트의 IP · 포트를 넣어 FTP 서버가 대신 접속하게 만든다 ]는 점에서 FTP 계정 비밀번호를 대입하는 무차별 대입 공격과 구별된다.
공격자 ──(제어 21)──> FTP 서버 : PORT 10,0,0,5,0,25 ← 내 주소가 아니라 내부 메일서버:25
FTP 서버 ──(데이터)──> 10.0.0.5:25 ← 서버가 "대신" 접속
🔍 읽는 포인트 : PORT 인자의 IP가 제어 연결을 맺은 클라이언트 IP와 다르다 는 점이 공격의 핵심입니다. RFC 959는 이 값을 검증하라고 요구하지 않았습니다.
| 목적 | 방법 |
|---|---|
| 포트 스캔 (가장 많이 출제) | 접속 성공/실패 응답으로 제3 호스트의 열린 포트 확인. 출발지가 FTP 서버라 공격자가 숨고, 방화벽 안쪽도 스캔 가능 (nmap -b) |
| 가짜 메일 · 우회 전송 | 익명 FTP에 SMTP 명령이 담긴 파일을 올린 뒤, 그 파일을 메일 서버 25번으로 "전송"시킴 |
대책 : PORT 인자의 IP가 클라이언트 IP와 같은지 검사, 1024 미만 포트로의 PORT 거부 , 익명 FTP의 쓰기(업로드) 금지, 가능하면 패시브만 허용.
📝 기출 포인트 — FTP 바운스는 9회 이상 출제된 A1.1 최다 개념입니다. "주된 목적 = 포트 스캔 ", " PORT 명령 을 악용", " 목적지(PORT 인자) 미검증 "이 정답 핵심어입니다. 앞에서 배운 스캐닝(09번 노트)과 연결됩니다.
2.2 익명 FTP (Anonymous FTP)
anonymous 또는 ftp 계정으로 비밀번호 없이(관례상 이메일 주소) 접속하게 하는 공개 자료실 방식입니다.
| 위험 | 대책 |
|---|---|
| 업로드 가능 → 불법 자료 창고(warez), 바운스 공격의 발판 | 쓰기 권한 제거 . 업로드가 꼭 필요하면 "쓰기만 되고 목록 · 읽기는 안 되는" 별도 디렉터리 |
익명 홈(~ftp)이 시스템 파일과 연결 | 익명 홈은 root 소유 , 일반 쓰기 금지, chroot로 그 밖을 못 보게 |
~ftp/etc/passwd에 실제 비밀번호 | 비밀번호 필드 없는 더미 파일만 둠 |
# /etc/vsftpd/vsftpd.conf (배포판에 따라 /etc/vsftpd.conf)
anonymous_enable=NO # 익명 접속 금지
anon_upload_enable=NO # (익명 허용 시) 익명 업로드 금지
chroot_local_user=YES # 로컬 사용자를 홈 디렉터리에 가둠
xferlog_enable=YES # 전송 로그 기록
🔍 읽는 포인트 : anonymous_enable=YES면 익명 FTP가 열려 있습니다. 점검표의 첫 줄입니다. 설정 파일은 /etc 아래에 있습니다.
📝 기출 포인트 — "익명 FTP 보안대책으로 틀린 것"에서 "익명 사용자에게 홈 디렉터리 쓰기 권한을 준다" 가 오답 보기. vsftpd
anonymous_enable의미, 설정 파일 위치를 묻는 문항이 최근(2024~2025)에도 나왔습니다.
2.3 ⭐ ftpusers — 이름과 반대로 "거부 목록"
ftpusers — [FTP 접근통제 파일]인데, [ 여기에 적힌 계정은 FTP 로그인이 거부된다 ]는 점에서 IP 주소로 허용/거부하는 TCP Wrapper(hosts.allow · hosts.deny)와 구별된다.
| 통제 수단 | 무엇을 기준으로 | 예 |
|---|---|---|
ftpusers (/etc/ftpusers, vsftpd는 /etc/vsftpd/ftpusers) | 계정 — 적힌 계정 거부 | root, bin, daemon 등 시스템 계정 |
vsftpd user_list | 계정 — userlist_deny=YES면 거부 목록, NO면 허용 목록 | 운영 정책에 따라 |
| TCP Wrapper | 접속 IP · 호스트 | vsftpd: 10.0.0.0/255.0.0.0 |
📝 기출 포인트 — "ftpusers에 등록된 사용자만 FTP를 쓸 수 있다" ❌. root 접속 차단은 ftpusers에 root를 적는 것 이며, 이것을 TCP Wrapper와 구분하는 문항이 2025년에 나왔습니다. 실기 점검 항목에서는 ftpusers 파일의 소유자 root, 권한 640 이하 도 함께 봅니다.
2.4 xferlog — FTP 전송 로그
Mon Oct 19 10:20:31 2026 3 192.168.0.10 52314 /home/kim/report.pdf b _ i r kim ftp 0 * c
| 필드 (순서대로) | 이 예의 값 | 뜻 |
|---|---|---|
| current-time | Mon Oct 19 10:20:31 2026 | 전송 시각 |
| transfer-time | 3 | 전송에 걸린 초 |
| remote-host | 192.168.0.10 | 상대 호스트 |
| file-size | 52314 | 바이트 |
| filename | /home/kim/report.pdf | 파일 경로 |
| transfer-type | b | a = ASCII, b = 바이너리 |
| special-action-flag | _ | C 압축, U 압축 해제, T tar, _ 없음 |
| direction | i | o = outgoing(서버 → 클라이언트, 다운로드), i = incoming(업로드), d = 삭제 |
| access-mode | r | a = anonymous, g = guest, r = real(실제 계정) |
| username | kim | 사용자 |
| service-name | ftp | 서비스 |
| authentication-method | 0 | 0 = 없음, 1 = RFC 931 |
| authenticated-user-id | * | 확인 불가면 * |
| completion-status | c | c = complete, i = incomplete |
🔍 읽는 포인트 : 시험은 거의 direction(o/i), access-mode(a/g/r), completion-status(c/i) 만 묻습니다. "o = 서버 입장에서 나감 = 다운로드"를 서버 기준으로 기억하세요.
📝 기출 포인트 — xferlog 필드 해석은 4회. "
i는 다운로드" ❌(업로드), "a는 ASCII 전송" — 같은a가 transfer-type에서는 ASCII, access-mode에서는 anonymous 라는 위치 함정에 주의.
앞으로 다시 만납니다 — 25번 노트(실기 취약점 점검)에서 FTP 점검 항목(익명 FTP, ftpusers, TFTP 비활성화)을 점검표로 다시 묶습니다.
3. 메일 시스템의 구조
3.1 구성요소 — 누가 무엇을 하나
| 구성요소 | 정의 (유 + 종차) | 예 |
|---|---|---|
| MUA (Mail User Agent) | [메일 프로그램]인데, [ 사용자가 메일을 쓰고 읽는 화면 ]이라는 점에서 서버 사이를 옮기는 MTA와 구별 | Outlook, Thunderbird |
| MTA (Mail Transfer Agent) | [메일 서버 프로그램]인데, [ SMTP로 메일을 다음 서버로 중계 · 전달 ]한다는 점에서 최종 메일함에 넣는 MDA와 구별 | sendmail, Postfix, Exchange |
| MDA (Mail Delivery Agent) | [메일 서버 구성요소]인데, [ 받은 메일을 수신자 메일함에 넣는다 ](필터링 포함)는 점에서 중계하는 MTA와 구별 | procmail |
| MRA (Mail Retrieval Agent) | [수신 도구]인데, [ POP3 · IMAP으로 메일함에서 메일을 가져온다 ] | fetchmail |
[보내는 사람 MUA] ─SMTP─> [보내는 쪽 MTA] ─SMTP─> [받는 쪽 MTA] ─> [MDA] ─> 메일함
│
[받는 사람 MUA] <────────────── POP3 / IMAP ─────────────────────────────┘
🔍 읽는 포인트 : 보내는 길은 전부 SMTP , 가져오는 길만 POP3 · IMAP 입니다.
3.2 ⭐ 메일 프로토콜과 포트
| 프로토콜 | 역할 | 평문 포트 | 암호화 포트 | 특징 |
|---|---|---|---|---|
| SMTP | 송신 · 서버 간 중계 | 25 (제출용 587) | 465 (SMTPS) | 원래 송신자 인증 없음 → SMTP AUTH 추가 |
| POP3 | 수신 | 110 | 995 | 메일을 내려받고 서버에서 지우는 것이 기본 |
| IMAP | 수신 | 143 | 993 | 메일을 서버에 두고 동기화 (여러 기기) |
3.3 SMTP 대화 순서
S: 220 mail.example.com ESMTP
C: EHLO client.example.org ← 인사 (HELO의 확장판)
C: AUTH LOGIN ← (인증 사용 시) 송신자 인증
C: MAIL FROM:<kim@example.org> ← 봉투의 보낸 사람
C: RCPT TO:<lee@example.com> ← 봉투의 받는 사람
C: DATA ← 본문 시작
S: 354 End data with <CR><LF>.<CR><LF>
C: (헤더 + 본문) ... .
S: 250 OK
C: QUIT
🔍 읽는 포인트 : 순서 HELO/EHLO → (AUTH) → MAIL FROM → RCPT TO → DATA → QUIT . 354는 "본문을 보내라"는 응답입니다. VRFY · EXPN(계정 존재 확인)은 계정 수집에 악용되므로 끕니다.
📝 기출 포인트 — MUA · MTA · MDA 역할 구분(6회 이상), 메일 포트 · 프로토콜 구분, SMTP 명령 순서 (2023 패킷 분석, 2024)가 반복. "메일 관련 프로토콜이 아닌 것 = SNMP (네트워크 관리, UDP 161) / IRC (채팅)"도 2회 이상.
4. 메일 서비스 운영과 공격 · 대응
4.1 ⭐ 오픈 릴레이와 sendmail access
오픈 릴레이 (Open Relay) — [메일 서버의 잘못된 설정]인데, [ 자기 도메인과 무관한 누구의 메일이든 다른 곳으로 중계해 준다 ]는 점에서 자기 사용자 메일만 중계하는 정상 MTA와 구별된다. 스패머가 출처를 숨기는 발판이 되고, 그 서버 IP가 RBL에 올라 정상 메일까지 차단됩니다.
# /etc/mail/access
localhost RELAY
192.168.1 RELAY # 내부망만 릴레이 허용
spammer.example REJECT # 거부 + 보낸 쪽에 오류 응답
bulk@ads.example DISCARD # 조용히 버림 (보낸 쪽은 모름)
10.9.9.9 ERROR:"550 Access denied"
partner.example OK # 다른 규칙이 거부해도 수신 허용
# 수정 후 DB로 변환해야 반영됨
makemap hash /etc/mail/access.db < /etc/mail/access
🔍 읽는 포인트 : REJECT ↔ DISCARD 의 차이는 "보낸 쪽에 거부를 알리는가 "입니다. 텍스트 파일만 고치고 makemap을 안 하면 반영되지 않습니다.
| 지시어 | 동작 |
|---|---|
| OK | 수신 허용 (다른 거부 규칙보다 우선) |
| RELAY | 중계 허용 (이 호스트 · 도메인을 위해 다른 곳으로 전달) |
| REJECT | 거부, 송신 측에 오류 메시지 반환 |
| DISCARD | 받은 척하고 버림 , 송신 측에 알리지 않음 |
| ERROR:"코드 메시지" | 지정한 오류 코드 · 메시지로 거부 |
그 밖의 sendmail 하드닝: sendmail.cf의 PrivacyOptions에 novrfy,noexpn(계정 확인 차단), restrictqrun(일반 사용자의 메일 큐 처리 제한), 인사말의 버전 정보 숨김, 최신 버전 유지.
📝 기출 포인트 — sendmail access는 3회 이상(2013, 2024, 2025). REJECT · DISCARD · RELAY 의미 와 makemap 명령 을 함께 묻습니다. 실기 수행준거에 "스팸메일 릴레이가 허용되어 있는지 점검"이 그대로 있습니다.
4.2 메일 공격 유형
| 공격 | 정의 | 대응 |
|---|---|---|
| 메일 폭탄 (Mail Bomb) | 대량 메일로 메일함 · 서버 디스크를 채워 서비스를 마비시키는 가용성 공격 | 크기 · 수량 제한, 송신자 차단 |
| 스팸 메일 | 원치 않는 대량 광고 메일 | 4.3절 필터 · 발신자 검증 |
| Active Contents 공격 | HTML 메일의 스크립트 · 액티브X 등이 메일을 여는 순간 실행 되도록 한 공격 | 메일 클라이언트의 스크립트 실행 차단, 텍스트로 보기 |
| 악성 첨부 · 웜 | 실행 파일 · 매크로 문서 첨부, 주소록으로 자기 전파 | 첨부 검사(Inflex 같은 첨부파일 필터, 백신), 확장자 차단 |
| 피싱 · 발신자 위조 | 보낸 사람(From)을 은행 · 회사로 위조 | SPF · DKIM · DMARC (4.4절) |
💡 메일 헤더의 Received: 줄은 서버를 하나 지날 때마다 위에 추가 됩니다. 실제 발송 경로를 추적하려면 맨 아래 Received부터 위로 읽습니다. From은 쉽게 위조되지만 Received의 IP는 각 서버가 기록합니다.
4.3 ⭐ 스팸 대응 — 무엇을 근거로 거르나
| 기술 | 판단 근거 | 동작 | 0절 축 3 |
|---|---|---|---|
| RBL (Real-time Blackhole List, DNSBL) | 보낸 서버의 IP | 스팸 발송 IP 목록을 DNS 질의 로 조회해 차단 | 보낸 곳 |
| SPF | 보낸 서버 IP가 그 도메인이 허락한 IP인가 | 도메인 소유자가 DNS TXT에 발송 서버 목록 등록 → 수신 서버가 대조 | 보낸 곳 |
| SpamAssassin | 헤더 · 본문의 여러 규칙 점수 합 | 규칙별 점수를 더해 기준점(기본 5.0) 이상이면 스팸 표시. 베이지안 학습 · RBL 조회도 규칙의 하나로 포함 | 내용 (+ 보낸 곳) |
| 본문 · 키워드 필터 | 제목 · 본문 단어 | 단순 매칭 | 내용 |
SpamAssassin — [스팸 필터]인데, [ 하나의 규칙으로 판정하지 않고 여러 검사(헤더 · 본문 · 베이지안 · 블랙리스트)의 점수를 합산한다 ]는 점에서 IP 목록 하나로 차단하는 RBL과 구별된다. Perl로 만든 오픈소스입니다.
📝 기출 포인트 — SpamAssassin은 6회. " 점수(Score) 기반으로 스팸을 분류 한다"가 핵심. 최근에는 SPF · RBL · SpamAssassin의 동작을 서로 바꿔 놓은 보기 (2024 · 2025 3회)가 늘었습니다. "DNS에 등록된 발신 서버 로 확인 = SPF", " 블랙리스트 IP 조회 = RBL"로 가르세요.
4.4 발신자 인증 3종 — SPF · DKIM · DMARC
example.com. IN TXT "v=spf1 ip4:203.0.113.10 mx -all"
sel1._domainkey.example.com. IN TXT "v=DKIM1; k=rsa; p=MIIBIjANBg..."
_dmarc.example.com. IN TXT "v=DMARC1; p=reject; rua=mailto:dmarc@example.com"
🔍 읽는 포인트 : 셋 다 DNS TXT 레코드 에 공개합니다. SPF의 -all은 "목록 밖 IP는 실패", DKIM의 p=는 공개키 , DMARC의 p=는 정책 (none · quarantine · reject)입니다.
| SPF | DKIM | DMARC | |
|---|---|---|---|
| 무엇을 확인 | 보낸 서버 IP 가 허가된 것인가 | 메일이 서명 후 바뀌지 않았고 그 도메인이 서명했는가 | SPF/DKIM 결과가 From 도메인과 맞는지(정렬) + 실패 시 처리 |
| 수단 | IP 목록 | 전자서명 (송신 서버 개인키로 서명, DNS의 공개키로 검증) | 정책 선언 + 보고서(rua) |
| 지키는 것 | 발신 서버 위조 방지 | 무결성 + 도메인 인증 | 둘을 묶는 정책 · 가시성 |
⚠️ 반례: DKIM은 전자서명을 쓰지만 PGP · S/MIME처럼 사용자 개인이 서명하는 것이 아닙니다. 도메인(메일 서버)이 서명하며, 본문을 암호화하지도 않습니다.
📝 기출 포인트 — SPF 정의가 2022년 이후 반복. 최근 후기에 실기에서 SPF · DKIM · DMARC 구분이 나왔다는 언급이 있습니다. "DNS 기반 · IP 대조 = SPF", "서명 = DKIM", "정책 · 보고 = DMARC".
5. 메일 보안 기술 — PGP · S/MIME · PEM
5.1 ⭐ PGP — 이 노트의 최다 출제 개념
PGP (Pretty Good Privacy) — [전자우편 보안 프로그램]인데, [ 인증기관 없이 사용자들이 서로의 공개키를 보증하는 신뢰의 웹(Web of Trust)을 쓴다 ]는 점에서 X.509 인증서와 CA에 기대는 S/MIME · PEM과 구별된다. 1991년 필 짐머만(Phil Zimmermann) 이 만들었고, 표준화된 형태가 OpenPGP (RFC 4880)입니다.
송신 처리 순서 — 앞에서 배운 전자서명(18번 노트)과 하이브리드 암호(19번 노트)를 그대로 조립한 것입니다.
① 서명 : 메시지 해시 → 송신자 개인키로 서명 (인증 · 무결성 · 송신 부인방지)
② 압축 : 서명 + 메시지를 ZIP 압축 (서명 "후" 압축)
③ 암호화 : 일회용 세션키 생성 → 대칭키로 암호화 (기밀성)
④ 키 포장: 세션키를 수신자 공개키로 암호화 (키 전달)
⑤ 변환 : Radix-64로 ASCII 변환 (메일 호환성) (+ 긴 메시지는 분할)
🔍 읽는 포인트 : 서명 → 압축 → 암호화 → Radix-64 . 세션키는 메시지마다 새로 만들고, 수신자 공개키 로 감쌉니다.
| 기능 | 쓰는 알고리즘 (판본에 따라) |
|---|---|
| 서명 | RSA, DSS(DSA) / 해시 MD5(초기) · SHA-1 · SHA-2 |
| 메시지 암호화 (대칭) | IDEA(초기), CAST-128, 3DES, 이후 AES |
| 세션키 암호화 (공개키) | RSA, ElGamal |
| 압축 / 호환성 | ZIP / Radix-64 |
| PGP가 제공 ⭕ | PGP가 제공하지 않음 ❌ |
|---|---|
| 기밀성, 메시지 무결성, 송신자 인증, 송신 부인방지 , 압축, 호환성, 분할 | 수신 부인방지 (받았다는 증거), 가용성, 접근통제, 재전송 방지 |
왜 수신 부인방지가 없나 — 송신 부인방지는 송신자가 자기 개인키로 서명 했으니 "안 보냈다"고 못 하는 것입니다. 반대로 "받았다"를 증명하려면 수신자가 수신 확인에 서명해 돌려보내는 절차가 있어야 하는데, PGP는 메일을 한 방향으로 보내는 도구라 그 절차가 없습니다.
📝 기출 포인트 — PGP는 A1.2 최다(14회). "PGP가 제공하지 않는 기능 = 수신 부인방지" 가 2018 · 2024 · 2025에 반복됐고, 세션키를 암호화하는 알고리즘(RSA) , 처리 순서(서명 → 압축 → 암호화) , 신뢰 모델(CA 미사용) , 개발자(짐머만)도 나왔습니다.
5.2 S/MIME과 PEM
S/MIME — [전자우편 보안 표준]인데, [ MIME 형식에 X.509 v3 인증서 기반 서명 · 암호화를 더했다 ]는 점에서 신뢰의 웹을 쓰는 PGP와 구별된다. RSA Data Security사 가 개발했고 이후 IETF 표준(CMS 기반)이 되었습니다. 기능은 암호화(Enveloped data), 서명(Signed data), 서명만 보이게(Clear-signed data), 서명 + 암호화입니다.
PEM (Privacy Enhanced Mail) — [전자우편 보안 표준]인데, [ IETF가 만들고 계층적 CA로 키를 중앙집중 관리한다 ]는 점에서 분산형인 PGP와 구별된다. 구현이 복잡해 널리 쓰이지 못했습니다(오늘날 "PEM 형식"은 인증서 파일 인코딩 이름으로 남았습니다).
| PGP | S/MIME | PEM | |
|---|---|---|---|
| 만든 곳 | 필 짐머만 (개인) | RSA Data Security → IETF | IETF |
| 키 신뢰 모델 | 신뢰의 웹 (CA 없음, 분산) | X.509 v3 인증서 + CA | 계층형 CA (중앙집중) |
| 보급 | 개인 사용자 | 기업 · 메일 클라이언트 내장 | 거의 안 쓰임 |
| 구현 난이도 | 쉬움 | 중간 | 어려움 |
⚠️ 반례: SSL/TLS · IPsec은 이메일 보안 표준이 아닙니다. SMTP 구간을 TLS로 감쌀 수는 있지만(STARTTLS), 이는 서버 사이 구간 보호 이고 메시지 자체에 서명 · 암호화를 남기는 PGP · S/MIME과 다릅니다. "보안 전자우편이 아닌 것"의 정답 보기로 반복됐습니다.
📝 기출 포인트 — S/MIME 10회: " RSA사 개발 , X.509 v3 인증서 "가 정답 핵심어. PEM 5회: " IETF , 중앙집중식 키 관리 , 구현 어려움". 세 기술 중 "아닌 것"으로 SSL · IPsec이 섞여 나옵니다.
💡 비유는 마지막에 — PGP는 친구 소개로 쌓은 신뢰 , S/MIME · PEM은 관공서가 발급한 신분증 입니다.
6. 실기 연결
관련 수행준거 : 1-3 서비스별 보안특성 파악(FTP · 메일 동작절차와 환경 설정), 2-2 서비스 보안설정 점검(FTP 서버 접근 권한, 메일 서버 스팸 릴레이 허용 여부, SMTP · POP · IMAP 보안 설정 ), 3-1 서비스별 로그 모니터링(FTP · 메일).
필답형 서술 답안에 들어가야 할 핵심어
| 예상 질문 | 답안 핵심어 |
|---|---|
| FTP 액티브와 패시브 모드의 차이 | 제어 21, 액티브 = 서버 20 → 클라이언트 (PORT), 패시브 = 클라이언트 → 서버 임의 포트 (PASV, 227), 클라이언트 방화벽 |
| FTP 바운스 공격 원리와 대책 | PORT 명령에 제3 호스트 지정 , 포트 스캔 · 우회, PORT IP 검증, 1024 미만 포트 거부, 익명 쓰기 금지 |
| 오픈 릴레이 점검과 조치 | 외부 → 외부 중계 허용 여부 확인, access 파일에 내부망만 RELAY , makemap |
| PGP의 동작 순서 | 해시 · 서명 → 압축 → 세션키 대칭 암호화 → 세션키를 수신자 공개키 로 암호화 → Radix-64 |
점검표 예시 (Unix 서버)
| 점검 항목 | 확인 방법 | 양호 기준 |
|---|---|---|
| 익명 FTP | grep anonymous_enable /etc/vsftpd/vsftpd.conf | NO |
| root FTP 접속 | cat /etc/vsftpd/ftpusers | root가 적혀 있음 (거부) |
| ftpusers 파일 권한 | ls -l /etc/vsftpd/ftpusers | 소유자 root, 640 이하 |
| TFTP | 서비스 · 포트 확인 (ss -ulnp | grep :69) | 미사용 시 중지 |
| 스팸 릴레이 | /etc/mail/access, sendmail.cf 릴레이 규칙 | 내부 대역만 RELAY |
| SMTP 계정 확인 | PrivacyOptions | novrfy,noexpn 포함 |
7. 확인 문제
1. FTP 패시브 모드에 대한 설명으로 옳은 것은? ① 서버가 20번 포트에서 클라이언트로 데이터 연결을 연다 ② 클라이언트가 PASV 명령을 보내고, 서버가 알려 준 포트로 클라이언트가 데이터 연결을 연다 ③ 모드 변경은 서버 관리자만 할 수 있다 ④ 클라이언트가 방화벽 뒤에 있으면 사용할 수 없다
2. xferlog의 한 줄이 ... 2048 /pub/a.zip b _ o a ftp ftp 0 * c 일 때 옳은 해석은?
① 실제 계정 사용자의 업로드가 완료됐다 ② 익명 사용자의 다운로드가 완료됐다
③ ASCII 모드로 익명 업로드가 중단됐다 ④ 게스트 사용자의 다운로드가 중단됐다
3. sendmail access 파일에서 "메일을 받지 않되 보낸 쪽에는 아무것도 알리지 않는" 지시어는? ① OK ② RELAY ③ REJECT ④ DISCARD
4. 스팸 대응 기술의 설명으로 틀린 것은? ① RBL은 스팸 발송 IP 목록을 DNS 질의로 조회한다 ② SPF는 도메인이 DNS에 등록한 발송 서버 IP와 실제 발송 IP를 대조한다 ③ SpamAssassin은 여러 규칙의 점수를 합산해 스팸 여부를 판단한다 ④ DKIM은 수신자의 공개키로 메일 본문을 암호화해 기밀성을 보장한다
5. PGP가 제공하지 않는 보안 서비스는? ① 메시지 기밀성 ② 송신자 인증 ③ 수신 부인방지 ④ 메시지 무결성
6. 보안 전자우편 기술의 비교로 옳은 것은? ① PGP는 X.509 인증서와 계층형 CA를 필수로 쓴다 ② S/MIME은 RSA Data Security사가 개발했고 X.509 v3 인증서를 쓴다 ③ PEM은 분산형 신뢰의 웹을 쓴다 ④ IPsec은 대표적인 보안 전자우편 표준이다
정답과 해설
| # | 정답 | 해설 (판별 축) |
|---|---|---|
| 1 | ② | 축 1(누가 데이터 연결을 여는가): 패시브는 클라이언트가 연다 . ①은 액티브, ③ 모드는 클라이언트가 정함, ④ 오히려 방화벽 뒤 클라이언트 때문에 쓰는 모드 |
| 2 | ② | direction o = 서버에서 나감(다운로드), access-mode a = anonymous, 마지막 c = complete. b는 바이너리 |
| 3 | ④ | REJECT ↔ DISCARD는 " 알리는가 "로 갈림. OK는 허용, RELAY는 중계 허용 |
| 4 | ④ | DKIM은 송신 도메인의 개인키로 서명 (무결성 · 도메인 인증)하며 본문을 암호화하지 않음. 기밀성은 PGP · S/MIME의 영역 |
| 5 | ③ | 송신자 서명은 있으나 수신 확인 서명 절차가 없음 . ①②④는 서명 · 암호화로 제공 |
| 6 | ② | 축 4(키를 누가 보증하나): PGP = 신뢰의 웹, S/MIME · PEM = CA. ③은 반대, ④ IPsec은 네트워크 계층 보안(10번 노트) |
부록 A. 스스로 확인하기
| # | 질문 | 답이 있는 곳 |
|---|---|---|
| 1 | FTP 기본 모드, 모드를 바꾸는 주체, 패시브를 쓰는 이유는? 227 (...,4,1)의 포트는? | 1.2 |
| 2 | TFTP · SFTP · FTPS를 전송 계층 · 인증 · 암호화로 구분하면? | 1.4 |
| 3 | FTP 바운스 공격의 주 목적과 대책 세 가지는? | 2.1 |
| 4 | ftpusers와 TCP Wrapper는 무엇을 기준으로 통제하나? | 2.3 |
| 5 | xferlog의 direction · access-mode · completion-status 값은? | 2.4 |
| 6 | MUA · MTA · MDA의 역할, SMTP · POP3 · IMAP 포트, SMTP 명령 순서는? | 3.1~3.3 |
| 7 | access 파일의 REJECT와 DISCARD의 차이, 반영 명령은? | 4.1 |
| 8 | RBL · SPF · SpamAssassin · DKIM · DMARC는 각각 무엇을 근거로 판단하나? | 4.3, 4.4 |
| 9 | PGP의 처리 순서와 수신 부인방지가 없는 이유는? | 5.1 |
| 10 | PGP · S/MIME · PEM의 키 신뢰 모델과 개발 주체는? | 5.2 |
부록 B. 자주 하는 실수 · 함정
| 실수 | 바로잡기 |
|---|---|
| "패시브 모드도 서버 20번 포트를 쓴다" | ❌ 20번은 액티브 의 서버 데이터 포트. 패시브는 서버가 고른 1024 이상 포트 |
| "FTP 모드는 서버가 정한다" | ❌ 클라이언트 가 PORT/PASV로 정함 |
| "SFTP = FTP + SSL" | ❌ SFTP는 SSH 기반 . FTP + TLS는 FTPS |
| "ftpusers = FTP 허용 사용자 목록" | ❌ 거부 목록 . root를 적어 root 접속 차단 |
"xferlog의 a는 항상 ASCII" | ⚠️ transfer-type 위치에서는 ASCII, access-mode 위치에서는 anonymous |
| "SPF는 메일 본문을 검사한다" | ❌ 발송 서버 IP 만 대조 |
| "DKIM은 메일을 암호화한다" | ❌ 서명 (무결성 · 도메인 인증)만. 기밀성 없음 |
| "PGP는 수신 부인방지까지 제공한다" | ❌ 송신 부인방지만 |
| "PGP는 암호화 후 압축한다" | ❌ 서명 → 압축 → 암호화 (암호문은 압축이 잘 안 됨) |
부록 C. AI · NotebookLM 복습 프롬프트
이 12번 노트(FTP · 메일 보안)만 근거로 4지선다 6문제를 내줘. 노트 밖 내용은 쓰지 마.
FTP 액티브/패시브, FTP 바운스, xferlog 해석, sendmail access, SPF/RBL/SpamAssassin 구분, PGP 기능은 반드시 포함해줘.
내가 답하면 채점하고, 틀린 보기가 0절의 어느 판별 축 반대편에 있는지 절 번호와 함께 설명해줘.
LangTailor