PromleeBlog
sitemap
aboutMe

posting thumbnail
정보보안기사 - 1.13 리눅스 방화벽 iptables 정책 설정
Linux Firewall iptables Policy Configuration - InfoSec Engineer 1.13

📅

들어가기 전에 🔗

지금까지 우리는 시스템 내부의 취약점을 점검하고 악성코드를 방어하는 방법들을 배웠습니다.
하지만 가장 훌륭한 방어는 도둑이 집 안으로 들어오기 전에 대문에서 막아내는 것입니다.

리눅스 운영체제는 네트워크 커널 수준에서 패킷을 필터링할 수 있는 강력한 기본 방화벽을 내장하고 있습니다.
그 핵심 도구가 바로
iptables
(아이피테이블즈)입니다.
오늘은 서버에 들어오고 나가는 네트워크 트래픽을 내 마음대로 통제하기 위해, 방화벽의 뼈대를 이해하고 실제 실무에서 사용하는 정책(Rule)을 작성해 보겠습니다.

iptables의 구조: Table과 Chain 🔗

iptables
는 수많은 규칙들을 체계적으로 관리하기 위해 표(
Table
)와 사슬(
Chain
)이라는 구조를 사용합니다.
네트워크 패킷이 서버에 도착하면, 정해진 체인의 길을 따라 이동하며 각 테이블의 검사소를 거치게 됩니다.

4가지 Table (표) 🔗

5가지 Chain (사슬) 🔗

패킷의 이동 경로에 따라 5개의 체인으로 나뉩니다.
Filter
테이블을 기준으로 가장 많이 쓰이는 3가지를 기억해야 합니다.
이미지 제안:[외부 네트워크 -> PREROUTING -> INPUT -> 서버 내부 -> OUTPUT -> POSTROUTING -> 외부 네트워크로 이어지는 패킷 흐름 다이어그램]

핵심 명령어 옵션 완벽 정리 🔗

명령어 한 줄로 방화벽 규칙을 추가하거나 삭제할 수 있습니다.
자주 사용하는 핵심 옵션들의 의미를 정확히 알아야 합니다.

실무 정책 설정 실습 🔗

보안이 철저한 시스템은 기본적으로
모든 것을 차단(Blacklist)하고, 필요한 것만 허용(Whitelist)
하는 방식을 택합니다.
이 원칙에 따라 쉘 스크립트를 작성하여 방화벽을 구성해 보겠습니다.

1. 기본 정책(Default Policy) 설정 🔗

어떤 규칙에도 해당하지 않는 패킷은 모두 차단(
DROP
)하도록 기본 정책을 설정합니다.
iptables_default.sh
 # !/bin/bash
 
 # 1. 기존에 설정된 모든 규칙을 초기화(Flush)합니다.
sudo iptables -F
 
 # 2. 들어오는 패킷(INPUT)의 기본 정책을 모두 버림(DROP)으로 설정합니다.
sudo iptables -P INPUT DROP
 
 # 3. 통과하는 패킷(FORWARD)의 기본 정책도 버림으로 설정합니다.
sudo iptables -P FORWARD DROP
 
 # 4. 나가는 패킷(OUTPUT)은 편의를 위해 보통 허용(ACCEPT)으로 둡니다.
sudo iptables -P OUTPUT ACCEPT
🖐️
이 스크립트를 실행하는 순간, 외부에서 들어오는 모든 접속(SSH 포함)이 끊어질 수 있으므로 콘솔 환경에서 주의하여 작업해야 합니다.

2. 특정 서비스 및 IP 허용/차단 룰 작성 🔗

기본 대문이 잠겼으니, 정상적인 사용자들을 위해 작은 문을 열어주고 악성 IP는 명시적으로 차단해 보겠습니다.
iptables_rules.sh
#!/bin/bash
 
 # [상황 1] 로컬 루프백(localhost) 통신은 무조건 허용합니다.
 # 시스템 내부 프로세스 간의 통신을 위해 필수입니다. (-i: input interface)
sudo iptables -A INPUT -i lo -j ACCEPT
 
 # [상황 2] 웹 서비스(HTTP: 80, HTTPS: 443) 포트를 외부로 개방합니다.
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
 
 # [상황 3] 관리자 접속을 위한 SSH(22) 포트를 허용합니다.
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
 
 # [상황 4] 침해 사고가 발생했던 특정 해커의 IP(203.0.113.50)를 영구 차단합니다.
 # -s 옵션으로 출발지를 지정하고 DROP 처리합니다.
sudo iptables -A INPUT -s 203.0.113.50 -j DROP

규칙의 순서 (매우 중요) 🔗

iptables
는 위에서부터 아래로 순서대로 규칙을 검사합니다.
만약 맨 위에 "모든 접근 허용"을 적어두고, 그 아래에 "특정 IP 차단"을 적는다면, 이미 위에서 허용되었기 때문에 아래 규칙은 무시됩니다.
따라서
세밀하고 구체적인 규칙(차단 등)을 먼저 배치하고, 포괄적인 규칙을 나중에 배치
하는 것이 정석입니다.

결론 🔗

오늘은 리눅스 서버의 철벽 수문장인 방화벽 정책 설정 방법에 대해 알아보았습니다.
이것으로
시스템 보안
시리즈의 모든 과정을 마칩니다.
디렉토리 구조와 권한부터 악성코드, 그리고 방화벽까지 시스템을 안전하게 지키기 위한 핵심 원리들을 잊지 마시고, 실무 환경에서 시스템을 굳건히 방어해 내시길 바랍니다.

참고 🔗