리눅스를 사용하다보면, 네트워크 보안을 위해 방화벽을 설정해야 할 때가 있습니다.
그럴 때 사용할 수 있는 도구 중 하나가 바로 firewalld입니다.
이번 글에서는 firewalld를 사용하여 리눅스 방화벽을 어떻게 관리하는지 기초부터 차근차근 알아보겠습니다.

포스팅 목차
firewalld란?
firewalld는 리눅스 시스템의 방화벽을 관리하는 데 사용되는 도구입니다. 이 도구를 사용하면 방화벽 설정을 동적으로 관리할 수 있습니다. 즉, 시스템을 재부팅하지 않고도 방화벽 설정을 바꿀 수 있다는 뜻입니다.
- 먼저, firewalld를 사용하기 위해서는 firewalld 서비스가 실행 중이어야 합니다. 서비스의 상태를 확인하거나, 서비스를 시작하거나, 서비스를 재시작하는 등의 작업을 할 수 있습니다.
# firewall-cmd --version

firewalld 시작하기 : 서비스 관리
먼저, firewalld를 사용하기 위해서는 firewalld 서비스가 실행 중이어야 합니다.
서비스의 상태를 확인하거나, 서비스를 시작하거나, 서비스를 재시작하는 등의 작업을 할 수 있습니다.
서비스 상태 확인 : # firewall-cmd –state
- 현재 firewalld 서비스의 상태를 확인할 수 있습니다. 서비스가 실행 중이라면 running이라는 메시지 확인 가능
서비스 시작 : # systemctl start firewalld firewalld
- firewalld 서비스를 시작할 수 있습니다. 서비스가 이미 실행 중이라면 명령어를 실행해도 아무 변화가 없습니다.
서비스 활성화 (부팅 시 자동으로 시작) : # systemctl enable firewalld
- 명령어를 실행하면 firewalld 서비스가 시스템 부팅 시 자동으로 시작되도록 설정할 수 있습니다. 이렇게 하면 매번 수동으로 서비스를 시작할 필요가 없게 됩니다.
서비스 재시작 : # systemctl restart firewalld

firewalld 사용하기: 기본적인 방화벽 설정
firewalld를 사용하여 방화벽 설정을 어떻게 할 수 있는지 알아보겠습니다. firewalld는 zone이라는 개념을 사용하여 방화벽 규칙을 관리합니다. 이 zone들은 서로 다른 보안 수준을 가지고 있으며, 특정 네트워크 인터페이스 또는 서비스를 다른 zone에 할당할 수 있습니다.
기본 zone 확인 : firewall-cmd –get-default-zone 명령어를 사용하면 현재 설정된 기본 zone을 확인할 수 있습니다. 기본적으로 public zone이 설정되어 있을 것입니다.

사용 가능한 모든 zones 확인 : firewall-cmd –get-zones 명령어를 실행하면 현재 시스템에서 사용 가능한 모든 zone의 목록을 볼 수 있습니다.

특정 zone의 현재 설정 확인 : firewall-cmd –zone=public –list-all 명령어를 실행하면 public zone의 현재 설정을 확인할 수 있습니다.

새 규칙 추가 (예: HTTP 서비스 허용): firewall-cmd –zone=public –add-service=http 명령어를 실행하면 public zone에서 HTTP 서비스를 허용하는 규칙을 추가할 수 있습니다. 이렇게 하면 HTTP 서비스에 대한 인바운드 트래픽이 허용됩니다.

규칙 영구적으로 추가 : 만약 규칙을 영구적으로 추가하고 싶다면 <–permanent> 옵션을 추가하면 됩니다. firewall-cmd –zone=public –add-service=http –permanent 명령어를 실행하면 HTTP 서비스를 허용하는 규칙이 영구적으로 추가됩니다.

규칙 삭제 (예: HTTP 서비스 삭제): 만약 특정 규칙을 삭제하고 싶다면 <–remove-service> 옵션을 사용하면 됩니다. firewall-cmd –zone=public –remove-service=http 명령어를 실행하면 HTTP 서비스를 허용하는 규칙을 삭제할 수 있습니다.

특정 포트 열기 (예: 8080/tcp)**: 특정 포트를 열고 싶다면 –add-port 옵션을 사용하면 됩니다. firewall-cmd –zone=public –add-port=8080/tcp 명령어를 실행하면 8080번 포트를 통한 TCP 트래픽이 허용됩니다.

특정 포트 영구적으로 열기 : 특정 포트를 영구적으로 열고 싶다면 –permanent 옵션을 추가하면 됩니다. firewall-cmd –zone=public –add-port=8080/tcp –permanent 명령어를 실행하면 8080번 포트를 통한 TCP 트래픽이 영구적으로 허용됩니다.

변경 사항 적용 : firewalld에서 설정을 변경한 후에는 –reload 옵션을 사용하여 변경 사항을 적용해야 합니다. firewall-cmd –reload 명령어를 실행하면 방금 추가하거나 삭제한 규칙이 적용됩니다.
특정 IP 차단 : 특정 IP 주소로부터의 트래픽을 차단하고 싶다면 –add-rich-rule 옵션을 사용하면 됩니다. firewall-cmd –zone=public –add-rich-rule=’rule family=”ipv4″ source address=”192.168.1.100″ reject’ 명령어를 실행하면 192.168.1.100 주소로부터의 모든 트래픽이 차단됩니다.

특정 IP 영구적으로 차단 : 특정 IP 주소를 영구적으로 차단하고 싶다면 –permanent 옵션을 추가하면 됩니다. firewall-cmd –zone=public –add-rich-rule=’rule family=”ipv4″ source address=”192.168.1.100″ reject’ –permanent 명령어를 실행하면192.168.1.100 주소로부터의 트래픽이 영구적으로 차단됩니다.

–permanent 플래그를 사용하여 설정을 영구적으로 만들 수 있으며, –reload 옵션을 사용하여 변경 사항을 적용합니다.
기억해야 할 중요한 점은 –permanent 옵션으로 추가한 규칙은 firewalld의 재시작이나 시스템의 재부팅 후에 적용된다는 것입니다. 즉각적인 적용을 원한다면 –permanent 없이 규칙을 추가한 후 –reload를 실행해야 합니다.