리눅스 서버에서 웹 애플리케이션을 운영하려면 보안을 강화하기 위해 방화벽을 설정해야 합니다. 방화벽은 외부에서의 불법적인 접근을 차단하고, 웹 애플리케이션에 대한 보호를 제공하는 중요한 요소입니다. 이번 글에서는 리눅스 서버에 웹 애플리케이션 방화벽을 설정하는 방법을 소개하겠습니다.
1. iptables 사용하기
리눅스에서 가장 일반적으로 사용되는 방화벽 도구는 iptables
입니다. iptables
를 사용하여 방화벽을 구성하려면 다음 명령을 사용합니다.
sudo iptables [옵션] [매개변수]
2. 방화벽 설정 기본 개념
2.1. 입력, 출력, 포워딩 체인
iptables
는 다음과 같은 3가지 체인에 대한 규칙을 관리합니다.
- INPUT: 들어오는 패킷에 대한 처리 규칙을 관리합니다.
- OUTPUT: 나가는 패킷에 대한 처리 규칙을 관리합니다.
- FORWARD: 다른 호스트로 포워딩되는 패킷에 대한 처리 규칙을 관리합니다.
2.2. 허용, 거부 규칙
방화벽에는 패킷을 허용하거나 거부하는 규칙을 지정할 수 있습니다. 일반적으로 웹 애플리케이션을 운영할 때는 다음과 같은 규칙을 고려해야 합니다.
- INPUT: HTTP(포트 80)와 HTTPS(포트 443) 요청에 대한 입력 규칙 허용
- OUTPUT: HTTP(포트 80)와 HTTPS(포트 443) 요청에 대한 출력 규칙 허용
- FORWARD: 포트 포워딩에 따른 처리 규칙 허용
3. 방화벽 구성하기
3.1. HTTP/HTTPS 요청 허용
HTTP(포트 80)와 HTTPS(포트 443) 요청을 허용하기 위해 다음 명령을 실행합니다.
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 443 -j ACCEPT
3.2. SSH 접근 허용
SSH를 통한 원격 접속을 허용하려면 다음 명령을 실행합니다.
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
3.3. 기타 설정
웹 애플리케이션 운영에 따라 추가적인 설정이 필요할 수 있습니다. 예를 들어, 특정 IP 주소나 서브넷으로부터의 접근을 허용하거나 거부할 수 있습니다. 이 경우 -s
옵션을 사용하여 소스 IP를 지정합니다.
# 192.168.0.100 IP 주소로부터의 접근을 허용
sudo iptables -A INPUT -p tcp -s 192.168.0.100 -j ACCEPT
# 192.168.0.0/24 서브넷으로부터의 접근을 거부
sudo iptables -A INPUT -p tcp -s 192.168.0.0/24 -j DROP
4. 방화벽 상태 확인
설정한 방화벽 규칙을 확인하려면 다음 명령을 사용합니다.
sudo iptables -L
5. 방화벽 설정 영구 저장
iptables
로 설정한 방화벽 규칙은 시스템 재시작 시 초기화됩니다. 따라서 영구적으로 설정을 유지하려면 설정을 저장해야 합니다.
5.1. CentOS/RHEL
sudo service iptables save
5.2. Ubuntu/Debian
sudo apt-get install iptables-persistent
sudo service netfilter-persistent save
마무리
이제 리눅스 웹 애플리케이션을 운영하기 위한 방화벽 설정을 할 수 있는 기본적인 개념과 명령어를 알아보았습니다. 특정 웹 애플리케이션에 따라 추가적인 설정이 필요할 수 있으니, 실제 환경에 맞게 설정해야 합니다. 방화벽 설정을 통해 웹 애플리케이션의 보안을 강화하고 외부 공격으로부터 안전하게 유지할 수 있습니다.