소개
이전 실습에서는 모든 사용자에게 "문"(포트) 을 열고 닫았습니다. 그렇다면 친구에게만 문을 열거나, 이미 알고 있는 문제 사용자를 대상으로만 문을 잠그고 싶다면 어떻게 해야 할까요?
이때 Rich Rules를 사용합니다. Rich Rules 를 이용하면 서비스를 전체적으로 열거나 닫는 데 그치지 않고, 소스 주소와 일치시키거나 로그를 남기거나 특정 트래픽을 거부하는 등 더 세부적인 정책을 표현할 수 있습니다.
실제 방화벽 정책은 조건에 따라 동작하는 경우가 많기 때문에 Rich Rules 가 중요합니다. 보안 결정은 단순히 "포트가 열려 있음" 또는 "포트가 닫혀 있음"으로 끝나지 않습니다.
실습 환경 참고: 웹 터미널에서 실수로 접속이 차단되는 일을 방지하기 위해 기본적으로 trusted zone 을 사용합니다. 따라서 명시적으로 차단하지 않는 한 모든 트래픽이 허용됩니다. 실제 운영 환경에서는 public 또는 drop처럼 더 제한적인 zone 을 사용합니다.
이 실습에서는 다음 방법을 배웁니다.
- 특정 사용자 차단: 특정 IP 주소에서 들어오는 연결을 거부합니다.
- 기록 남기기: 접속을 시도한 사용자를 확인할 수 있도록 시도 내역을 기록합니다.
- 액세스 제한: 특정 네트워크에서만 원격 제어 (SSH) 를 허용하도록 규칙을 구성합니다.
- 감사: 검토할 수 있도록 규칙을 파일에 저장합니다.
특정 IP 차단
이 단계에서는 먼저 특정 악성 사용자를 차단하는 방법을 배웁니다. 192.168.1.100 컴퓨터가 사용자를 해킹하려 한다고 가정하겠습니다. 이 컴퓨터의 접속을 완전히 차단하려고 합니다.
이를 위해 "Rich Rule"을 사용합니다. 기본 zone 이 모든 트래픽을 허용하는 trusted이더라도 이 IP 에 대한 특정 Reject 규칙이 우선 적용됩니다.
실제 방화벽 정책은 조건에 따라 동작하는 경우가 많으므로 Rich Rules 가 중요합니다. 소스 주소, 서비스, 로깅 필요 여부 또는 단순한 열기·닫기 명령으로는 표현하기 어려운 다른 조건에 따라 서로 다르게 처리할 수 있습니다.
구문은 문장을 만드는 것과 비슷합니다. rule family="ipv4" source address="192.168.1.100" reject
다음 명령을 실행해 이 규칙을 영구적으로 추가합니다.
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" reject'
이 "문장"을 구성 요소별로 살펴보겠습니다.
rule family="ipv4": 표준 IP 주소를 대상으로 한다는 뜻입니다.source address="...": 악성 사용자의 주소입니다.reject: 수행할 동작입니다.
Reject 와 Drop 의 차이:
- Reject는 정중한 방식입니다. 전송자에게 "접속할 수 없습니다"라는 응답을 보냅니다.
- Drop은 무시하는 방식입니다. 컴퓨터가 존재하지 않는 것처럼 전송자를 완전히 무시합니다.
둘 중 무엇을 선택할지는 단순한 스타일의 문제가 아닙니다. reject는 정상적인 클라이언트에 더 빠르게 피드백을 제공하고 문제를 더 쉽게 진단할 수 있습니다. 반면 drop은 공격자에게 노출되는 정보를 줄일 수 있지만 시간 초과까지 더 오래 걸릴 수 있습니다.
--permanent를 사용했으므로 규칙은 저장되었지만 아직 활성화되지는 않았습니다. 방화벽을 다시 로드해 규칙을 적용합니다.
sudo firewall-cmd --reload
이제 규칙이 존재하는지 확인합니다.
sudo firewall-cmd --list-rich-rules
새로 추가한 규칙이 목록에 표시되어야 합니다.
삭제된 패킷 기록
이 단계에서는 단순히 차단하는 것에 더해 때로는 증거도 필요하다는 점을 살펴봅니다. 규칙에 "logging"을 추가하면 해당 규칙이 실행될 때마다 기록하는 보안 카메라와 같은 기능을 사용할 수 있습니다.
필터링과 로깅을 함께 사용하는 방식은 보안 운영에서 일반적입니다. 트래픽을 차단하면 시스템을 보호할 수 있고, 로그를 남기면 나중에 조사할 증거가 만들어집니다.
이번에는 다른 IP 인 10.0.0.5를 차단하되, 거부하기 전에 시도 내역을 기록하겠습니다.
다음 명령을 실행합니다.
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.0.0.5" log prefix="BLOCKED_IP: " level="info" reject'
새로 추가된 내용은 무엇일까요?
log: 카메라를 켭니다.prefix="BLOCKED_IP: ": 시스템 로그에 기록할 때 각 줄을 이 텍스트로 시작합니다. 나중에 검색 도구를 사용해 이 이벤트를 쉽게 찾을 수 있습니다.
변경 사항을 적용합니다.
sudo firewall-cmd --reload
작업 결과를 확인합니다.
sudo firewall-cmd --list-rich-rules
이제 두 개의 규칙이 표시되어야 합니다. 첫 번째는 단순 거부 규칙이고, 두 번째는 기록 후 거부하는 규칙입니다.
서비스 액세스 제한
이 단계에서는 보안을 강화한 환경에서 모든 위치의 SSH 를 차단하고 VPN 처럼 신뢰할 수 있는 네트워크에서만 SSH 를 허용하는 경우를 살펴봅니다.
교육용 참고: 연결을 유지하기 위해 trusted zone 을 사용하고 있으므로 이 단계는 일부 형식적인 구성입니다. 모든 트래픽이 이미 허용된 상태에서 "Allow" 규칙을 추가해도 실제 동작은 달라지지 않습니다. 그러나 public 또는 drop처럼 제한적인 zone 을 사용할 때는 이 구문을 이해하는 것이 중요합니다.
이번에는 "소스가 192.168.0.0/24인 경우에만 SSH 를 허용한다"는 규칙을 만듭니다.
이는 네트워크 정책에서 최소 권한 원칙을 보여 주는 좋은 예입니다. 관리 액세스를 전체 인터넷에 공개하는 대신, 서버를 정상적으로 관리해야 하는 네트워크로 범위를 좁힙니다.
먼저 일반 SSH 서비스를 제거합니다.
sudo firewall-cmd --permanent --remove-service=ssh
참고: Warning: NOT_ENABLED: ssh와 같은 경고가 표시될 수 있습니다. 이는 정상적인 예상 동작입니다. 기본 zone 인 trusted는 기본적으로 모든 트래픽을 허용하지만 특정 서비스가 활성화된 상태로 등록되어 있지는 않습니다. 따라서 명시적으로 등록되지 않은 서비스를 제거하려 하면 이 무해한 경고가 표시됩니다.
그런 다음 서브넷에 대한 특정 Rich Rule 을 추가합니다.
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.0.0/24" service name="ssh" accept'
방화벽을 다시 로드해 변경 사항을 활성화합니다.
sudo firewall-cmd --reload
이제 확인합니다. 먼저 서비스 목록을 확인합니다.
sudo firewall-cmd --list-services
여기에는 ssh가 표시되면 안 됩니다. 일반 서비스 목록에서 제거했기 때문입니다.
다음으로 Rich Rules 를 확인합니다.
sudo firewall-cmd --list-rich-rules
지정한 소스에서 service name="ssh"를 허용하는 규칙이 표시되어야 합니다.
규칙 감사
이 단계에서는 운영 환경에서 방화벽 규칙을 최종적으로 감사하고 세션을 종료하기 전에 백업하는 모범 사례를 살펴봅니다. 이렇게 하면 규칙이 올바른 순서로 적용되었는지 확인할 수 있고, 복구에 사용할 파일도 확보할 수 있습니다.
이 단계에서는 감사를 위해 Rich Rules 를 텍스트 파일로 내보냅니다.
먼저 모든 Rich Rules 를 나열하고 출력을 프로젝트 폴더의 rules_list.txt 파일로 리디렉션합니다.
sudo firewall-cmd --list-rich-rules > ~/project/rules_list.txt
이제 파일을 읽어 내용이 올바른지 확인합니다.
cat ~/project/rules_list.txt
이 실습에서 만든 규칙 목록이 표시되어야 합니다. 이제 이 파일은 Rich Rule 구성을 간단히 백업한 파일로 사용할 수 있습니다.
요약
이 실습에서는 Rich Rules를 사용해 방화벽 활용 능력을 한 단계 높였습니다. 다음 방법을 배웠습니다.
- 특정 IP 차단("Reject" 규칙)
- 보안 이벤트 기록("Camera" 규칙)
- SSH 와 같은 민감한 서비스를 신뢰할 수 있는 네트워크로만 제한
- 규칙을 파일로 내보내 구성 감사
이러한 고급 기법을 사용하면 복잡한 환경을 정밀하게 보호할 수 있습니다.



