CentOS 방화벽 firewalld 이해하기
CentOS는 서버 운영체제로 널리 사용되며, 보안은 매우 중요한 고려 사항입니다. firewalld는 CentOS의 기본 방화벽 관리 도구로, 시스템을 보호하기 위한 첫 번째 방어선 역할을 합니다. 이 가이드에서는 firewalld의 기본 개념부터 설정 방법, 실생활 활용 사례까지 자세히 알아보겠습니다.
방화벽, 왜 중요할까요?
방화벽은 네트워크 트래픽을 검사하여 미리 정의된 규칙에 따라 허용하거나 차단하는 시스템입니다. 해커의 침입 시도, 악성 코드 감염, 데이터 유출 등 다양한 위협으로부터 시스템을 보호합니다. 방화벽이 없으면 서버는 인터넷에 무방비 상태로 노출되어 공격에 취약해집니다.
firewalld의 기본 개념
firewalld는 zone 기반으로 작동합니다. zone은 네트워크 환경에 따라 미리 정의된 규칙 집합입니다. 예를 들어, home zone은 개인 네트워크에 적합하고, public zone은 공용 네트워크에 적합합니다. 각 zone은 허용되는 서비스, 포트, 트래픽 등을 정의합니다. firewalld는 네트워크 인터페이스를 특정 zone에 할당하여 해당 인터페이스를 통해 들어오는 트래픽에 해당 zone의 규칙을 적용합니다.
firewalld 설정 시작하기
이제 firewalld를 설정하는 방법을 단계별로 살펴보겠습니다.
firewalld 상태 확인
가장 먼저 firewalld가 실행 중인지 확인해야 합니다. 다음 명령어를 사용하여 firewalld의 상태를 확인할 수 있습니다.
sudo systemctl status firewalld
만약 firewalld가 실행 중이지 않다면, 다음 명령어로 firewalld를 시작할 수 있습니다.
sudo systemctl start firewalld
부팅 시 자동으로 firewalld가 실행되도록 설정하려면 다음 명령어를 사용합니다.
sudo systemctl enable firewalld
기본 zone 확인 및 변경
firewalld의 기본 zone은 시스템이 시작될 때 활성화되는 zone입니다. 기본 zone을 확인하려면 다음 명령어를 사용합니다.
firewall-cmd --get-default-zone
기본 zone을 변경하려면 다음 명령어를 사용합니다. (예: public zone으로 변경)
sudo firewall-cmd --set-default-zone=public
변경 후에는 firewalld를 재시작하여 변경 사항을 적용해야 합니다.
sudo systemctl restart firewalld
zone 정보 확인
각 zone의 설정 정보를 확인하려면 다음 명령어를 사용합니다. (예: public zone 정보 확인)
firewall-cmd --zone=public --list-all
이 명령어는 public zone에 허용된 서비스, 포트, 소스 등을 보여줍니다.
firewalld 규칙 설정하기
firewalld의 핵심은 규칙을 설정하여 원하는 트래픽을 허용하거나 차단하는 것입니다.
서비스 허용
특정 서비스를 허용하려면 다음 명령어를 사용합니다. (예: HTTP 서비스 허용)
sudo firewall-cmd --zone=public --add-service=http --permanent
--permanent
옵션은 변경 사항을 영구적으로 저장합니다. 이 옵션 없이 명령어를 실행하면 시스템 재부팅 시 변경 사항이 사라집니다.
변경 사항을 적용하려면 firewalld를 재시작해야 합니다.
sudo firewall-cmd --reload
사용 가능한 서비스 목록을 확인하려면 다음 명령어를 사용합니다.
firewall-cmd --get-services
포트 허용
특정 포트를 허용하려면 다음 명령어를 사용합니다. (예: 8080 포트 허용, TCP 프로토콜 사용)
sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
UDP 프로토콜을 사용하려면 /tcp
대신 /udp
를 사용합니다.
변경 사항을 적용하려면 firewalld를 재시작해야 합니다.
sudo firewall-cmd --reload
소스 IP 주소 허용
특정 IP 주소에서 오는 트래픽을 허용하려면 다음 명령어를 사용합니다. (예: 192.168.1.100 IP 주소 허용)
sudo firewall-cmd --zone=public --add-source=192.168.1.100 --permanent
변경 사항을 적용하려면 firewalld를 재시작해야 합니다.
sudo firewall-cmd --reload
규칙 삭제
설정한 규칙을 삭제하려면 --add
옵션 대신 --remove
옵션을 사용합니다. (예: HTTP 서비스 제거)
sudo firewall-cmd --zone=public --remove-service=http --permanent
변경 사항을 적용하려면 firewalld를 재시작해야 합니다.
sudo firewall-cmd --reload
firewalld 실생활 활용 사례
firewalld는 다양한 상황에서 유용하게 활용될 수 있습니다.
- 웹 서버 보안: HTTP(80), HTTPS(443) 포트를 열어 웹 서버에 대한 접근을 허용하고, 불필요한 포트는 차단하여 보안을 강화할 수 있습니다.
- 데이터베이스 서버 보안: 데이터베이스 서버에 접속하는 특정 IP 주소만 허용하고, 다른 IP 주소에서의 접근은 차단하여 데이터 유출 위험을 줄일 수 있습니다.
- SSH 접근 제한: SSH 포트(22)를 특정 IP 주소 또는 네트워크에서만 허용하여 무차별 대입 공격을 방지할 수 있습니다.
- VPN 서버 보안: VPN 서버에 필요한 포트(예: 1194)를 열어 VPN 연결을 허용하고, 다른 포트는 차단하여 보안을 유지할 수 있습니다.
firewalld 고급 설정
firewalld는 더 복잡한 네트워크 환경에 맞게 고급 설정을 제공합니다.
Rich Rules
Rich Rules는 더 복잡한 규칙을 정의할 수 있는 기능입니다. 예를 들어, 특정 IP 주소에서 특정 포트로 오는 트래픽만 허용하는 규칙을 만들 수 있습니다.
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port port="8080" protocol="tcp" accept' --permanent
이 규칙은 192.168.1.100 IP 주소에서 8080 포트로 오는 TCP 트래픽만 허용합니다.
변경 사항을 적용하려면 firewalld를 재시작해야 합니다.
sudo firewall-cmd --reload
Direct Interface
Direct Interface는 firewalld 규칙을 직접 iptables에 추가하는 기능입니다. 이 기능은 firewalld에서 제공하지 않는 고급 기능을 사용해야 할 때 유용합니다. 하지만 Direct Interface를 사용하면 firewalld의 관리 기능을 사용하지 못할 수 있으므로 주의해야 합니다.
sudo firewall-cmd --direct --add-rule ipv4 filter INPUT 0 -p tcp --dport 80 -j ACCEPT
이 규칙은 80 포트로 오는 TCP 트래픽을 허용합니다.
Direct Interface 규칙은 firewalld를 재시작해도 유지됩니다.
firewalld 흔한 오해와 사실
- 오해: firewalld는 모든 공격을 막을 수 있다.
- 사실: firewalld는 시스템을 보호하는 중요한 도구이지만, 완벽한 보안을 보장하지는 않습니다. 다른 보안 조치와 함께 사용해야 합니다.
- 오해: firewalld는 복잡해서 사용하기 어렵다.
- 사실: firewalld는 zone 기반으로 작동하여 비교적 쉽게 규칙을 설정할 수 있습니다. 이 가이드를 통해 기본적인 사용법을 익힐 수 있습니다.
- 오해: firewalld는 시스템 성능을 저하시킨다.
- 사실: firewalld는 트래픽을 검사하므로 약간의 성능 저하가 있을 수 있지만, 대부분의 경우 무시할 만한 수준입니다.
firewalld 문제 해결
firewalld를 사용하면서 문제가 발생할 수 있습니다. 몇 가지 일반적인 문제와 해결 방법을 소개합니다.
- 문제: 방화벽 규칙을 설정했는데도 트래픽이 차단된다.
- 해결: zone이 올바르게 설정되었는지, 규칙이 올바르게 적용되었는지 확인합니다.
firewall-cmd --list-all
명령어를 사용하여 현재 설정된 규칙을 확인하고,firewall-cmd --check-config
명령어를 사용하여 설정 파일에 오류가 있는지 확인합니다. - 문제: firewalld가 시작되지 않는다.
- 해결:
journalctl -xe
명령어를 사용하여 오류 메시지를 확인합니다. 설정 파일에 오류가 있거나 다른 서비스와 충돌하는 경우 발생할 수 있습니다. - 문제: firewalld를 재시작한 후 규칙이 사라졌다.
- 해결:
--permanent
옵션을 사용하여 규칙을 영구적으로 저장했는지 확인합니다.
자주 묻는 질문
- firewalld와 iptables의 차이점은 무엇인가요?
- firewalld는 iptables를 기반으로 작동하는 방화벽 관리 도구입니다. firewalld는 zone 기반으로 규칙을 관리하여 iptables보다 사용하기 쉽고, 동적인 환경에 더 적합합니다.
- firewalld를 비활성화해도 되나요?
- 특별한 이유가 없다면 firewalld를 비활성화하지 않는 것이 좋습니다. firewalld는 시스템을 보호하는 중요한 역할을 합니다.
- firewalld 규칙을 백업할 수 있나요?
- firewalld 설정 파일은
/etc/firewalld
디렉토리에 저장됩니다. 이 디렉토리를 백업하면 firewalld 규칙을 백업할 수 있습니다.