리눅스 시스템 기초 · 입문편 — 본문의 "N편"은 입문 과정 번호다. 번호별 글과 전체 250편 구성은 통합 로드맵에서 확인할 수 있다.

리눅스 시스템 기초 41 / 50 · Part 5. 네트워크·보안·SOC
실습 환경: Rocky Linux 9 (10.0.0.200) · ip 출력은 실습 컨테이너의 실제 출력 (192.0.2.0/24 문서용 대역)
이전 글: 40. Disk 사용량 관리

1. 들어가며

Part 5를 시작한다. 지금까지는 한 대의 서버 안 에서 일어나는 일(파일, 권한, 프로세스, 서비스)을 다뤘다. 이제 서버 밖 과 연결되는 부분, 즉 네트워크를 다룬다.

관제에서 보는 공격은 거의 대부분 네트워크로 들어온다. SSH 무차별 대입, 웹 공격, 원격 코드 실행 후의 외부 통신(C2), 데이터 유출 모두 네트워크를 지난다. 그래서 관제 요원은 이 질문에 답할 수 있어야 한다.

  • 이 연결은 어떤 프로세스 가 만들었는가?
  • 패킷은 서버 안에서 어떤 단계 를 거치는가? 방화벽은 어디에 있는가?
  • 각 단계에서 어떤 기록 이 남는가?

이번 글은 세부 프로토콜(42편)이나 명령어(44편)에 들어가기 전에, 전체 지도를 먼저 그린다.


2. 핵심 개념

2-1. 계층으로 보는 네트워크

계층이름주소·식별자Linux에서 담당
L7애플리케이션URL, 사용자명sshd, httpd 등 사용자 공간 프로그램
L4전송 (TCP/UDP)포트 번호커널
L3네트워크 (IP)IP 주소커널 (라우팅, netfilter 방화벽)
L2데이터 링크MAC 주소커널 + NIC 드라이버
L1물리케이블·전파NIC 하드웨어

핵심은 L4 이하를 커널이 처리한다 는 점이다. 애플리케이션은 socket()으로 소켓을 만들고 send()/recv()만 호출한다. TCP 연결 수립, 재전송, IP 라우팅, 방화벽 검사는 모두 커널이 한다(4편 커널 구조).

2-2. 인터페이스와 주소

개념설명확인
인터페이스네트워크 연결 지점. lo(루프백), eth0/ens33(유선)ip link
IP 주소 / 서브넷10.0.0.200/24 = 10.0.0.0~255 같은 네트워크ip addr
게이트웨이다른 네트워크로 나갈 때 거치는 라우터ip route
DNS 서버이름 → IP 변환/etc/resolv.conf
/etc/hostsDNS보다 먼저 참조되는 이름 표변조 시 트래픽 우회 가능

2-3. 루프백(lo)과 바인딩 주소

127.0.0.1은 자기 자신이다. 서비스가 127.0.0.1:3306에서 대기하면 서버 내부에서만 접속할 수 있고, 0.0.0.0:3306이면 모든 인터페이스 에서 접속을 받는다. 이 차이는 44편 ss에서 노출 여부를 판단하는 기준이 된다.


3. 동작 원리

패킷이 Linux를 통과하는 경로와 관제 지점

외부에서 SSH 접속 패킷이 들어올 때의 흐름이다.

  1. NIC 가 패킷을 받아 드라이버가 커널로 넘긴다. tcpdump는 이 지점에서 복사본을 본다.
  2. IP 계층 이 목적지 주소를 확인한다. 이때 netfilter(nftables/iptables)의 규칙을 통과해야 한다. firewalld는 이 규칙을 관리하는 도구다(46편). 막히면 여기서 버려진다.
  3. TCP 계층 이 목적지 포트 22를 보고, 그 포트에서 대기(LISTEN) 중인 소켓을 찾는다. 3-way handshake가 여기서 일어난다(42편).
  4. 연결이 수립되면 sshd 프로세스 가 accept()로 받아 사용자 공간에서 인증을 처리한다.
  5. 인증 결과는 sshd가 로그로 남긴다 → RHEL /var/log/secure, Ubuntu /var/log/auth.log(21편).

실습 환경에서 확인한 실제 인터페이스와 라우팅이다.

$ ip -br addr
lo               UNKNOWN        127.0.0.1/8
eth0             UP             192.0.2.2/24

$ ip route
default via 192.0.2.1 dev eth0
192.0.2.0/24 dev eth0 proto kernel scope link src 192.0.2.2
  • 같은 네트워크(192.0.2.0/24)는 eth0으로 직접 보낸다.
  • 그 외 모든 목적지(default)는 게이트웨이 192.0.2.1로 보낸다.

4. 실습

# 1) 인터페이스와 주소
ip -br link
ip -br addr
ip addr show eth0

# 2) 라우팅
ip route
ip route get 8.8.8.8          # 이 목적지로 갈 때 실제 사용할 경로·출발 주소

# 3) 이름 해석
cat /etc/resolv.conf
cat /etc/hosts
getent hosts velog.io         # hosts → DNS 순서로 실제 해석

# 4) 인터페이스 통계 (에러·드롭)
ip -s link show eth0

# 5) 연결 확인
ping -c 3 10.0.0.1
tracepath 8.8.8.8             # 또는 traceroute

# 6) 패킷 확인 (root)
sudo tcpdump -i eth0 -nn -c 10 'tcp port 22'

# 7) 배포판별 네트워크 설정
nmcli con show                # RHEL (NetworkManager)
ls /etc/netplan/              # Ubuntu (netplan)

5. 결과 분석

아래 출력은 형식 설명용 예시다.

① /etc/hosts 변조

127.0.0.1   localhost
10.0.0.200  rocky
203.0.113.66  update.vendor-example.com     ← 추가된 줄

업데이트 서버 이름을 공격자 IP로 연결해 두면, 서버가 가짜 업데이트 를 받아 올 수 있다. /etc/hosts는 DNS보다 먼저 참조되므로 DNS 로그에는 흔적이 남지 않는다.

② ip route get

$ ip route get 203.0.113.50
203.0.113.50 via 10.0.0.1 dev ens33 src 10.0.0.200 uid 0

이 서버가 외부 IP로 나갈 때 어떤 출발 주소(10.0.0.200)를 쓰는지 알 수 있다. 외부 방화벽·프록시 로그에서 이 서버의 트래픽을 찾을 때 기준 주소가 된다(NAT가 있다면 변환 후 주소도 확인).


6. 보안 관점

위치공격·위험점검
인터페이스무차별 모드(PROMISC) — 스니핑 도구 실행ip link에 PROMISC 플래그
라우팅기본 게이트웨이·경로 변경 → 트래픽 우회ip route 기준값과 비교
이름 해석/etc/hosts, /etc/resolv.conf 변조파일 무결성 감시 (22·30편)
방화벽규칙 삭제·서비스 중지46편
바인딩내부용 서비스(DB, Redis)가 0.0.0.0에 노출44편 ss -tlnp

7. SOC / 보안관제 활용

7-1. 네트워크 기준값(Baseline) 수집

{
  date; hostname
  ip -br addr; ip route
  cat /etc/resolv.conf /etc/hosts
  ss -tulnp                    # 44편
} > /root/baseline/net_$(hostname)_$(date +%F).txt

평소 상태를 저장해 두면, 침해가 의심될 때 diff(27·30편)로 무엇이 바뀌었는지 바로 확인할 수 있다.

7-2. 분석 흐름

[Alert]   방화벽: 10.0.0.200 → 203.0.113.50:4444 외부 연결 (야간)
   ↓
[호스트]  ss -tnp | grep 203.0.113.50 → 어떤 프로세스? (44편)
   ↓
[프로세스] PID → 실행 파일·부모·계정 (29·35편)
   ↓
[경로]    ip route get 203.0.113.50 → 정상 게이트웨이 경유 확인
   ↓
[판단]    외부 방화벽(밖)과 ss·ps(안)의 기록을 시각·IP·포트로 연결

8. 핵심 정리

  • L4(TCP/UDP) 이하는 커널 이, L7은 사용자 공간 프로그램이 처리한다.
  • 패킷 흐름: NIC → IP + netfilter(방화벽) → TCP/UDP(포트) → 소켓 → 프로세스.
  • ip addr(주소), ip route(경로), /etc/resolv.conf·/etc/hosts(이름)로 기본 구성을 확인한다.
  • 127.0.0.1 바인딩은 내부 전용, 0.0.0.0은 모든 인터페이스 노출이다.
  • 관제는 호스트 안(ss·ps·로그)과 밖(방화벽·IDS) 의 기록을 맞춰 보는 일이다.

9. 다음 글

다음 글 「42. IP / TCP / UDP / Port」 에서는 L3·L4를 자세히 본다. 실습 환경에서 캡처한 실제 TCP 3-way handshake 패킷, TCP 상태(LISTEN, ESTABLISHED, TIME_WAIT), UDP와의 차이, 그리고 잘 알려진 포트를 정리한다.


참고 자료

profile
코드에 숨겨진 위협을 읽고 AI로 보안의 미래를 설계합니다. 프론트엔드 개발 경험을 자산 삼아 더 견고하고 지능적인 보안 운영 시스템을 구축해 나가는 과정을 기록합니다

0개의 댓글