[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만 허용하기
목표:
-
기본적으로는 들어오는 트래픽을 모두 막고
-
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를 이용해
현재 방화벽 상태를 확인하고,
기본 정책을 DROP으로 바꾼 뒤 SSH를 허용하고,
ping(ICMP)을 차단하고,
특정 IP만 SSH 접속을 허용하는 규칙까지 실습해 보았습니다.
정보보안기사 시험에서 iptables는 “리눅스 방화벽”의 대표 예시로 자주 등장합니다.
체인(INPUT/OUTPUT/FORWARD), 정책(ACCEPT/DROP), 룰 구조와 평가 순서를
직접 실습해 보면 이론 공부가 훨씬 쉽게 느껴질 거예요.