1. AWS CLI v2 설치 (권장 방식)
Terraform 이후에도 AWS CLI는 계속 필요하다.
Ubuntu 기준, 가장 안정적인 설치 방법은 AWS 공식 설치 파일(v2) 로 설치하는것이다.
필수 유틸리티 :
# apt update
# apt install -y curl unzip
AWS CLI v2 다운로드 :
# cd /usr/local/src
# curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o awscliv2.zip
압축 해제 :
# unzip awscliv2.zip
설치 :
# ./aws/install
확인 :
# aws --version
aws-cli/2.x.x형태로 버전이 나오면 정상이다.

apt install awscli 방식은 간편하지만 구버전이 설치될 가능성이 높다.
실습 환경에서는 v2 사용을 권장한다.
2. NAT Instance 필수 AWS 설정 확인
이 단계는 콘솔에서 반드시 직접 확인해야 한다.
2.1. Source / Destination Check 비활성화
NAT Instance는 패킷을 “중계”해야 하므로 이 옵션이 켜져 있으면 안 된다.
- EC2 → NAT Instance 선택
- Actions → Networking → Change source/destination check
- Stop : 체크 활성화 확인


2-2. Private Subnet 라우팅 확인
Private Subnet의 라우트 테이블에서 다음이 보장되어야 한다.
0.0.0.0/0→ NAT Instance ENI
이게 안 되어 있으면 이후 설정은 전부 의미 없다.

3. NAT Instance OS 초기 세팅
NAT Instance에 SSH 접속 후 기본 패키지를 설치한다.
# apt update
# apt install -y jq curl tcpdump ethtool iptables-persistent
tcpdump: 트래픽 흐름 확인용iptables-persistent: rule 영구 저장용
: Suricata 인라인 구성을 위해 필수
4. IP Forwarding 활성화 (필수)
이 설정이 없으면 NAT 자체가 동작하지 않는다.
즉시 반영
# sysctl -w net.ipv4.ip_forward=1
영구 반영
# echo 'net.ipv4.ip_forward=1' | tee /etc/sysctl.d/99-ipforward.conf
# sysctl --system
확인:
# sysctl net.ipv4.ip_forward

5. rp_filter 완화 (AWS 환경에서 중요)
AWS에서 NAT + 포워딩 구조를 쓰면
Reverse Path Filter(rp_filter) 때문에 정상 패킷이 드랍되는 경우가 있다.
실습 및 인라인 IPS 환경에서는 loose 모드가 안전하다.
rp_filter 관련 설정값 :
0 (No Validation)
- 검사 안 함.
- 들어오는 패킷의 소스 IP가 위조되었든 말든 신경 쓰지 않습니다. 보안상 좋지 않아 잘 쓰지 않습니다.
1 (Strict Mode) – 엄격 모드
- “들어온 문으로 나갈 수 있어야 한다.”
- 패킷이
eth0으로 들어왔다면, 그 IP로 응답을 보낼 때도 반드시eth0을 통해 나가는 경로여야만 정상으로 간주. - 문제점: NAT이나 IPS 같은 복잡한 네트워크 환경에서는 패킷이 들어오는 경로와 나가는 경로가 다를 수 있음(비대칭 라우팅). 이때 Strict 모드(1)는 이 패킷을 “위조된 패킷(Spoofing)”으로 오해하고 패킷을 버림.(Drop).
2 (Loose Mode) – 느슨한 모드 (권장)
- “어디로든 갈 수만 있으면 된다.”
- 패킷이
eth0으로 들어왔는데, 응답을 보낼 때eth1로 나가는 경로라도 상관없음.
그냥 “우리 라우팅 테이블에 이 IP로 가는 길(Route)이 있기만 하면” 정상으로 통과시킴. - 왜 쓰나? AWS에서 NAT 인스턴스나 IPS를 구성하면 트래픽 흐름이 복잡해서 비대칭 경로가 자주 생김. 그래서 숫자 2를 설정해서 패킷 드랍을 막음.
# cat <<'EOF' | tee /etc/sysctl.d/99-rpfilter.conf
net.ipv4.conf.all.rp_filter=2
net.ipv4.conf.default.rp_filter=2
EOF
# sysctl --system
6. iptables: NAT + Inline(IDS/IPS) 트래픽 경로 준비
이 단계가 이번 편의 핵심이다.
목표
- NAT(MASQUERADE)로 Private Subnet 인터넷 통신 유지
- FORWARD 체인에 NFQUEUE 훅을 걸어 Suricata 인라인 처리 가능 상태로 만듦
6.1 변수 설정
Private Subnet CIDR (Terraform에서 생성한 값) :
# PRIVATE_CIDR="10.20.1.0/24"
외부 인터페이스 자동 감지 (보통 eth0) :
# EXT_IF="$(ip route get 1.1.1.1 | awk '{for(i=1;i<=NF;i++) if($i=="dev"){print $(i+1); exit}}')"
echo "PRIVATE_CIDR=$PRIVATE_CIDR"
echo "EXT_IF=$EXT_IF"
6.2 NAT + 기본 포워딩 룰
NAT rule 적용 :
# iptables -t nat -A POSTROUTING -s "$PRIVATE_CIDR" -o "$EXT_IF" -j MASQUERADE
Forward 허용 :
# iptables -A FORWARD -s "$PRIVATE_CIDR" -j ACCEPT
# iptables -A FORWARD -d "$PRIVATE_CIDR" -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
여기까지만 진행해도 일반 NAT Instance로서는 정상 동작한다.
6.3 Suricata Inline용 NFQUEUE 훅 추가
아직 Suricata는 설치하지 않는다.
단, 패킷이 Suricata를 거칠 수 있는 경로는 미리 만들어 둔다.
중요 포인트:
- 처음엔 IDS(탐지) 용도
- Suricata 다운 시 장애 방지 →
--queue-bypass필수
Private → Internet :
# iptables -I FORWARD 1 -s "$PRIVATE_CIDR" -j NFQUEUE --queue-num 0 --queue-bypass
Internet → Private (응답 트래픽) :
# iptables -I FORWARD 2 -d "$PRIVATE_CIDR" -j NFQUEUE --queue-num 0 --queue-bypass
Internet HTTP -> Private HTTP (응답 트래픽) :
# iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 10.20.1.87:80 #private target web 서버 IP 적용
6.4 Rule 확인
# iptables -vnL FORWARD --line-numbers
# iptables -t nat -vnL POSTROUTING --line-numbers
# iptables -t nat -L PREROUTING -n -v
NFQUEUE 룰이 FORWARD 상단에 있는지 반드시 확인한다.

6.5 iptables 영구 저장
# netfilter-persistent save
재부팅 후에도 유지된다.
7. 여기까지의 상태 정리
현재 시점에서 NAT Instance는 다음 상태다.
- Private Subnet → Internet 통신 정상
- 모든 포워딩 트래픽이 NFQUEUE(0번) 를 거침
- Suricata가 없어도 트래픽은 통과 (
queue-bypass) - Inline IPS/IDS 투입 준비 완료
다음 편 예고 (3편)
다음 편부터 본격적으로 Suricata를 올린다.
- Suricata Inline 모드(NFQUEUE) 설치 및 관련 설정
🛠 마지막 수정일: 2025.12.19
ⓒ 2025 엉뚱한 녀석의 블로그 [quirky guy's Blog]. All rights reserved. Unauthorized copying or redistribution of the text and images is prohibited. When sharing, please include the original source link.
💡 도움이 필요하신가요?
Zabbix, Kubernetes, 그리고 다양한 오픈소스 인프라 환경에 대한 구축, 운영, 최적화, 장애 분석,
광고 및 협업 제안이 필요하다면 언제든 편하게 연락 주세요.
📧 Contact: jikimy75@gmail.com
💼 Service: 구축 대행 | 성능 튜닝 | 장애 분석 컨설팅
📖 E-BooK [PDF] 전자책 (Gumroad):
Zabbix 엔터프라이즈 최적화 핸드북
블로그에서 다룬 Zabbix 관련 글들을 기반으로 실무 중심의 지침서로 재구성했습니다.
운영 환경에서 바로 적용할 수 있는 최적화·트러블슈팅 노하우까지 모두 포함되어 있습니다.
💡 Need Professional Support?
If you need deployment, optimization, or troubleshooting support for Zabbix, Kubernetes,
or any other open-source infrastructure in your production environment, or if you are interested in
sponsorships, ads, or technical collaboration, feel free to contact me anytime.
📧 Email: jikimy75@gmail.com
💼 Services: Deployment Support | Performance Tuning | Incident Analysis Consulting
📖 PDF eBook (Gumroad):
Zabbix Enterprise Optimization Handbook
A single, production-ready PDF that compiles my in-depth Zabbix and Kubernetes monitoring guides.
답글 남기기
댓글을 달기 위해서는 로그인해야합니다.