본문 바로가기
카테고리 없음

리눅스·네트워크 통합 실습 정리 — NAT 환경 구성부터 SSH 키 인증, 패킷 분석, Nmap 스캔까지

by Lsung 2026. 9. 9.

리눅스·네트워크 통합 실습 정리

NAT 환경 구성부터 SSH 키 인증, 패킷 분석, Nmap 스캔까지

이번 실습에서는 기존에 사용하던 브리지(Bridged) 네트워크 환경을 더 이상 사용하지 않고, 모든 가상머신을 NAT 환경으로 통일했다. 이후 Rocky Linux와 Kali Linux를 이용해 SSH 키 인증 환경을 구성하고, Wireshark를 이용한 Ethernet·ARP·IP 패킷 분석, 마지막으로 Nmap을 활용한 포트 스캔까지 진행했다.

단순히 명령어를 외우는 것보다는 각 설정이 왜 필요한지, 패킷의 각 필드가 무엇을 의미하는지 이해하는 것이 이번 실습의 핵심이었다.


1. VMware NAT 실습 환경 구성

앞으로 수업에서는 Bridged 네트워크를 사용하지 않고 NAT만 사용한다.

VMware의 Virtual Network Editor에서 VMnet8을 NAT 네트워크로 설정하고, 실습용 네트워크 대역은 다음과 같이 사용한다.

Network : 192.168.11.0/24
Subnet Mask : 255.255.255.0
 

초기 구성에서는 다음과 같은 장비를 만들었다.

Key Server   : 192.168.11.9
Kali Linux   : 192.168.11.36
Linux17      : 192.168.11.17
Linux16      : 192.168.11.16
Windows XP   : 192.168.11.7
 

이후 실습에서는 주로 다음 장비를 사용한다.

Kali Linux        192.168.11.36
Rocky Linux       192.168.11.17
Windows XP        192.168.11.7
 

Linux16은 보조 서버로 사용할 수 있고, Key Server 192.168.11.9는 SSH 키 관리 및 배포에 사용한다.

Windows XP는 공격을 받아주는 허니팟(Honeypot) 역할로 활용한다.

MAC Address 주의사항

가상머신을 복제하거나 여러 대 생성했을 경우 MAC 주소가 중복될 수 있다.

따라서 VMware의 각 가상머신에서:

Virtual Machine Settings
→ Network Adapter
→ Advanced
→ MAC Address
→ Generate
 

를 이용해 각 VM마다 새로운 MAC 주소를 생성한다.

MAC 주소가 충돌하면 네트워크 통신이나 ARP 과정에서 문제가 발생할 수 있으므로 반드시 확인한다.


2. Rocky Linux 기본 환경 설정

Rocky Linux 서버에는 고정 IP를 지정한다.

예를 들어 Linux17은:

IP : 192.168.11.17
Subnet Mask : 255.255.255.0
 

Linux16은:

IP : 192.168.11.16
Subnet Mask : 255.255.255.0
 

으로 설정한다.

고정 IP를 사용하는 이유는 수업 중 서버 주소를 일정하게 유지하여 실습 형식을 통일하기 위함이다.

네트워크 연결 확인:

 
ip addr
 

또는:

 
ip addr show ens160
 

정상이라면 다음과 같이 나타난다.

inet 192.168.11.17/24
 

방화벽 해제

실습에서는 방화벽 때문에 통신이 막히는 상황을 줄이기 위해 firewalld를 중지한다.

 
systemctl stop firewalld
systemctl disable firewalld
 

SELinux 설정

SELinux는 실습 환경에서 제한을 줄이기 위해 Permissive 또는 Disabled 상태로 사용한다.

현재 상태 확인:

 
getenforce
 

즉시 Permissive 변경:

 
setenforce 0
 

재부팅 후에도 적용하려면:

 
vi /etc/selinux/config
 

다음 부분을 수정한다.

SELINUX=disabled
 

패킷 포워딩 설정

IP Forwarding을 활성화한다.

 
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p
 

확인:

 
sysctl net.ipv4.ip_forward
 

결과:

net.ipv4.ip_forward = 1
 

이면 정상이다.


3. SSH Root 로그인 설정

서버 간 키 인증을 구성하기 전에 SSH 설정을 확인한다.

root 비밀번호는 실습 편의를 위해 동일하게 설정할 수 있다.

 
passwd root
 

예:

qw12
 

SSH 설정 파일:

 
vi /etc/ssh/sshd_config
 

아래 내용을 설정한다.

PermitRootLogin yes
PasswordAuthentication yes
 

Rocky Linux에서는:

 
systemctl restart sshd
systemctl status sshd
 

Kali Linux에서는:

 
systemctl restart ssh
systemctl status ssh
 

정상이라면:

Active: active (running)
 

이 표시된다.


4. Kali Linux SSH 재설정

Kali Linux에서 Key Server를 이용해 SSH 키를 복사하려고 할 때 비밀번호 로그인이 차단되는 경우가 있었다.

먼저 root 비밀번호를 다시 설정한다.

 
passwd root
 

그다음:

 
vi /etc/ssh/sshd_config
 

다음 두 줄을 적용한다.

PermitRootLogin yes
PasswordAuthentication yes
 

저장 후 SSH를 재시작한다.

 
systemctl restart ssh
systemctl status ssh
 

그다음 Key Server에서 Kali로 공개키를 전달한다.

 
ssh-copy-id root@192.168.11.36
 

5. SSH 키 서버 구성

이번 실습에서는 인증서버 또는 Key Server를:

192.168.11.9
 

로 구성한다.

Key Server에서 SSH 키를 생성하고 여러 서버에 배포하는 방식이다.

키를 하나씩 서버마다 만드는 것보다 중앙에서 키를 관리하면 여러 서버에 자동으로 배포할 수 있다는 장점이 있다.


ED25519 키 생성

root용 .ssh 디렉터리 생성:

 
mkdir -p /root/.ssh
 

디렉터리 권한:

 
chmod 700 /root/.ssh
 

키 생성:

 
ssh-keygen -t ed25519 -f /root/.ssh/id_ed25519
 

개인키 권한:

 
chmod 600 /root/.ssh/id_ed25519
 

공개키 권한:

 
chmod 644 /root/.ssh/id_ed25519.pub
 

중요한 점은 디렉터리와 파일의 권한이 다르다는 것이다.

.ssh 디렉터리 : 700
개인키         : 600
공개키         : 644
authorized_keys: 600
 

시험이나 실습에서 자주 헷갈릴 수 있는 부분이므로 반드시 구별해야 한다.


6. ssh-copy-id를 이용한 공개키 배포

SSH 공개키를 다른 서버 계정에 복사하는 기본 명령어:

 
ssh-copy-id 계정@IP주소
 

예:

 
ssh-copy-id root@192.168.11.17
 

또는:

 
ssh-copy-id root@192.168.11.36
 

복사가 끝난 뒤:

 
ssh root@192.168.11.17
 

접속했을 때 비밀번호를 묻지 않으면 키 인증이 정상적으로 적용된 것이다.

하나의 계정은 여러 개의 키를 사용할 수 있으며, 이 경우 authorized_keys 파일에 공개키가 여러 줄 들어갈 수 있다.


7. root / web 계정 구성

실습 서버에는 다음 계정을 사용한다.

root
web
 

web 계정에도 .ssh 디렉터리를 만들어준다.

 
mkdir -p /home/web/.ssh
chmod 700 /home/web/.ssh
 

공개키 등록:

 
cat /home/web/id_ed25519.pub >> /home/web/.ssh/authorized_keys
 

authorized_keys 권한:

 
chmod 600 /home/web/.ssh/authorized_keys
 

소유권 설정:

 
chown -R web:key /home/web/.ssh
 

환경에 따라 그룹 이름은 실제 계정 그룹에 맞게 수정한다.


8. SSH 개인키 제출

실습에서는 키를 두 종류로 준비한다.

하나는 Linux/OpenSSH에서 사용하는 일반 개인키이고, 다른 하나는 PuTTY에서 사용할 수 있도록 변환한 키이다.

일반 OpenSSH 개인키:

id_ed25519
 

PuTTY에서는 해당 키를 PuTTYgen으로 불러온 뒤 .ppk 형식으로 저장한다.

즉 최종적으로:

OpenSSH 개인키
PuTTY용 PPK 개인키
 

두 종류를 준비할 수 있다.


9. Ethernet 프레임 기본 구조

패킷 분석을 시작할 때 가장 먼저 보는 부분은 Ethernet Header이다.

Ethernet Header의 기본 구조:

Destination MAC Address : 6 byte
Source MAC Address      : 6 byte
Type                    : 2 byte
 

총:

14 byte
 

이다.

패킷 분석 시 맨 앞 6바이트는 목적지 MAC, 다음 6바이트는 출발지 MAC, 다음 2바이트는 프로토콜 Type이다.

예:

ff ff ff ff ff ff
58 86 94 49 d1 74
08 06
 

분석:

Destination MAC : ff ff ff ff ff ff
Source MAC      : 58 86 94 49 d1 74
Type            : 08 06 → ARP
 

MAC 주소 자체는 16진수 그대로 읽으면 되고 별도로 10진수로 바꿀 필요는 없다.


10. ARP란 무엇인가

ARP는:

Address Resolution Protocol
 

의 약자이다.

ARP는 데이터를 직접 전송하기 위한 프로토콜이라기보다, 네트워크 계층 주소를 이용해 상대방의 MAC 주소를 알아내기 위한 프로토콜이다.

현재 우리가 사용하는 네트워크 계층 주소가 IP이므로 일반적으로:

IP 주소를 이용하여 MAC 주소를 알아내는 프로토콜

이라고 이해하면 된다.

조금 더 정확하게 표현하면:

네트워크 계층의 프로토콜 주소를 이용하여 링크 계층의 하드웨어 주소를 알아내는 프로토콜

이다.


ARP Request의 특징

상대방의 IP 주소는 알고 있지만 MAC 주소를 모르는 상황에서는 Ethernet 목적지 MAC을 알 수 없다.

따라서 ARP Request에서는 목적지 MAC을:

FF:FF:FF:FF:FF:FF
 

로 설정한다.

Broadcast로 전송한다.

같은 네트워크에 있는 모든 장비가 패킷을 받지만, 해당 IP를 가진 장비만 ARP Reply를 보낸다.

MAC 주소를 한 번 알아내면 ARP Cache에 일정 시간 저장하여 매번 ARP 요청을 보내지 않는다.


11. ARP 패킷 구조

ARP 헤더에는 다음 정보가 들어간다.

Htype
Ptype
HLeng
PLeng
OP
SA
SIP
DA
DIP
 

Htype

Hardware Type
 

현재 사용하는 링크 계층 종류를 나타낸다.

Ethernet:

00 01
 

Ptype

Network Layer Protocol Type.

IPv4:

08 00
 

HLeng

Hardware Address Length.

Ethernet MAC 주소는 6바이트이므로:

06
 

PLeng

Protocol Address Length.

IPv4 주소는 4바이트이므로:

04
 

OP

ARP 요청인지 응답인지 나타낸다.

00 01 → ARP Request
00 02 → ARP Reply
 

SA

Sender MAC Address.

SIP

Sender IP Address.

DA

Destination/Target MAC Address.

ARP Request에서는 아직 상대 MAC을 모르므로:

00 00 00 00 00 00
 

이 들어갈 수 있다.

DIP

Target IP Address.


12. ARP 패킷 분석 작성 형식

실습 제출 시에는 먼저 항목과 단위부터 작성하고, 원본 헥사값을 넣은 뒤 의미를 해석한다.

예:

Ethernet ==

Dest MAC Add (6 byte) :
FF FF FF FF FF FF

Sour MAC Add (6 byte) :
58 86 94 49 D1 74

Type (2 byte) :
08 06 : ARP


ARP ==

Htype (2 byte) :
00 01 : Ethernet

Ptype (2 byte) :
08 00 : IPv4

HLeng (1 byte) :
06 : 6 byte

PLeng (1 byte) :
04 : 4 byte

OP (2 byte) :
00 02 : ARP Reply

SA (6 byte) :
58 86 94 49 D1 74

SIP (4 byte) :
C0 A8 0A 01
→ 192.168.10.1

DA (6 byte) :
...

DIP (4 byte) :
...
 

중요한 원칙은:

원값 → 사람이 이해할 수 있는 값으로 해석

이다.


13. IPv4 Header 구조

IPv4 Header의 기본 길이는:

20 byte
 

이다.

한 줄을 32bit, 즉 4byte로 보면 기본 헤더는 5줄이다.

IPv4 Header Length는 바이트가 아닌 Word 단위로 표현한다.

예:

Header Length = 5
 

이면:

5 × 4 byte = 20 byte
 

이다.


14. IP Header 주요 필드

Version

IPv4라면:

4
 

이다.

Header Length

기본 IPv4 Header:

5 word = 20 byte
 

Type of Service

과거 서비스 품질 등을 나타내기 위해 사용했지만 현재 실습에서는 크게 해석하지 않는다.

Total Length

IP Header와 상위 계층 데이터를 모두 포함한 IP Datagram 전체 길이이다.


Identification

각 IP Datagram의 식별번호이다.

IP Datagram이 Fragmentation 되었을 경우 같은 Identification 값을 가진 조각들을 다시 결합하는 데 사용한다.

Sequence Number와는 다른 개념이다.


Flags + Fragment Offset

IP Datagram 조각화와 관련된 정보이다.

Fragment Offset은 조각의 위치를 나타낸다.

Flags는 3bit이다.

실습에서는 비트 단위로 직접 확인할 수 있어야 한다.


TTL

Time To Live
 

라우터를 하나 거칠 때마다 값이 1씩 감소한다.

TTL이 0이 되면 라우터에서 패킷을 폐기한다.

네트워크에서 패킷이 무한히 순환하는 것을 방지한다.


Protocol

IP 패킷 안에 어떤 상위 프로토콜이 들어있는지 나타낸다.

대표적인 값:

01 → ICMP
06 → TCP
11 → UDP
 

Header Checksum

IP Header가 전송 과정에서 손상되었는지 확인한다.

패킷 분석 실습에서는 16진수 값을 2진수로 변환하여 확인할 수 있어야 한다.

예:

08 6B
 

00001000 01101011
 

Source / Destination IP

IPv4 주소는 각각:

32bit = 4byte
 

이다.

예:

C0 A8 0A 13
 

각 바이트를 10진수로 변환하면:

C0 = 192
A8 = 168
0A = 10
13 = 19
 

따라서:

192.168.10.19
 

이다.


15. IP 패킷 분석 시 주의사항

패킷 분석 제출에서는 단순히 16진수만 옮기는 것이 아니라 필드마다 요구되는 표현 단위를 구분해야 한다.

예를 들어:

MAC Address → 원본 16진수 그대로

IP Address → 16진수 원값 + 10진수 IP

Identification → 필요 시 10진수 변환

Flags → 비트 단위

Header Checksum → 2진수 변환

Protocol → 16진수 값 + 프로토콜 이름
 

처럼 작성한다.

따라서 먼저 양식을 적고:

Version (4bit) :
Header Length (4bit) :
TOS (1byte) :
Total Length (2byte) :
Identification (2byte) :
Flags + Fragment Offset :
TTL (1byte) :
Protocol (1byte) :
Header Checksum (2byte) :
Source IP (4byte) :
Destination IP (4byte) :
 

그다음 원본 패킷을 순서대로 끊어서 값을 채우는 것이 좋다.


16. Nmap 기본 사용법

Kali Linux에서 네트워크 스캔 실습을 진행했다.

기본 형식:

 
nmap [option] target
 

자주 사용하는 옵션:

옵션의미
-sS SYN Stealth Scan
-sT TCP Connect Scan
-sU UDP Scan
-sV 서비스 버전 탐지
-O OS 정보 탐지
-T0~5 스캔 속도 조절
-Pn Ping 응답 없이 스캔
-n DNS 조회 생략
-sN Null Scan
-sX Xmas Scan
-sn ICMP/ARP 기반 Host Discovery
-p 특정 포트 지정
-v, -vv 상세 출력
-oN 결과 파일 저장
-iL IP 목록 파일 사용

17. 기본 Nmap 스캔

Rocky Linux:

192.168.11.17
 

을 대상으로:

 
nmap 192.168.11.17
 

실행.

예:

Host is up

PORT     STATE   SERVICE
22/tcp   open    ssh
9090/tcp closed  zeus-admin
 

해석:

Host is up
→ 192.168.11.17 서버가 정상적으로 동작 중

22/tcp open ssh
→ TCP 22번 포트가 열려 있으며 SSH 서비스 사용 가능

9090/tcp closed
→ 9090번 포트는 닫혀 있음

filtered
→ 방화벽 또는 필터링 때문에 Nmap이 정확한 상태를 판단하지 못함
 

18. 서비스 및 OS 탐지

 
nmap -sS -sV -O 192.168.11.17
 

의미:

-sS → SYN Scan
-sV → Service Version Detection
-O  → OS Detection
 

결과 예:

22/tcp open ssh OpenSSH 8.0
Linux 5.1 - 5.15 (98%)
Network Distance: 1 hop
 

해석:

SSH 서비스가 OpenSSH 8.0으로 탐지됨
OS는 Linux 계열일 가능성이 높음
대상까지 1 hop 거리
 

No exact OS matches가 나오면 Linux 계열은 추정할 수 있지만 정확한 버전까지 확정하지 못했다는 의미이다.


19. UDP 포트 스캔

전체 UDP Scan:

 
nmap -sU 192.168.11.17
 

UDP는 TCP보다 응답 방식이 단순하지 않아 전체 스캔 시간이 오래 걸릴 수 있다.

따라서 특정 포트만 확인하는 것이 효율적이다.

 
nmap -sU -p 53,161 192.168.11.17
 

예:

53/udp  filtered domain
161/udp filtered snmp
 

해석:

UDP 53번 → DNS
UDP 161번 → SNMP
filtered → 방화벽 또는 필터링으로 정확한 상태 확인 불가
 

20. 네트워크 Host Discovery

 
nmap -sn 192.168.11.0/24
 

를 사용하면 해당 네트워크에서 살아있는 호스트를 확인할 수 있다.

예:

192.168.11.1
192.168.11.3
192.168.11.9
192.168.11.17
192.168.11.36
192.168.11.254
 

총 256개의 IP 중 활성화된 호스트가 몇 개인지 확인할 수 있다.

-sn은 포트 스캔보다는 Host Discovery가 목적이다.

같은 LAN에서는 ARP 응답이 중요한 역할을 한다.


21. 여러 IP 스캔

 
nmap 192.168.11.1 192.168.11.20
 

예를 들어 결과가:

192.168.11.1 → Host is up
192.168.11.20 → 응답 없음
 

이라면 .1은 활성화된 호스트이고 .20은 탐지되지 않은 것이다.

예:

53/tcp open domain
 

이면 TCP 53번 포트에서 DNS 관련 서비스가 열려 있다는 의미이다.


22. 웹 서버 포트 스캔 실습

추가 실습에서는 웹 서버를 설치하고 열린 포트와 닫힌 포트에 대한 패킷 차이를 확인한다.

과제:

닫힌 포트와 열린 포트에 대한 TCP/UDP 포트 스캔 패킷을 캡처하여 해석한다.

실습 순서:

1. 웹 서버를 80번 포트에서 실행

Kali에서:

 
nmap -p 80 192.168.11.17
 

Wireshark로 스캔 패킷과 응답 패킷을 캡처한다.

2. 웹 서버 포트를 8080으로 변경

다시:

 
nmap -p 80 192.168.11.17
 

그리고:

 
nmap -p 8080 192.168.11.17
 

을 실행한다.

3. 각 응답 패킷 비교

TCP 포트 상태에 따라 다음과 같은 차이를 확인할 수 있다.

Open Port
→ SYN에 대해 SYN/ACK 응답

Closed Port
→ SYN에 대해 RST 응답
 

이 응답 차이를 Wireshark에서 직접 캡처하고 Ethernet → IP → TCP 순서로 분석하는 것이 실습 목표이다.


23. 이번 실습에서 꼭 기억할 내용

이번 실습에서 가장 중요한 부분을 정리하면 다음과 같다.

네트워크 환경

Bridged 사용 X
NAT 사용
192.168.11.0/24 대역
 

주요 서버

Key Server : 192.168.11.9
Kali       : 192.168.11.36
Rocky      : 192.168.11.17
WinXP      : 192.168.11.7
 

SSH 권한

.ssh             → 700
개인키           → 600
공개키           → 644
authorized_keys  → 600
 

ARP

네트워크 계층의 주소를 이용해 상대방의 MAC 주소를 알아내는 프로토콜

ARP Request → OP 0001
ARP Reply   → OP 0002
 

IPv4 Protocol

01 → ICMP
06 → TCP
11 → UDP
 

IP Header Checksum

16진수 원값을 확인한 뒤 필요하면 2진수로 변환하여 분석한다.

Nmap

-sS → SYN Scan
-sU → UDP Scan
-sV → Service Version
-O  → OS Detection
-sn → Host Discovery
-p  → Port 지정
 

마무리

이번 실습은 단순한 Linux 명령어 연습이 아니라 하나의 네트워크 환경을 직접 구성하고, 그 위에서 SSH 인증·패킷 분석·포트 스캔을 연결해서 이해하는 과정이었다.

처음에는 VMware의 NAT와 IP 설정부터 시작했지만 결국 다음 흐름이 하나로 연결된다.

가상 네트워크 구성
        ↓
IP / MAC 설정
        ↓
SSH 서버 설정
        ↓
공개키 인증
        ↓
Ethernet 구조 이해
        ↓
ARP 분석
        ↓
IPv4 Header 분석
        ↓
TCP / UDP / ICMP 이해
        ↓
Nmap 포트 스캔
        ↓
Wireshark 응답 패킷 분석
 

특히 패킷 분석에서는 무조건 먼저 필드의 위치와 크기를 구분한 뒤 원본 16진수 값을 넣고, 마지막에 사람이 이해할 수 있는 값으로 해석하는 습관을 들이는 것이 중요하다.

또한 명령어 자체를 모두 암기하는 것보다, 자신이 수행했던 명령과 설정을 정리해두고 필요할 때 다시 꺼내 사용할 수 있는 형태로 만드는 것이 실제 Linux 및 클라우드 환경 관리에서도 중요하다.