nftables Gateway Egress 자동 로드 가이드¶
Gateway 서버의 nftables egress 정책을
시스템 부팅 시 자동으로 로드하는 방법을 정의함.
본 서버는 firewalld 와 nftables 를 역할 분리 방식으로 병행 운용함.
firewalld→ 인바운드 정책 관리nftables→ 내부망 egress 정책 관리
따라서 nftables.service 로 전체 ruleset 을 일괄 관리하지 않고,
Gateway 전용 egress rule 파일만 systemd 서비스로 명시적으로 로드하는 방식을 사용함.
1. 목적¶
서버 재부팅 이후에도
/etc/nftables/gateway-egress.nft 정책이 자동 적용되도록 함.
즉 다음을 보장함.
- 부팅 후 수동으로
nft -f를 다시 실행하지 않아도 됨 - firewalld 와 역할이 충돌하지 않음
- Gateway 전용 egress 정책만 독립적으로 로드 가능함
- 재적용, 점검, 롤백이 명확함
2. 전제 조건¶
다음이 이미 완료된 상태를 전제로 함.
firewalld설치 및 활성화 완료/etc/nftables/gateway-egress.nft작성 완료sudo nft -c -f /etc/nftables/gateway-egress.nft문법 검증 완료sudo nft -f /etc/nftables/gateway-egress.nft수동 적용 및 테스트 완료
관련 문서:
3. 운영 원칙¶
Gateway 서버에서는 다음 원칙을 사용함.
firewalld.service는 활성화 유지nftables.service는 사용하지 않음- Gateway 전용 nftables rule 은 별도 파일로 관리함
- systemd oneshot service 로 해당 rule 파일만 로드함
- rule 수정 후에는 반드시 문법 검증 후 재시작함
- allowlist 는 활성 Nginx
proxy_pass대상 기준으로만 유지함
본 방식은 firewalld 와 nftables 전체 서비스 간 충돌 가능성을 줄이고,
Gateway egress 정책만 독립적으로 관리하기 위한 운영 방식임. 운영 난이도가 높은 고급(Advanced) 패턴이므로
표준 환경에서는 firewalld 단독 또는 nftables 단독 운용이 일반적으로 더 단순함.
4. rule 파일 위치¶
자동 로드 대상 파일:
/etc/nftables/gateway-egress.nft
파일 존재 확인:
ls -l /etc/nftables/gateway-egress.nft
문법 검증:
sudo nft -c -f /etc/nftables/gateway-egress.nft
정상일 경우 오류 메시지 없이 종료됨.
5. systemd 서비스 파일 생성¶
서비스 파일 생성:
sudo vi /etc/systemd/system/nftables-gateway-egress.service
내용:
[Unit]
Description=Load nftables Gateway Egress Rules
After=network-online.target firewalld.service
Wants=network-online.target
Requires=firewalld.service
[Service]
Type=oneshot
ExecStartPre=/usr/sbin/nft -c -f /etc/nftables/gateway-egress.nft
ExecStartPre=-/usr/sbin/nft delete table inet gateway_egress
ExecStart=/usr/sbin/nft -f /etc/nftables/gateway-egress.nft
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
6. 서비스 파일 설명¶
[Unit]¶
After=network-online.target firewalld.service- 네트워크 활성화 및 firewalld 시작 이후 실행되도록 함
Wants=network-online.target- 네트워크 온라인 상태를 함께 요청함
Requires=firewalld.service- firewalld 서비스가 동작 중인 상태를 전제로 함
[Service]¶
Type=oneshot- 한 번 실행 후 종료되는 서비스임
ExecStartPre=/usr/sbin/nft -c -f /etc/nftables/gateway-egress.nft- 적용 전 문법 검증을 먼저 수행함
ExecStartPre=-/usr/sbin/nft delete table inet gateway_egress- 기존 table 이 있으면 삭제하고, 없어도 오류로 처리하지 않음
ExecStart=/usr/sbin/nft -f /etc/nftables/gateway-egress.nft- Gateway egress rule 파일을 로드함
RemainAfterExit=yes- 실행 후에도 서비스가 active 상태로 표시되도록 함
[Install]¶
WantedBy=multi-user.target- 일반 운영 모드 부팅 시 자동 실행됨
7. systemd 반영¶
서비스 파일 작성 후 systemd 설정 반영:
sudo systemctl daemon-reload
8. 서비스 활성화¶
부팅 시 자동 실행되도록 등록:
sudo systemctl enable nftables-gateway-egress.service
9. 즉시 실행¶
재부팅 없이 현재 세션에서 바로 실행:
sudo systemctl start nftables-gateway-egress.service
10. 서비스 상태 확인¶
sudo systemctl status nftables-gateway-egress.service
정상 상태 예시:
active (exited)
이는 oneshot 서비스가 정상 실행된 상태를 의미함.
11. 규칙 적용 확인¶
Gateway egress table 이 정상 로드되었는지 확인:
sudo nft list table inet gateway_egress
전체 ruleset 확인:
sudo nft list ruleset
특히 다음 항목 존재 여부를 확인함.
table inet firewalldtable inet gateway_egress
12. 재부팅 후 확인¶
자동 로드 검증을 위해 재부팅 후 다시 확인함.
재부팅:
sudo reboot
부팅 후 확인:
sudo systemctl status nftables-gateway-egress.service
sudo nft list table inet gateway_egress
정상일 경우:
- 서비스 상태:
active (exited) gateway_egresstable 존재
13. firewalld reload 이후 표준 절차¶
firewalld reload 는 커스텀 nftables table 에 영향을 줄 수 있으므로
reload 직후 아래 절차를 표준으로 사용함.
sudo firewall-cmd --reload
sudo systemctl restart nftables-gateway-egress.service
sudo nft list table inet gateway_egress
운영 기준:
firewall-cmd --reload실행 후에는 반드시 커스텀 서비스 재시작- 재시작 후
gateway_egresstable 존재 여부 확인
14. 규칙 수정 후 재적용 절차¶
/etc/nftables/gateway-egress.nft 수정 후에는 아래 순서로 반영함.
1. Nginx proxy_pass 기준 대조¶
sudo nginx -T 2>/dev/null | grep -n proxy_pass
위 결과와 /etc/nftables/gateway-egress.nft 의 allowed_backend_tcp 가
일치하는지 먼저 확인함.
이 절차가 필요한 이유는 다음과 같음.
- Nginx에만 추가되고 nftables 에 누락된 backend 는 실제 서비스 장애로 이어질 수 있음
- nftables 에만 남아 있는 오래된 backend 항목은 불필요한 내부 접근 허용이 됨
- 자동 로드가 설정되어 있어도 allowlist 자체가 잘못되면 부팅 후 동일한 오설정이 반복 적용됨
2. 문법 검증¶
sudo nft -c -f /etc/nftables/gateway-egress.nft
3. 서비스 재시작¶
sudo systemctl restart nftables-gateway-egress.service
4. 적용 확인¶
sudo nft list table inet gateway_egress
15. 수동 적용과 systemd 적용 차이¶
다음 두 방식은 목적이 다름.
수동 적용¶
sudo nft -f /etc/nftables/gateway-egress.nft
- 현재 세션에 즉시 적용
- 재부팅 후 유지 보장 안 됨
- 테스트 및 임시 반영 용도
systemd 적용¶
sudo systemctl start nftables-gateway-egress.service
- 현재 즉시 적용 가능
- 부팅 시 자동 실행됨
- 운영 표준 방식
운영 서버에서는 systemd 서비스 방식을 기준으로 사용함.
16. 비활성화 및 롤백¶
1. 자동 로드 비활성화¶
sudo systemctl disable nftables-gateway-egress.service
2. 현재 규칙 제거¶
sudo nft delete table inet gateway_egress
3. 서비스 중지¶
sudo systemctl stop nftables-gateway-egress.service
4. 필요 시 서비스 파일 삭제¶
sudo rm -f /etc/systemd/system/nftables-gateway-egress.service
sudo systemctl daemon-reload
17. 운영 시 주의사항¶
nftables.service와 본 커스텀 oneshot 서비스를 동시에 정책 관리 용도로 사용하지 않음- rule 수정 후에는 반드시
nft -c -f로 문법 검증 후 반영함 - firewalld reload 직후에는
nftables-gateway-egress.service를 재시작하고 table 존재를 확인함 - backend 추가/삭제 시 Nginx
proxy_pass와 nftables allowlist 를 함께 반영함 - 운영 초기에는 13-nftables Gateway Egress 통제 가이드 기준으로 log 모드 검증 후 drop 모드로 전환함
18. 점검 명령¶
sudo systemctl status nftables-gateway-egress.service
sudo systemctl is-enabled nftables-gateway-egress.service
sudo nft list table inet gateway_egress
sudo nft list ruleset
목적¶
- 서비스 활성화 여부 확인
- 서비스 상태 확인
- gateway egress table 존재 여부 확인
- 전체 nftables 규칙 확인
19. 운영 정책 요약¶
Gateway 서버에서는 다음 방식으로 운영함.
firewalld→ 인바운드 방화벽nftables→ 내부망 egress allowlist/etc/nftables/gateway-egress.nft→ 정책 파일nftables-gateway-egress.service→ 부팅 시 자동 로드 담당
즉, 운영 표준은 다음과 같음.
gateway-egress.nft수정- 문법 검증
- systemd 서비스 재시작
- 규칙 적용 확인
20. 참고 사항¶
oneshot 서비스는 정상 실행 후에도 프로세스가 계속 남아있지 않으므로
active (exited) 상태가 정상임.
즉 아래 상태는 오류가 아님.
Active: active (exited)
21. 참고 문서¶
- 06-Firewalld 설정 가이드
- 13-nftables Gateway Egress 통제 가이드
- systemd unit 운영 방식
- nftables rule file 로드 방식