서비스와 포트 관리

LinuxBeginner
지금 연습하기

소개

이 실습에서는 firewalld를 사용해 시스템으로 들어오는 트래픽을 제어하는 방법을 자세히 살펴봅니다.

컴퓨터를 하나의 건물이라고 생각해 보겠습니다. 기본적으로 방화벽은 모든 문을 잠급니다. 웹 트래픽이나 파일 전송처럼 정당한 방문자를 들어오게 하려면 특정 문을 열어야 합니다. 네트워크에서는 이러한 문을 "포트" 또는 "서비스"라고 합니다.

이 규칙을 변경하는 두 가지 중요한 방법을 배웁니다.

  1. 임시 (Runtime): 화이트보드에 메모를 쓰는 것과 같습니다. 지금은 적용되지만, 청소 담당자가 오면 (시스템 재부팅 또는 다시 로드하면) 메모가 사라집니다.
  2. 영구 (Permanent): 돌에 표지판을 새기는 것과 같습니다. 다시 로드하거나 재부팅해도 유지됩니다.

Runtime 과 Permanent 의 구분은 Firewalld 에서 가장 중요한 개념 중 하나입니다. 관리자는 이 구분을 이용해 변경 사항을 영구적으로 적용하기 전에 안전하게 테스트할 수 있습니다.

이 실습을 마치면 테스트를 위해 웹 트래픽을 임시로 허용하고, 특정 사용자 지정 포트를 영구적으로 열며, 변경 사항을 저장하는 방법을 이해할 수 있습니다.

서비스 임시 허용

이 단계에서는 HTTP 서비스에 대한 트래픽을 허용합니다.

실습 환경 참고: 설정 과정에서 터미널 연결을 유지하기 위해 기본 zone 을 trusted로 설정했으므로 모든 포트가 기술적으로 이미 열려 있습니다. 하지만 포트를 여는 데 필요한 올바른 명령을 익힐 수 있도록, 모든 트래픽이 차단된 보안 서버에서 작업한다고 가정하고 진행합니다.

http 규칙을 runtime(임시) 구성으로 추가합니다.

Runtime 상태와 Permanent 상태를 구분하는 것은 Firewalld 의 유용한 안전 기능 중 하나입니다. 이 기능을 사용하면 규칙을 장기 구성에 반영하기 전에 규칙이 제대로 작동하는지 테스트할 수 있습니다.

먼저 현재 zone 에서 명시적으로 허용된 서비스를 확인합니다.

sudo firewall-cmd --list-services

처음에는 많은 항목이 표시되지 않을 수 있습니다. 이제 허용된 서비스 목록에 http 서비스를 추가합니다.

sudo firewall-cmd --add-service=http

성공하면 터미널에 success만 표시됩니다.

서비스가 이제 허용되는지 서비스를 다시 나열해 확인합니다.

sudo firewall-cmd --list-services

이제 목록에 http가 표시되어야 합니다. 방화벽에 이 규칙을 "영구적으로" 설정하라고 지정하지 않았으므로, 이 규칙은 화이트보드에 쓴 메모처럼 현재 메모리에만 존재한다는 점을 기억합니다.

포트 영구적으로 열기

이 단계에서는 서비스 이름 대신 특정 "문" 번호를 직접 여는 경우를 살펴봅니다. 예를 들어 포트 8080은 웹 서버를 테스트할 때 자주 사용됩니다.

서비스와 포트 중 무엇을 선택하는지는 개념적으로도 중요합니다. 서비스는 일반적으로 잘 알려진 포트 하나 이상에 매핑되는 이름이 지정된 묶음입니다. 반면 포트 규칙은 더 직접적이고 낮은 수준의 설정입니다. 둘 다 사용할 수 있지만 서비스 이름이 읽고 관리하기에는 더 편리한 경우가 많습니다.

이 규칙은 서버가 다시 시작되어도 유지되어야 하므로 --permanent 플래그를 사용합니다.

다음 명령을 실행해 TCP 포트 8080 을 영구적으로 엽니다.

sudo firewall-cmd --permanent --add-port=8080/tcp

출력은 success여야 합니다.

핵심 개념: --permanent를 사용하면 구성 파일 ("돌판") 을 수정하지만, 실행 중인 방화벽에는 변경 사항이 즉시 적용되지 않습니다.

이를 확인해 보겠습니다. 현재 실행 중인 (Runtime) 포트를 확인합니다.

sudo firewall-cmd --list-ports

목록이 비어 있거나 8080 이 표시되지 않을 것입니다. 방화벽이 아직 업데이트된 구성 파일을 읽지 않았으므로 새 규칙을 아직 인식하지 못합니다.

이제 영구 구성에서 규칙이 디스크에 안전하게 저장되었는지 확인합니다.

sudo firewall-cmd --permanent --list-ports

여기에는 8080/tcp가 표시되어야 합니다. 이는 방화벽이 다음에 구성을 로드할 때 적용할 규칙이 "대기 중"임을 의미합니다.

방화벽 다시 로드

이 단계에서는 현재 다음과 같은 상태에서 시작합니다.

  • 1 단계에서 http를 허용하는 임시 규칙을 추가했습니다.
  • 2 단계에서 8080을 허용하는 영구 규칙을 저장했지만 아직 활성화하지 않았습니다.

영구 규칙을 활성화하려면 방화벽을 다시 로드해야 합니다. 그러면 Firewalld 가 구성 파일을 다시 읽고 해당 내용을 적용합니다.

실제로 reload 는 Runtime 과 Permanent 설정이 만나는 지점입니다. 디스크에 정의된 규칙 집합으로 실행 중인 메모리상의 규칙 집합을 교체하므로, 영구적으로 저장하지 않은 임시 테스트 규칙은 사라집니다.

경고: 다시 로드하면 방화벽이 구성 파일에 정의된 상태로 초기화됩니다. http 규칙은 임시 규칙일 뿐 구성 파일에 저장되지 않았으므로 사라집니다.

다시 로드 명령을 실행합니다.

sudo firewall-cmd --reload

이제 어떤 변화가 있었는지 확인합니다. 먼저 포트 8080 이 활성화되었는지 확인합니다.

sudo firewall-cmd --list-ports

성공입니다. 8080/tcp가 표시되어야 합니다. 영구 규칙이 실행 중인 시스템에 로드되었습니다.

이제 http 서비스에 어떤 일이 발생했는지 확인합니다.

sudo firewall-cmd --list-services

http 서비스가 사라졌습니다. 이는 Runtime 에만 존재하는 변경 사항이 다시 로드할 때 삭제된다는 사실을 보여 줍니다. 초보자가 자주 놓치는 부분이므로 중요한 규칙은 항상 영구적으로 설정해야 합니다.

전체 구성 확인

이 단계에서는 일상적인 방화벽 관리에 가장 유용한 명령을 사용합니다. 서비스와 포트를 따로 확인하는 대신 활성 zone 의 전체 구성을 한 번에 볼 수 있습니다.

이처럼 전체를 한눈에 보는 방식은 중요합니다. 방화벽 문제는 여러 유형의 규칙이 결합되어 호스트의 실제 동작을 결정한다는 점을 잊어서 발생하는 경우가 많기 때문입니다. zone 전체를 확인하면 이러한 실수를 줄일 수 있습니다.

--list-all 옵션을 사용해 전체 구성을 확인합니다.

sudo firewall-cmd --list-all

출력에는 활성 zone 의 전체 요약이 표시됩니다. 이 실습 환경에서 활성 zone 은 trusted입니다.

  • target: ACCEPT.
  • interfaces: 활성 네트워크 인터페이스 (예: eth0).
  • services: 기본적으로 허용된 서비스를 나열합니다. reload 후 http가 사라졌으므로 목록에 표시되지 않는다는 점에 유의합니다.
  • ports: 사용자 지정으로 열린 포트를 나열합니다 (예: 8080/tcp).

이 명령은 현재 방화벽이 정확히 어떻게 동작하는지 보여 주므로 문제를 해결할 때 매우 유용합니다.

요약

이 실습에서는 임시 방화벽 규칙과 영구 방화벽 규칙의 차이를 익혔습니다. 다음 내용을 배웠습니다.

  1. Runtime 규칙: http와 같은 서비스를 즉시 추가하되 임시로 적용하는 방법.
  2. Permanent 규칙: --permanent 플래그를 사용해 포트 8080 열기와 같은 규칙을 향후에도 유지하는 방법.
  3. 다시 로드: --reload를 사용해 영구 변경 사항을 Runtime 환경에 적용하는 방법과, 이 과정에서 임시 규칙이 삭제되는 결과.
  4. 확인: --list-all을 사용해 방화벽의 전체 상태를 확인하는 방법.

이제 네트워크 접근을 안전하고 지속적으로 제어하는 방법을 탄탄하게 이해하게 되었습니다.