EC2 재시동 후 iptable 맵핑 정보 사라지는 현상 해결
개요
AWS EC2 인스턴스에서 포트 80으로 들어오는 HTTP 요청을 포트 8080으로 리다이렉트하는 작업 중 발생한 문제와 그 해결 과정을 다룹니다. 또한, 인스턴스 재시작 후 iptables 규칙이 유지되도록 설정하는 방법을 포함합니다.
문제가 발생한 상황
포트 80으로 들어오는 HTTP 요청을 포트 8080에서 실행 중인 애플리케이션으로 리다이렉트하려는 설정 작업 중, EC2 인스턴스를 중지하고 다시 시작한 후 iptables 규칙이 사라지는 문제가 발생했습니다. 이로 인해 리다이렉션 설정이 유지되지 않았습니다.
문제의 원인
EC2 인스턴스를 중지하고 다시 시작하면 iptables의 규칙이 휘발성 메모리에 저장되기 때문에 사라집니다. 이는 리눅스 시스템에서 iptables 규칙이 기본적으로 휘발성 메모리에 저장되기 때문에 발생합니다.
해당 문제의 원인이 발생한 이유
AWS EC2 인스턴스를 재부팅하거나 중지/시작하면 메모리가 초기화되기 때문에, 메모리에 저장된 iptables 규칙이 모두 사라집니다. 이로 인해 인스턴스를 다시 시작할 때마다 iptables 규칙을 수동으로 다시 설정해야 하는 불편함이 발생합니다.
문제를 해결하기 위한 방법
iptables 규칙을 영구적으로 저장하여 인스턴스를 재부팅하거나 다시 시작해도 규칙이 유지되도록 설정합니다. Ubuntu 22.04를 사용하고 있으므로, iptables-persistent
패키지를 설치하여 이를 해결합니다.
1. 운영 체제 정보 확인
uname -a
cat /etc/os-release
lsb_release -a
운영 체제는 Ubuntu 22.04이며, 커널 버전은 6.5.0-1017-aws였습니다.
2. iptables 규칙 추가
포트 80으로 들어오는 요청을 포트 8080으로 리다이렉트하는 규칙을 추가합니다.
추가 전, 반드시 ip addr 명령어를 이용하여 현재 적용해야 할 네트워크 인터페이스 명을 확인합니다.
저의 경우 당시, ens5 였습니다.
sudo iptables -t nat -A PREROUTING -i ens5 -p tcp --dport 80 -j REDIRECT --to-port 8080
3. iptables-persistent 패키지 설치
sudo apt-get update
sudo apt-get install iptables-persistent
설치 과정에서 규칙을 저장할지 묻는 메시지가 나타나면 'Yes'를 선택합니다.
4. 현재 iptables 규칙 저장
sudo netfilter-persistent save
또는
sudo sh -c "iptables-save > /etc/iptables/rules.v4"
5. 저장된 규칙 확인
cat /etc/iptables/rules.v4
결론
iptables 규칙을 영구적으로 저장하는 방법을 통해, EC2 인스턴스를 중지하고 다시 시작하더라도 포트 80에서 포트 8080으로의 리다이렉션 설정이 유지되도록 할 수 있었습니다. 이를 통해 서버가 재부팅되더라도 리다이렉션 설정이 안정적으로 유지됩니다.
느낀점
이번 작업을 통해 리눅스 서버 기동 이후 iptables와 같이 메모리에 설정 정보를 단순히 저장하고 디스크에 저장하지 않는 것들에 대해 알게 되었습니다. 이를 통해 중요한 설정 정보는 디스크에 영구적으로 저장하여 서버 재부팅 시에도 설정이 유지되도록 하는 것이 중요하다는 것을 깨달았습니다.
추가 정보: 디스크에 저장되지 않는 설정들
리눅스 서버에서 설정 정보가 휘발성 메모리에만 저장되는 몇 가지 다른 예는 다음과 같습니다:
- Routing Table:
- 네트워크 라우팅 테이블은
ip route
명령어로 설정되며, 서버 재부팅 시 초기화됩니다. 영구적으로 유지하려면 설정 파일에 저장해야 합니다.
- 네트워크 라우팅 테이블은
- Temporary File Systems (tmpfs):
/tmp
와 같은 임시 파일 시스템은 메모리 기반 파일 시스템으로, 재부팅 시 모든 데이터가 사라집니다.
- Sysctl 설정:
sysctl
을 통해 설정된 커널 매개변수는 재부팅 시 사라집니다. 이를 영구적으로 유지하려면/etc/sysctl.conf
파일에 설정을 추가해야 합니다.
- Firewall Rules (firewalld):
firewalld
를 사용하여 설정된 방화벽 규칙은 재부팅 시 사라질 수 있습니다. 영구적으로 유지하려면firewalld
의 설정 파일에 저장해야 합니다.
'여러가지 > 오류' 카테고리의 다른 글
[트러블슈팅] 80포트 요청을 8080포트로 리다이렉션하기(feat. AWS) (1) | 2024.06.16 |
---|---|
[트러블슈팅] Github Action을 이용한 CICD (0) | 2024.06.16 |
pyenv 실행 오류 (0) | 2024.03.10 |