You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
391 lines
24 KiB
391 lines
24 KiB
|
2 months ago
|
# RADIUS·TACACS·메일·시스템 로그 실습 시연
|
||
|
|
|
||
|
|
이 문서는 2026-09-09 현재 PC의 기존 AAA 실습 환경과 장비 소스를 확인해서 작성했다. 전체 메뉴 안내는 `DEMO_RUNBOOK_20260909.md`를 참고한다.
|
||
|
|
|
||
|
|
## 1. 지금 준비된 것과 이번에 추가한 것
|
||
|
|
|
||
|
|
| 항목 | 주소 | 현재 확인 범위 |
|
||
|
|
|---|---|---|
|
||
|
|
| 장비 관리 UI | http://192.168.0.223/ | 관리 포트80 기준 |
|
||
|
|
| 기존 RADIUS 컨테이너 | 192.168.0.100:1645/UDP → 컨테이너1812 | Docker 실행 상태·포트 매핑 확인 |
|
||
|
|
| 기존 TACACS+ 컨테이너 | 192.168.0.100:49/TCP | Docker 실행 상태·포트 매핑 확인 |
|
||
|
|
| 새 Mailpit 수신 서버 | PC 1025/TCP, 수신함 http://127.0.0.1:8025/ | 구성 파일 추가, 이번 작업에서 실행·장비 수신 시험은 하지 않음 |
|
||
|
|
| 새 Syslog 수신 서버 | PC 1514/UDP 또는 TCP → 컨테이너514 | 구성 파일 추가, 이번 작업에서 실행·장비 수신 시험은 하지 않음 |
|
||
|
|
|
||
|
|
RADIUS와 TACACS는 이미 **별도 이미지·별도 컨테이너**다. 두 서버를 바꾸어 켤 필요 없이 함께 실행하고, 장비에서 인증 방식을 선택해 시연하면 된다. 메일·Syslog까지 총 네 컨테이너 구성이다.
|
||
|
|
|
||
|
|
**동시 실행과 동시 인증의 구분**
|
||
|
|
|
||
|
|
- 웹 로그인: `primary_method` 하나를 사용한다. RADIUS → TACACS 순서로 기본 방식을 바꿔서 시험한다. 한 번의 웹 로그인에서 두 서버를 모두 통과하는 구조가 아니다.
|
||
|
|
- Reverse SSH/Telnet: 포트의 동작 설정별로 RADIUS 또는 TACACS를 지정할 수 있다. 서로 다른 시험 포트/Listen Port로 나누면 나란히 시험할 수 있다.
|
||
|
|
- 장비 웹의 외부 인증은 Local fallback을 유지한다. 외부 인증 거부 뒤에도 같은 이름·암호의 로컬 계정이 있으면 로그인할 수 있다. 따라서 `labadmin`을 장비 로컬 사용자에 중복 등록하지 않는다.
|
||
|
|
- 포트 Reverse 외부 인증 경로는 실패 시 로컬 암호로 우회하지 않는다.
|
||
|
|
- 현재 구현은 인증 결과와 장비에 설정한 기본 역할을 사용한다. RADIUS 속성별 역할 매핑, TACACS 명령별 허가·Accounting, RADIUS Challenge/EAP/MFA 시연으로 확대해 설명하지 않는다.
|
||
|
|
- 시리얼로 연결한 상대 장비의 자체 로그인은 또 다른 인증이다. 통합콘솔의 Reverse 인증 성공 뒤 상대 장비가 아이디를 요구하는 것은 이중 오류가 아니라 별도 로그인일 수 있다.
|
||
|
|
|
||
|
|
## 2. PC 서버 준비: 복사해서 실행할 명령
|
||
|
|
|
||
|
|
### 2-1. 주소·컨테이너 확인
|
||
|
|
|
||
|
|
Docker Desktop을 Linux 컨테이너 모드로 실행하고 PowerShell을 연다.
|
||
|
|
|
||
|
|
```powershell
|
||
|
|
Set-Location C:\Users\temp\Desktop\tera_Clone_Demo
|
||
|
|
Get-NetIPAddress -AddressFamily IPv4
|
||
|
|
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
|
||
|
|
```
|
||
|
|
|
||
|
|
아래 예시는 PC LAN 주소가 `192.168.0.100`일 때다. 다른 주소면 모든 PC 서버 주소를 그 값으로 바꾼다. **장비의 서버 주소에 localhost, 127.0.0.1, Docker 내부 서비스 이름을 입력하면 안 된다.**
|
||
|
|
|
||
|
|
### 2-2. RADIUS·TACACS
|
||
|
|
|
||
|
|
현재 두 컨테이너가 정상 실행 중이면 시작 명령은 생략한다. 중지됐거나 새로 구성할 때:
|
||
|
|
|
||
|
|
```powershell
|
||
|
|
.\aaa-lab\start.ps1 -BindAddress 192.168.0.100
|
||
|
|
docker compose -f .\aaa-lab\docker-compose.yml ps
|
||
|
|
```
|
||
|
|
|
||
|
|
실행 파일은 각각 `aaa-lab/radius/Dockerfile`, `aaa-lab/tacacs/Dockerfile`, 묶음 구성은 `aaa-lab/docker-compose.yml`이다. 서버 계정은 각각 `radius/authorize`, `tacacs/tac_plus.conf`에 있다. 이 구성은 파일을 이미지에 복사하므로 계정을 바꿨다면 다시 빌드해야 반영된다.
|
||
|
|
|
||
|
|
기존 실습 전용 값:
|
||
|
|
|
||
|
|
| 입력 | 값 |
|
||
|
|
|---|---|
|
||
|
|
| 사용자 이름 | `labadmin` |
|
||
|
|
| 암호 | `LabAdminPassword-2026` |
|
||
|
|
| 서버 공유 Secret | `LabAaaSharedSecret-2026` |
|
||
|
|
|
||
|
|
이는 공개된 폐쇄망 실습 값이다. 실제 운영 자격증명이 아니다. Shared Secret은 사용자 암호와 다른 값이며, 장비와 서버가 동일하게 설정해야 한다.
|
||
|
|
|
||
|
|
### 2-3. 메일·Syslog 수신기
|
||
|
|
|
||
|
|
다음 명령은 새 이미지 다운로드/빌드와 컨테이너 시작을 수행한다. 인터넷이 없는 시연장에서는 미리 빌드해 둔다.
|
||
|
|
|
||
|
|
```powershell
|
||
|
|
$env:DEMO_BIND_ADDRESS = '192.168.0.100'
|
||
|
|
docker compose -f .\demo-services\compose.yaml config --quiet
|
||
|
|
docker compose -f .\demo-services\compose.yaml up -d --build
|
||
|
|
docker compose -f .\demo-services\compose.yaml ps
|
||
|
|
```
|
||
|
|
|
||
|
|
두 서비스가 실행된 뒤 PC에서 `http://127.0.0.1:8025/`를 열면 시험 메일함이 보인다. Mailpit의 메일함은 이 PC에만 공개했고 SMTP1025는 장비가 접근하는 PC LAN 주소에 공개했다.
|
||
|
|
|
||
|
|
### 2-4. 필요한 방화벽만 확인
|
||
|
|
|
||
|
|
필요 경로는 **장비192.168.0.223 → PC192.168.0.100**의 UDP1645, TCP49, TCP1025, UDP/TCP1514다. 브라우저용8025는 PC 내부에서만 사용한다.
|
||
|
|
|
||
|
|
차단될 경우 관리자 PowerShell에서 해당 장비만 허용하는 규칙을 추가할 수 있다. 다음은 규칙이 아직 없을 때의 예시다.
|
||
|
|
|
||
|
|
```powershell
|
||
|
|
New-NetFirewallRule -DisplayName 'TERA Demo TCP' -Direction Inbound -Action Allow -Protocol TCP -LocalAddress 192.168.0.100 -LocalPort 49,1025,1514 -RemoteAddress 192.168.0.223 -Profile Any
|
||
|
|
New-NetFirewallRule -DisplayName 'TERA Demo UDP' -Direction Inbound -Action Allow -Protocol UDP -LocalAddress 192.168.0.100 -LocalPort 1645,1514 -RemoteAddress 192.168.0.223 -Profile Any
|
||
|
|
```
|
||
|
|
|
||
|
|
이 PC에서는 과거 Docker의 명시적 차단 규칙이 허용 규칙보다 우선했던 기록이 있다. 추가 후에도 안 되면 기존 차단 규칙을 확인한다. 방화벽 전체를 끄지 않는다. 기존 `aaa-lab/fix-radius-firewall.ps1`은 과거 특정 규칙을 수정하는 스크립트이므로 현재 규칙·주소를 확인한 뒤 사용한다. `Test-NetConnection -Port`는 TCP 시험이라 RADIUS UDP 정상 여부를 판정할 수 없다.
|
||
|
|
|
||
|
|
## 3. RADIUS 웹 로그인 시연
|
||
|
|
|
||
|
|
### 화면 준비
|
||
|
|
|
||
|
|
- 관리자 브라우저: 현재 관리자 로그인 유지.
|
||
|
|
- 시험 브라우저: 별도 프로필/시크릿 창. 동일 시크릿 세션의 여러 창은 쿠키를 공유할 수 있으므로 각각 독립 세션인지 확인.
|
||
|
|
- PowerShell: 아래 서버 로그 표시.
|
||
|
|
|
||
|
|
```powershell
|
||
|
|
docker compose -f .\aaa-lab\docker-compose.yml logs --since 1m --follow radius
|
||
|
|
```
|
||
|
|
|
||
|
|
### 장비 입력값
|
||
|
|
|
||
|
|
관리자 운영 → RADIUS:
|
||
|
|
|
||
|
|
| 항목 | 입력 |
|
||
|
|
|---|---|
|
||
|
|
| 사용 | 켬 |
|
||
|
|
| 서버 | 192.168.0.100 |
|
||
|
|
| 포트 | **1645** |
|
||
|
|
| 공유 Secret | LabAaaSharedSecret-2026 |
|
||
|
|
| 타임아웃 | 5초 |
|
||
|
|
| 기본 역할 | 포트 운영자 |
|
||
|
|
|
||
|
|
적용 후 재조회한다. 이 실습은 호스트1645를 컨테이너1812로 연결했으므로 장비에1812를 입력하면 다른 경로를 시험하게 된다.
|
||
|
|
|
||
|
|
### 시연 A: 성공
|
||
|
|
|
||
|
|
1. 장비 로컬 사용자에 `labadmin`이 중복으로 없는지 확인한다.
|
||
|
|
2. 시험 브라우저에서 `http://192.168.0.223/`에 접속한다.
|
||
|
|
3. `labadmin` / `LabAdminPassword-2026`과 올바른 CAPTCHA로 로그인한다.
|
||
|
|
4. 장비 화면의 로그인 성공·포트 운영자 메뉴를 보여 준다.
|
||
|
|
5. 같은 시각의 RADIUS 로그에서 사용자 요청과 `Access-Accept`를 보여 준다.
|
||
|
|
|
||
|
|
**합격:** 장비 로그인 성공 + 실제 서버의 해당 요청 승인. 화면에 들어갔다는 사실만으로 합격하지 않는다.
|
||
|
|
|
||
|
|
### 시연 B: 잘못된 암호 거부
|
||
|
|
|
||
|
|
1. 시험 계정 로그아웃 후 새 CAPTCHA를 입력한다.
|
||
|
|
2. 암호만 `Wrong-Lab-Password`로 바꿔 1회 로그인한다.
|
||
|
|
3. 장비 로그인 거부와 서버 `Access-Reject`를 확인한다.
|
||
|
|
4. CAPTCHA 오류로 거부되면 외부 서버 요청 자체가 없을 수 있으므로 암호 거부 시험과 구분한다.
|
||
|
|
|
||
|
|
### 시연 C: 서버 중단과 Local fallback
|
||
|
|
|
||
|
|
다른 사람이 이 시험 서버를 사용하지 않는 시간에만 한다. 기존 세션은 서버를 끈다고 즉시 로그아웃되지 않으므로 **새 로그인**으로 검사한다.
|
||
|
|
|
||
|
|
```powershell
|
||
|
|
docker compose -f .\aaa-lab\docker-compose.yml stop radius
|
||
|
|
```
|
||
|
|
|
||
|
|
- 외부 전용 `labadmin`의 새 로그인은 실패해야 한다.
|
||
|
|
- 실제 로컬 관리자 계정의 새 로그인은 fallback으로 가능해야 한다. 관리자 이름·암호는 현재 장비 값을 사용한다.
|
||
|
|
- 기존 관리자 세션은 유지하고, 임계 횟수에 도달할 정도로 외부 계정 실패를 반복하지 않는다.
|
||
|
|
|
||
|
|
끝나면 즉시 복원한다.
|
||
|
|
|
||
|
|
```powershell
|
||
|
|
docker compose -f .\aaa-lab\docker-compose.yml start radius
|
||
|
|
```
|
||
|
|
|
||
|
|
복원 후 새 CAPTCHA로 외부 로그인 성공을 다시 확인한다. 타임아웃과 계정 잠금 상태를 구분한다.
|
||
|
|
|
||
|
|
## 4. TACACS+ 웹 로그인 시연
|
||
|
|
|
||
|
|
두 서버는 계속 함께 실행한다. 관리자 운영 → TACACS에서 다음을 적용한다.
|
||
|
|
|
||
|
|
| 항목 | 입력 |
|
||
|
|
|---|---|
|
||
|
|
| 사용 | 켬 |
|
||
|
|
| 서버 | 192.168.0.100 |
|
||
|
|
| 포트 | **49** |
|
||
|
|
| 공유 Secret | LabAaaSharedSecret-2026 |
|
||
|
|
| 타임아웃 | 5초 |
|
||
|
|
| 기본 역할 | 포트 운영자 |
|
||
|
|
|
||
|
|
```powershell
|
||
|
|
docker compose -f .\aaa-lab\docker-compose.yml logs --since 1m --follow tacacs
|
||
|
|
```
|
||
|
|
|
||
|
|
1. 새 시험 세션에서 동일 실습 계정과 올바른 CAPTCHA로 로그인한다.
|
||
|
|
2. TACACS 서버 로그의 같은 시각 인증 성공 기록과 장비 로그인 성공을 함께 확인한다. 서버 로그 문구는 버전마다 달라 RADIUS의 `Access-Accept`라는 문구를 찾는 것이 아니다.
|
||
|
|
3. 로그아웃 후 틀린 암호 1회 → 서버의 인증 거부 + 장비 로그인 거부를 확인한다.
|
||
|
|
4. 필요 시 `docker compose -f .\aaa-lab\docker-compose.yml stop tacacs`로 중단 → 외부 계정 새 로그인 실패 → 로컬 관리자 로그인 가능을 확인한다.
|
||
|
|
5. `docker compose -f .\aaa-lab\docker-compose.yml start tacacs`로 복원하고 외부 로그인을 재확인한다.
|
||
|
|
|
||
|
|
**주의:** TACACS를 기본으로 적용하면 웹 로그인은 TACACS를 사용한다. RADIUS 화면의 ‘사용’ 표시도 기본 방식 여부를 반영하므로 꺼져 보일 수 있다. 이것만 보고 RADIUS 컨테이너가 종료됐다고 판단하지 않는다. 두 서버 목록을 보존한 채 기본 방식만 바뀌는 흐름이다.
|
||
|
|
|
||
|
|
## 5. 두 인증 방식을 한 화면에서 나란히 시연하기
|
||
|
|
|
||
|
|
웹 로그인은 위처럼 순서대로 보여 주고, 동시 비교는 Reverse 접속으로 한다.
|
||
|
|
|
||
|
|
1. RADIUS를 먼저 사용·적용하고 TACACS도 사용·적용해 두 서버 정보를 저장한다. 마지막 기본 방식은 TACACS여도 된다. 이후 RADIUS를 명시적으로 사용 해제·저장하지 않는다.
|
||
|
|
2. 실제 연결된 시험 포트 A의 동작 설정1을 Reverse SSH, 인증 RADIUS로 지정한다.
|
||
|
|
3. 다른 시험 포트 B의 동작 설정1을 Reverse SSH, 인증 TACACS로 지정한다.
|
||
|
|
4. 서로 다른 미사용 Listen Port를 선택한다. 예시는 A=22001, B=22002이며 실제 사용 가능 여부를 확인한 후 적용한다. 웹80은 변경하지 않는다.
|
||
|
|
5. 데이터 포트는 상대와 동일한9600/8/N/1로 맞춘다.
|
||
|
|
6. PowerShell 창 두 개에서 각각 접속한다. 암호는 프롬프트에서 입력한다.
|
||
|
|
|
||
|
|
```powershell
|
||
|
|
ssh -p 22001 labadmin@192.168.0.223
|
||
|
|
```
|
||
|
|
|
||
|
|
```powershell
|
||
|
|
ssh -p 22002 labadmin@192.168.0.223
|
||
|
|
```
|
||
|
|
|
||
|
|
7. 최초 SSH 호스트 키 확인 시 대상 장비의 키인지 확인한다. 장비 변경 뒤 키 불일치가 나면 검증 없이 호스트 키 검사를 끄지 않는다.
|
||
|
|
8. RADIUS 창 접속 시 radius 로그, TACACS 창 접속 시 tacacs 로그에 인증 기록이 생기는지 보여 준다.
|
||
|
|
9. 각각 상대 장비의 무해한 조회 명령을 실행하고 실제 응답을 확인한다.
|
||
|
|
10. 잘못된 암호는 접속을 거부해야 한다. 인증 성공 후 응답이 없는 경우는 시리얼 배선·설정·IRQ 문제로 따로 조사한다.
|
||
|
|
|
||
|
|
**합격:** 각 경로에서 의도한 외부 서버 승인 → Reverse 세션 생성 → 실제 상대 응답. 상대 장비가 한 대뿐이면 순서대로 시험하고 ‘동시 양방향 검증’이라고 설명하지 않는다.
|
||
|
|
|
||
|
|
TACACS 서버 설정에 `priv-lvl=15`가 있어도 현재 장비가 그 값을 사용해 관리 권한을 부여하는 것은 아니다. 장비의 외부 인증 기본 역할을 기준으로 설명한다. 브라우저 포트 디버그만으로 Reverse 인증 방식 검증을 대신하지 않는다.
|
||
|
|
|
||
|
|
## 6. 메일 알림: 실제 수신함까지 보여 주기
|
||
|
|
|
||
|
|
### 장비 입력값
|
||
|
|
|
||
|
|
기타 설정 → 알림 → 메일 설정에서 다음을 저장한다.
|
||
|
|
|
||
|
|
| 항목 | 입력 |
|
||
|
|
|---|---|
|
||
|
|
| 메일 사용 | 켬 |
|
||
|
|
| SMTP 서버 | 192.168.0.100 |
|
||
|
|
| SMTP 포트 | **1025** |
|
||
|
|
| STARTTLS | 끔 |
|
||
|
|
| SMTP 인증 | 끔 |
|
||
|
|
| 발신자 | tera@example.test |
|
||
|
|
| 수신자 | demo@example.test |
|
||
|
|
| 참조 | 비워 둠 |
|
||
|
|
| 제목 | TERA 시연 알림 |
|
||
|
|
| 본문 | 장비 알림 시험: {{message}} |
|
||
|
|
|
||
|
|
Mailpit은 이 시험망에서 메일을 받아 PC 웹 화면에 보여 주는 수신기다. 주소의 실제 사서함이나 Gmail 계정이 필요하지 않으며 외부 수신함으로 자동 배달하지 않는다. 기본 SMTP는 인증·암호화 없이1025를 사용한다. [Mailpit SMTP 공식 문서](https://mailpit.axllent.org/docs/configuration/smtp/)
|
||
|
|
|
||
|
|
### 시연 A: 테스트 발송
|
||
|
|
|
||
|
|
1. PC에서 `http://127.0.0.1:8025/`를 연다.
|
||
|
|
2. 장비에서 설정을 적용하고 **테스트 발송**을 누른다.
|
||
|
|
3. 새 메일을 열어 수신 시각, 발신자, 수신자, 제목, 본문을 보여 준다.
|
||
|
|
4. 예전 메일을 성공으로 착각하지 않도록 현재 시각과 비교한다.
|
||
|
|
|
||
|
|
**합격:** 버튼 처리 성공 + Mailpit에 새 메일 도착. 이것은 SMTP 발송 경로 시험이며 자동 이벤트 알림 시험은 다음 단계다.
|
||
|
|
|
||
|
|
### 시연 B: 실제 이벤트에 의한 자동 메일
|
||
|
|
|
||
|
|
다음 중 한 가지를 먼저 리허설한다.
|
||
|
|
|
||
|
|
**방법 1 — 시리얼 수신 키워드(일반 시연 권장)**
|
||
|
|
|
||
|
|
1. 시험 포트 고급 설정에 `DEMO_ALARM_0909`를 저장한다.
|
||
|
|
2. 기타 설정 → 알림 → 시리얼 이벤트에서 같은 채널을 선택한다.
|
||
|
|
3. 수신 키워드 감지와 메일 전달을 켜서 적용한다.
|
||
|
|
4. 상대 장비에서 `DEMO_ALARM_0909`가 **장비 RX로 들어오도록** 전송한다. 터미널 TX로 보내기만 해서는 수신 조건을 입증하지 못한다. 에코 상대라면 돌아온 RX를 확인한다.
|
||
|
|
5. 포트 로그의 수신 문자열과 이벤트, Mailpit의 새 메일을 같은 시각으로 대조한다.
|
||
|
|
|
||
|
|
**방법 2 — 로그인 실패 임계값(시스템 이벤트 연계)**
|
||
|
|
|
||
|
|
1. 시스템 이벤트에서 로그인 실패 임계값 알림과 메일 전달을 켠다.
|
||
|
|
2. 장비의 현재 로그인 보호 횟수·감지 시간을 확인한다. 값을 모르면 임의로 3회라고 가정하지 않는다.
|
||
|
|
3. 관리자와 다른 전용 실패 시험 이름으로 올바른 CAPTCHA + 틀린 암호를 설정 임계 횟수만큼 시도한다.
|
||
|
|
4. 임시 잠금 발생 기록과 새 메일을 확인한다. 실제 관리자 계정으로 시험하지 않는다.
|
||
|
|
5. 해당 시험 계정의 잠금 해제 시간을 기록하고 이후 정상 인증 시연에는 사용하지 않는다.
|
||
|
|
|
||
|
|
정상 로그인이나 설정 변경이 모든 경우 메일로 발송되는 것은 아니다. 알림 규칙에 연결된 이벤트를 만들어야 한다.
|
||
|
|
|
||
|
|
### 실제 회사 메일로 전환할 때
|
||
|
|
|
||
|
|
회사 SMTP 서버가 제공하는 호스트·포트·인증·발신 허용 조건을 입력하고 외부 사서함에서 도착을 확인한다. 현재 발송 코드는 평문 연결 후 선택적으로 STARTTLS와 사용자/암호 인증을 한다. **465의 암묵적 TLS나 OAuth 전용 서버를 지원한다고 가정하지 않는다.** Mailpit 성공만으로 회사 메일 서버 인증까지 검증된 것은 아니다.
|
||
|
|
|
||
|
|
## 7. 시스템 로그: 사건을 만들고 찾아내는 시연
|
||
|
|
|
||
|
|
### 7-1. 먼저 기록 설정
|
||
|
|
|
||
|
|
기타 설정 → 시스템 로그 → 로그 이벤트에서 로컬 시스템·설정 변경·운영 기록을 켜고 적용한다. 시작 시각을 기록한다. 장비와 PC 시각을 맞춰 놓는다.
|
||
|
|
|
||
|
|
### 7-2. 세 가지 사건 생성
|
||
|
|
|
||
|
|
| 사건 | 실행 | 확인할 내용 |
|
||
|
|
|---|---|---|
|
||
|
|
| 인증 성공·실패 | 별도 시험 계정 정상 로그인 후 로그아웃, 틀린 암호로1회 시도 | 사용자, 시각, `auth.login`, succeeded/authentication_failed 등 결과 |
|
||
|
|
| 설정 변경 | 시험 포트 별칭을 `DEMO_LOG_0909`로 변경·적용 | 설정 변경 분류, 작업자, 포트/대상, 처리 결과 |
|
||
|
|
| 포트 운영 | 시험 포트 접속·무해한 문자열 송수신·해제 | 포트 운영/포트 로그의 채널·방향·원문 |
|
||
|
|
|
||
|
|
로그 메뉴 → 시스템 로그에서 시작 시각 이후를 검색한다. 종류 필터를 시스템/설정 변경/운영에 맞게 바꾼다. 별칭 문자열이 감사 메시지에 반드시 포함되는 것은 아니므로 안 나오면 사용자·대상 포트·시각으로 찾는다. RX/TX 원문은 포트 로그에서 확인한다.
|
||
|
|
|
||
|
|
### 7-3. 필터·다운로드·권한
|
||
|
|
|
||
|
|
1. 사용자 또는 시험 시각으로 검색하고 기대한 성공·실패 두 기록을 보여 준다.
|
||
|
|
2. 페이지 크기와 이전/다음 이동을 보여 준다.
|
||
|
|
3. 같은 검색 조건으로 CSV/JSON/JSONL을 내려받아 시각·행 내용이 일치하는지 확인한다. 내보내기 상한 때문에 전체 이력과 건수가 다를 수 있다.
|
||
|
|
4. 포트 운영자 계정으로 시스템 로그 접근이 거부되는지 확인한다. 허용 포트의 포트 로그 접근은 가능해야 한다.
|
||
|
|
5. 재부팅 후 시험 시각의 기록을 다시 찾아 보관 여부를 확인한다.
|
||
|
|
|
||
|
|
**설명 문장:** “메뉴를 보여 주는 데서 끝내지 않고, 방금 만든 성공·실패·설정 변경이 누가 언제 무엇을 했는지 기록되는지 확인합니다.”
|
||
|
|
|
||
|
|
## 8. 원격 Syslog: 장비 밖에 저장되는 것 확인
|
||
|
|
|
||
|
|
### 수신 화면 준비
|
||
|
|
|
||
|
|
```powershell
|
||
|
|
docker compose -f .\demo-services\compose.yaml exec syslog tail -n 30 -F /var/log/tera/remote.log
|
||
|
|
```
|
||
|
|
|
||
|
|
이 창을 시연 화면 옆에 둔다. `docker compose logs syslog`는 데몬 시작 오류 확인용이며 수신 메시지는 위 파일에서 확인한다.
|
||
|
|
|
||
|
|
### 장비 설정
|
||
|
|
|
||
|
|
기타 설정 → 시스템 로그 → 로그 서버:
|
||
|
|
|
||
|
|
| 항목 | 입력 |
|
||
|
|
|---|---|
|
||
|
|
| 원격 사용 | 켬 |
|
||
|
|
| 로그 서버 | **192.168.0.100:1514** |
|
||
|
|
| 프로토콜 | 우선 TCP |
|
||
|
|
| 원격 전송할 로그 | 시스템·설정 변경·운영·상태 중 시험 항목 켬 |
|
||
|
|
|
||
|
|
1. 적용 후 **새로운** 실패 로그인1회 또는 별칭 변경을 수행한다. 과거 이력이 자동 재전송된다고 가정하지 않는다.
|
||
|
|
2. 장비 로컬 기록과 PC 수신 파일에 같은 시각·사용자·대상 사건이 있는지 비교한다.
|
||
|
|
3. 장비의 전송 상태 새로고침에서 최근 상태·시도 횟수·오류를 확인한다.
|
||
|
|
4. UDP도 시연하려면 프로토콜을 UDP로 변경·적용하고 새 사건을 다시 만든다. 동일1514로 받는다.
|
||
|
|
|
||
|
|
**합격:** 실제 수신 파일에 해당 사건이 기록됨. 특히 UDP의 ‘전송 완료’는 수신 증거가 아니다. Docker NAT로 `from=`이 내부 주소로 보일 수 있으므로 메시지 내용·사용자·시각도 대조한다.
|
||
|
|
|
||
|
|
### 선택: 실패·복구 시연
|
||
|
|
|
||
|
|
TCP 모드에서 수신기를 중단한다.
|
||
|
|
|
||
|
|
```powershell
|
||
|
|
docker compose -f .\demo-services\compose.yaml stop syslog
|
||
|
|
```
|
||
|
|
|
||
|
|
새 시험 사건을 만들고 전송 실패/재시도 상태를 확인한다. 전송 처리 시간에 따라 즉시 바뀌지 않을 수 있다. 다시 시작한다.
|
||
|
|
|
||
|
|
```powershell
|
||
|
|
docker compose -f .\demo-services\compose.yaml start syslog
|
||
|
|
```
|
||
|
|
|
||
|
|
새 사건의 수신을 확인한다. 중단 중 사건까지 모두 복구됐다고 설명하려면 해당 사건도 파일에서 하나씩 확인한다. 무제한 재전송·유실 없음은 보장하지 않는다.
|
||
|
|
|
||
|
|
수신 기록 파일 보관:
|
||
|
|
|
||
|
|
```powershell
|
||
|
|
docker compose -f .\demo-services\compose.yaml cp syslog:/var/log/tera/remote.log .\demo-services\received-syslog.log
|
||
|
|
```
|
||
|
|
|
||
|
|
## 9. 실패했을 때 확인 순서
|
||
|
|
|
||
|
|
| 증상 | 우선 확인 |
|
||
|
|
|---|---|
|
||
|
|
| RADIUS 서버에 요청이 없음 | PC주소, UDP1645 매핑·방화벽, 웹 기본 인증 방식, CAPTCHA에서 먼저 거부됐는지 |
|
||
|
|
| RADIUS 요청은 있으나 응답 없음 | Shared Secret, 클라이언트 허용, Message-Authenticator 정책. 현재 클라이언트는 PAP이며 Challenge 미지원 |
|
||
|
|
| Access-Reject | 실제 서버 계정·암호, 로컬 계정 암호와 혼동 여부 |
|
||
|
|
| 서버가 승인했는데 웹 실패 | 장비 로그·응답 검증·세션 처리 확인. 서버 승인만으로 웹까지 합격하지 않음 |
|
||
|
|
| TACACS 로그 없음 | TCP49, 기본 방식, 서버 실행, 방화벽 |
|
||
|
|
| 외부 서버를 꺼도 로그인됨 | 기존 세션인지, 같은 이름의 로컬 계정으로 fallback 됐는지 |
|
||
|
|
| 포트 인증은 성공하나 RX 없음 | 상대 로그인·9600·배선·실제 응답·현재 IRQ95 상태 |
|
||
|
|
| 메일 테스트 실패 | SMTP1025와 웹8025 혼동, STARTTLS/인증 체크, 방화벽 |
|
||
|
|
| 테스트 메일만 오고 자동 메일 안 옴 | 해당 규칙 활성·메일 전달 선택, RX 키워드 또는 실제 임계 조건 충족 |
|
||
|
|
| Syslog 전송 완료인데 수신 없음 | UDP 결과 의미, 1514포트, 선택 분류, 사건이 설정 이후 생성됐는지 |
|
||
|
|
| 시스템 로그에서 데이터 원문 안 보임 | 포트 로그를 선택했는지, 해당 포트 RX/TX 기록 옵션 |
|
||
|
|
|
||
|
|
기존 RADIUS 구성은 Docker NAT 실습용 catch-all client와 Message-Authenticator 미요구 설정이다. 현행 장비 클라이언트의 호환 시험용이며 운영망 보안 구성을 충족한다고 소개하지 않는다. 운영 서버가 Message-Authenticator를 필수로 요구하면 클라이언트 개선이 필요할 수 있다.
|
||
|
|
|
||
|
|
## 10. 시연 순서·종료
|
||
|
|
|
||
|
|
**권장 진행:** 네 서버 준비 → RADIUS 성공/실패 → TACACS 성공/실패 → 두 Reverse 접속 비교 → Mailpit 테스트 수신 → 키워드 자동 메일 → 로그 검색·내보내기 → 원격 Syslog 수신 → 설정 원복.
|
||
|
|
|
||
|
|
- 서버 중단·복구는 기본 시연이 성공한 뒤 선택해서 한다.
|
||
|
|
- 장비의 외부 기본 인증·기본 역할·포트 인증·메일·로그 목적지·알림 규칙을 시연 전 값으로 복원한다. 무조건 Local로 바꾸는 것이 아니라 기존 상태를 기준으로 한다.
|
||
|
|
- 수신 증거를 먼저 보관한다. 아래 stop은 컨테이너를 중지하며 볼륨 데이터를 삭제하지 않는다.
|
||
|
|
|
||
|
|
```powershell
|
||
|
|
docker compose -f .\demo-services\compose.yaml stop
|
||
|
|
```
|
||
|
|
|
||
|
|
AAA도 종료하려면 다른 사용자가 없는지 확인한 뒤:
|
||
|
|
|
||
|
|
```powershell
|
||
|
|
docker compose -f .\aaa-lab\docker-compose.yml stop
|
||
|
|
```
|
||
|
|
|
||
|
|
이번 시연용으로 만든 방화벽 규칙만 제거하려면 관리자 PowerShell에서:
|
||
|
|
|
||
|
|
```powershell
|
||
|
|
Get-NetFirewallRule -DisplayName 'TERA Demo TCP','TERA Demo UDP' | Remove-NetFirewallRule
|
||
|
|
```
|
||
|
|
|
||
|
|
### 이전 문서·스크립트와의 차이
|
||
|
|
|
||
|
|
`aaa-lab/README.md`와 예전 원격 시험 스크립트에는 `:8083` 주소와 CAPTCHA 없이 로그인하는 흐름이 남아 있다. 이번 시연은 **HTTP80 + 실제 CAPTCHA 수동 로그인** 기준이며, 그 스크립트를 그대로 실행하지 않는다. 이 PC에 실행 중인 인증 컨테이너가 있다는 사실은 현재 교체 장비의 인증 성공을 이번에 재검증했다는 뜻이 아니다.
|
||
|
|
|
||
|
|
### 근거
|
||
|
|
|
||
|
|
- 로컬: `aaa-lab/docker-compose.yml`, `radius/authorize`, `radius/clients.conf`, `tacacs/tac_plus.conf` 및 실제 Docker 포트 조회.
|
||
|
|
- 구현: `backend/internal/externalauth/client.go`, `backend/internal/adapters/mock/store.go`, `backend/internal/alarmdelivery/transport.go`, `frontend/web/static/js/integration.js`.
|
||
|
|
- [FreeRADIUS 구성 파일](https://wiki.freeradius.org/config/Configuration-files)
|
||
|
|
- [현재 실습 TACACS 구현의 설정 문법](https://github.com/facebook/tac_plus/blob/main/tacacs-F4.0.4.28/tac_plus.conf.5.in)
|
||
|
|
- [Mailpit Docker 구성](https://mailpit.axllent.org/docs/install/docker/)
|
||
|
|
- [Mailpit SMTP 기본 동작](https://mailpit.axllent.org/docs/configuration/smtp/)
|
||
|
|
- [rsyslog UDP 입력](https://docs.rsyslog.com/doc/configuration/modules/imudp.html), [TCP 입력](https://docs.rsyslog.com/doc/configuration/modules/imtcp.html)
|