iptables 실습 예제


[iptables 실습]  예제

0. 실습 준비

  • OS : Ubuntu / CentOS 등 리눅스

  • 권한 : root 또는 sudo 사용 가능

  • 패키지 설치 (Ubuntu 예시)

sudo apt update
sudo apt install iptables -y

주의: 실제 서비스 서버가 아니라, 테스트용 VM에서 실습하는 걸 추천합니다.


1. iptables 현재 상태 확인하기

먼저 지금 방화벽에 어떤 규칙이 있는지 확인해 봅니다.

sudo iptables -L -n -v
  • -L : 룰 리스트 보기(List)

  • -n : IP/포트를 숫자로 표시 (DNS 조회 X)

  • -v : 패킷/바이트 카운트까지 자세히 표시

OUTPUT 예시:

Chain INPUT (policy ACCEPT)
Chain FORWARD (policy ACCEPT)
Chain OUTPUT (policy ACCEPT)

아무 규칙이 없으면 기본 정책(policy)이 전부 ACCEPT 일 거예요.

✅ 정보보안기사 포인트
iptables에는 대표적으로 3개의 기본 체인이 있다.

  • INPUT : 내 컴퓨터로 들어오는 패킷

  • OUTPUT : 내 컴퓨터에서 나가는 패킷

  • FORWARD : 내 컴퓨터를 “경유”하는 패킷


2. 기본 정책을 DROP으로 바꾸고 SSH만 허용하기

목표:

  1. 기본적으로는 들어오는 트래픽을 모두 막고

  2. SSH(22번 포트)만 허용해 보기

2-1. 기존 규칙 삭제 (깨끗한 상태로)

sudo iptables -F
  • -F : 모든 체인의 룰을 지움(Flush)

2-2. 기본 정책 변경

sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT
  • INPUT / FORWARD : 기본은 차단(DROP)

  • OUTPUT : 내 컴에서 나가는 건 일단 허용(ACCEPT)

이 상태에서 SSH 규칙도 없으면 원격 접속이 끊길 수 있으니,
가능하면 직접 콘솔에서 실습하세요.

2-3. SSH(22/tcp) 허용 룰 추가

sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
  • -A INPUT : INPUT 체인 끝에 규칙 추가(Append)

  • -p tcp : TCP 프로토콜

  • --dport 22 : 목적지 포트 22 (SSH)

  • -j ACCEPT : 허용

2-4. 룰 확인

sudo iptables -L -n -v

INPUT 체인에 SSH 관련 룰이 하나 생긴 걸 볼 수 있습니다.

✅ 정보보안기사 포인트
iptables는 위에서 아래로 규칙을 검사하다가
조건에 맞는 첫 번째 규칙에서 동작(ACCEPT/DROP)을 결정하고 끝난다.


3. 예제 – ping(DNS ICMP) 막아보기

목표: 외부에서 내 서버로 오는 **ping 요청(ICMP echo-request)**을 차단

3-1. ICMP echo-request DROP 규칙 추가

sudo iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
  • -p icmp : ICMP 프로토콜

  • --icmp-type echo-request : ping 요청 타입

  • -j DROP : 차단

3-2. 테스트

다른 머신(또는 같은 네트워크의 다른 VM)에서:

ping -c 4 <서버_IP>
  • ping이 응답하지 않으면 성공

  • 하지만 SSH 접속은 여전히 가능해야 합니다 (22번 포트 허용 규칙 때문에)

✅ 정보보안기사 포인트

  • ICMP를 완전히 막으면 네트워크 진단이 어려워질 수 있음

  • 실무에서는 “모두 막는다”보다는 속도 제한, 특정 타입만 허용/차단 등으로 조정


4. 예제 – 특정 IP만 SSH 접속 허용하기

목표:

  • 내 PC IP(예: 203.0.113.10) 에서만 SSH 접속 허용

  • 나머지 IP는 모두 SSH 차단

4-1. 기존 SSH 허용 룰 삭제

현재 룰 번호 확인:

sudo iptables -L INPUT --line-numbers

예를 들어 SSH 룰이 1번이라고 나오면:

sudo iptables -D INPUT 1

4-2. “특정 IP 허용 → 나머지 DROP” 순서로 추가

# 1단계: 내 IP 허용
sudo iptables -A INPUT -p tcp -s 203.0.113.10 --dport 22 -j ACCEPT

# 2단계: 나머지 SSH 접속은 명시적으로 DROP
sudo iptables -A INPUT -p tcp --dport 22 -j DROP
  • -s : 출발지(source) IP 지정

  • 위 규칙 순서가 매우 중요합니다.
    먼저 허용, 그 다음 나머지 DROP.

✅ 정보보안기사 포인트
방화벽 정책 설계에서 화이트리스트(허용 목록) 방식은
“허용할 것만 명시, 나머지는 기본 차단”이라는 개념으로 자주 출제됨.


5. 규칙 저장 및 초기화 방법

5-1. 현재 규칙 저장(백업용)

sudo iptables-save > iptables-backup.txt
  • 나중에 동일 규칙을 다시 적용하려면:

sudo iptables-restore < iptables-backup.txt

5-2. 실습 후 완전히 초기화하고 기본 허용으로 돌리기

sudo iptables -F
sudo iptables -P INPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
sudo iptables -P OUTPUT ACCEPT

6. 요약

이번 글에서는 iptables를 이용해

  1. 현재 방화벽 상태를 확인하고,

  2. 기본 정책을 DROP으로 바꾼 뒤 SSH를 허용하고,

  3. ping(ICMP)을 차단하고,

  4. 특정 IP만 SSH 접속을 허용하는 규칙까지 실습해 보았습니다.

정보보안기사 시험에서 iptables는 “리눅스 방화벽”의 대표 예시로 자주 등장합니다.
체인(INPUT/OUTPUT/FORWARD), 정책(ACCEPT/DROP), 룰 구조와 평가 순서를
직접 실습해 보면 이론 공부가 훨씬 쉽게 느껴질 거예요.

댓글 쓰기

새 댓글을 작성할 수 없습니다.*

다음 이전