소개
Firewalld는 많은 Linux 배포판에서 사용할 수 있는 방화벽 관리 솔루션입니다. Linux 커널이 제공하는 iptables 패킷 필터 시스템의 인터페이스 역할을 합니다. 이 가이드에서는 서버용 방화벽을 구성하는 방법을 배웁니다. 또한 firewall-cmd 관리 도구를 사용하여 방화벽을 관리하는 기본 방법도 보여줍니다.
Firewalld 기본 사항
FirewallD는 iptables의 체인 및 규칙 대신 영역(zone)과 서비스(service) 개념을 사용합니다. 구성하는 영역과 서비스에 따라 시스템으로 들어오고 나가는 트래픽의 허용 여부를 제어할 수 있습니다. FirewallD는 명령줄 유틸리티인 firewall-cmd를 사용하여 구성하고 관리할 수 있습니다.
부팅 시 방화벽 설치 및 활성화
대부분의 Linux 배포판에는 firewallD가 이미 설치되어 있습니다. 하지만 직접 설치해야 하는 경우 아래 구문을 입력하세요:
|
1 |
sudo yum install firewalld |
firewalld가 설치되면 서비스를 활성화하고 서버를 재부팅할 수 있습니다:
|
1 2 |
sudo systemctl enable firewalld sudo reboot |
다음으로 서버를 재시작합니다. 서버가 성공적으로 재시작되면 방화벽이 활성화됩니다. 그 후, 아래 명령어를 사용하여 서비스가 활성화되었는지 확인합니다:
|
1 |
sudo firewall-cmd --state |

출력 결과는 기본 방화벽 설정이 작동 중임을 보여줍니다.
기본 설정 확인
이 명령어를 사용하여 서버에서 선택한 영역을 확인할 수 있습니다:
|
1 |
firewall-cmd --get-default-zone |

다음을 입력하여 활성 영역을 확인합니다:
|
1 |
firewall-cmd --get-active-zones |

이 구문을 사용하여 public 영역에 연결된 규칙을 확인하기 위해 기본 영역의 구성을 출력합니다:
|
1 |
sudo firewall-cmd --list-all |

출력 결과는 이 영역이 기본 영역이자 활성 영역임을 나타냅니다. 또한 eth0 및 eth1 인터페이스가 이 영역에 할당되어 있음을 보여줍니다.
대체 영역 확인
기본 및 활성 영역 외에도 탐색할 수 있는 다른 영역이 있습니다. 사용 가능한 모든 영역을 보려면 이 명령어를 입력하세요:
|
1 |
firewall-cmd --get-zones |

–list-all 명령어에 –zone= 매개변수를 추가하여 특정 영역에 할당된 구성을 확인합니다:
|
1 |
sudo firewall-cmd --zone=home --list-all |

인터페이스 영역 변경
–change-interface 옵션을 사용하여 인터페이스 영역을 쉽게 변경할 수 있습니다. 다음 명령어는 eth1 인터페이스를 work 영역에 할당합니다:
|
1 |
sudo firewall-cmd --zone=work --change-interface=eth1 |
다음을 입력하여 변경 사항을 확인할 수 있습니다:
|
1 |
sudo firewall-cmd --get-active-zones |
기본 영역 변경
기본 영역을 변경하려면 –set-default-zone 뒤에 기본값으로 설정할 영역의 이름을 사용합니다. 예를 들어, 기본 영역을 변경하려면 다음 명령어를 실행해야 합니다:
|
1 |
sudo firewall-cmd --set-default-zone=home |
다음으로, 다음 명령어로 변경 사항을 확인할 수 있습니다:
|
1 |
sudo firewall-cmd --get-default-zone |
애플리케이션에 대한 규칙 설정
서비스에 대한 방화벽 예외를 정의하는 데 필요한 기본 사항을 살펴보겠습니다:
영역에 서비스 추가
가장 간단한 방법은 필요한 포트나 서비스를 사용 중인 영역에 추가하는 것입니다. 마찬가지로, –get-services 옵션을 사용하여 사용 가능한 모든 서비스를 볼 수 있습니다:
|
1 |
firewall-cmd --get-services |

–add-service = 매개변수를 사용하여 영역에 대한 서비스를 활성화할 수 있습니다. 이 작업은 기본 영역 또는 –zone = 매개변수로 정의된 모든 영역을 대상으로 합니다. 기본적으로 현재 방화벽 세션만 구성됩니다. –permanent 플래그를 활성화하여 영구적인 방화벽 구성을 설정할 수 있습니다. 예를 들어, 일반 HTTP 트래픽을 제공하는 웹 서버를 실행 중인 경우 다음을 입력하여 이번 세션 동안 “public” 영역의 인터페이스에 대해 이 트래픽을 허용할 수 있습니다:
|
1 |
sudo firewall-cmd --zone=public --add-service=http |
기본 영역을 변경하려는 경우 –zone =을 생략할 수 있습니다. –list-all 또는 –list-services 작업을 통해 작업이 성공했는지 확인할 수 있습니다:
|
1 |
sudo firewall-cmd --zone=public --list-services |

모든 것이 예상대로 작동하는지 확인한 후에는 재시작 후에도 서비스를 계속 사용할 수 있도록 영구 방화벽 규칙을 변경하고 싶을 것입니다. 다음 구문을 입력하여 “public” 영역을 영구적으로 변경할 수 있습니다:
|
1 2 3 4 |
sudo firewall-cmd --zone=public --permanent --add-service=http 출력: success |
–list-services 작업에 –permanent 플래그를 추가하여 이 작업이 성공했는지 확인할 수 있습니다. 모든 영구 작업을 수행하려면 sudo를 사용해야 합니다:
|
1 2 3 4 |
sudo firewall-cmd --zone=public --permanent --list-services 출력: dhcpv6-client http ssh |
이제 “public” 영역에서 80번 포트의 HTTP 트래픽을 허용합니다. 아래 명령을 사용하여 이를 현재 세션 및 영구 규칙 세트에 추가할 수 있습니다:
|
1 2 3 |
sudo firewall-cmd --zone=public --add-service=https sudo firewall-cmd --zone=public --permanent --add-service=https |
요구 사항에 맞는 서비스가 없는 경우, 이 상황을 해결할 수 있는 두 가지 좋은 방법이 있습니다:
- 영역에 대한 포트 열기
특정 애플리케이션에 대한 지원을 추가하는 가장 간단한 방법은 각 영역에서 사용하는 포트를 여는 것입니다. 열어야 하는 포트에 대해 포트 또는 포트 범위와 해당 프로토콜을 지정하기만 하면 됩니다. 예를 들어, 애플리케이션이 5000번 포트에서 실행되고 TCP를 사용하는 경우, –add-port = 매개변수를 사용하여 이번 세션 동안 “public” 영역에 추가할 수 있습니다. 프로토콜은 TCP 또는 UDP일 수 있습니다:
|
1 2 3 4 |
sudo firewall-cmd --zone=public --add-port=5000/tcp 출력: success |
작업이 성공했는지 확인하려면 –list-ports 작업을 사용하십시오:
|
1 2 3 4 |
sudo firewall-cmd --zone=public --list-ports 출력: 5000/tcp |
범위의 시작 포트와 끝 포트를 하이픈으로 구분하여 연속된 포트 범위를 지정할 수도 있습니다. 예를 들어, 애플리케이션이 UDP 포트 4990에서 4999까지 사용하는 경우, 다음과 같이 작성하여 “public” 영역에서 열 수 있습니다:
|
1 |
sudo firewall-cmd --zone=public --add-port=4990-4999/udp |
테스트 후에는 이를 영구 방화벽에 추가하고 싶을 것입니다. 다음과 같이 입력하여 추가할 수 있습니다:
|
1 2 3 |
sudo firewall-cmd --zone=public --permanent --add-port=5000/tcp sudo firewall-cmd --zone=public --permanent --add-port=4990-4999/udp sudo firewall-cmd --zone=public --permanent --list-ports |

- 서비스 정의
서비스는 관련 이름 및 설명이 포함된 포트의 모음입니다. 서비스는 포트보다 관리하기 쉽지만, 약간의 초기 작업이 필요합니다. 시작하는 가장 간단한 방법은 기존 스크립트(/ usr / lib / firewalld / services에 있음)를 /etc/firewalld/services 디렉터리로 복사하는 것입니다. 예를 들어, 다음과 같이 SSH 서비스 정의를 복사하여 “example” 서비스 정의에 사용할 수 있습니다. XML 접미사를 제외한 파일 이름이 방화벽 서비스 목록의 서비스 이름을 결정합니다:
|
1 |
sudo cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/example.xml |
이 시점에서 복사한 파일의 정의를 조정할 수 있습니다:
|
1 |
sudo vi /etc/firewalld/services/example.xml |
먼저, 파일에는 복사한 SSH 정의가 포함되어 있습니다:
|
1 2 3 4 5 6 |
<?xml version="1.0" encoding="utf-8"?> <service> <short>SSH</short> <description>보안 쉘 (SSH) 이다 하나의 프로토콜 위한 로그인 으로 그리고 실행 명령 에서 원격 장치. 그것은 제공한다 안전한 암호화된 통신. 만약 당신이 계획한다 에 접속 당신의 장치 원격으로 통해 SSH 통해 하나의 방화벽이 있는 인터페이스, 활성화 이 옵션. 당신은 필요하다 그 openssh-서버 패키지 설치된 위해 이 옵션 하기 위해 유용.</description> <port protocol="tcp" port="22"/> </service> |
이 정의의 대부분은 메타데이터로 구성됩니다. <short> 태그에서 서비스 단축 이름을 변경해야 합니다. 이것은 알아보기 쉬운 서비스 이름입니다. “example” 서비스의 경우, TCP용 포트 7777과 UDP용 포트 8888을 열어야 한다고 가정해 보겠습니다. i를 눌러 INSERT 모드로 진입하여 기존 정의를 변경할 수 있습니다:
|
1 2 3 4 5 6 7 |
<xml version="1.0" encoding="utf-8"?> <service> <short>예시 서비스</short> <description>이것은 이다 단지 하나의 예시 서비스. 그것은 아마도 해서는 안 된다't 되다 사용 에서 하나의 실제 시스템.</description> <port protocol="tcp" port="7777"/> <port protocol="udp" port="8888"/> </service> |
다음으로, ESC를 누르고 :x를 입력하여 파일을 저장하고 닫습니다. 그런 다음, 아래 명령어를 입력하여 방화벽을 재시작하면 새 서비스에 액세스할 수 있습니다.
|
1 |
sudo firewall-cmd --reload |
그 후, 아래 명령어를 사용하여 사용 가능한 서비스 목록을 확인합니다:
|
1 |
firewall-cmd --get-services |

이 서비스는 이제 해당 영역(zone)에서 사용할 수 있습니다.
사용자 정의 영역(Zone) 만들기
대부분의 사용자에게는 사전 정의된 영역으로도 충분하겠지만, 해당 기능을 더 자세히 설명하는 사용자 정의 영역을 정의하는 것이 유용할 수 있습니다.
영역을 추가할 때는 영구(permanent) 방화벽 설정에 추가하십시오. 그런 다음 다시 로드하여 설정을 세션에 적용할 수 있습니다. 예를 들어, 다음과 같이 입력하여 앞서 논의한 두 개의 영역을 생성할 수 있습니다:
|
1 2 |
sudo firewall-cmd --permanent --new-zone=publicweb sudo firewall-cmd --permanent --new-zone=privateDNS |
다음 명령어를 사용하여 영구 구성에 해당 영역들이 존재하는지 확인할 수 있습니다:
|
1 |
sudo firewall-cmd --permanent --get-zones |

방화벽을 다시 로드하여 이러한 새 영역을 활성 구성에 적용합니다:
|
1 2 3 4 5 |
sudo firewall-cmd --reload firewall-cmd --get-zones 출력: block dmz drop external home internal privateDNS public publicweb trusted work |
이제 영역(zone)에 적절한 서비스와 포트를 할당할 수 있습니다. 예를 들어, “publicweb” 영역에 SSH, HTTP, HTTPS 서비스를 추가하려면 다음과 같이 합니다:
|
1 2 3 |
sudo firewall-cmd --zone=publicweb --add-service=ssh sudo firewall-cmd --zone=publicweb --add-service=http sudo firewall-cmd --zone=publicweb --add-service=https |

또한, 다음 명령을 사용하여 “privateDNS” 영역에 DNS 서비스를 추가할 수 있습니다:
|
1 2 |
sudo firewall-cmd --zone=privateDNS --add-service=dns sudo firewall-cmd --zone=privateDNS --list-all |

다음으로, 테스트를 위해 인터페이스를 이 새로운 영역으로 변경할 수 있습니다:
|
1 2 3 |
sudo firewall-cmd --zone=publicweb --change-interface=eth0 sudo firewall-cmd --zone=privateDNS --change-interface=eth1 |
구성이 제대로 작동하는지 테스트합니다. 이 값들이 제대로 작동한다면 영구(permanent) 구성에 동일한 규칙을 추가해야 합니다. —permanent 표시자를 사용하여 규칙을 다시 적용하면 됩니다:
|
1 2 3 4 5 6 7 |
sudo firewall-cmd --zone=publicweb --permanent --add-service=ssh sudo firewall-cmd --zone=publicweb --permanent --add-service=http sudo firewall-cmd --zone=publicweb --permanent --add-service=https sudo firewall-cmd --zone=privateDNS --permanent --add-service=dns |
이 규칙들을 영구적으로 적용한 후, 네트워크를 재시작하고 방화벽 서비스를 다시 로드할 수 있습니다:
|
1 2 3 |
sudo systemctl restart network sudo systemctl reload firewalld |
영역이 올바르게 할당되었는지 확인합니다:
|
1 |
firewall-cmd --get-active-zones |

또한, 두 영역 모두에 올바른 서비스가 있는지 확인하십시오:
|
1 2 3 4 |
sudo firewall-cmd --zone=publicweb --list-services 출력: http https ssh |
|
1 2 3 4 5 |
sudo firewall-cmd --zone=privateDNS --list-services 출력: dns |
영역 중 하나를 다른 인터페이스의 기본값으로 설정하려면 다음 명령을 사용하여 –set-default-zone= 매개변수로 이 동작을 구성해야 합니다:
|
1 |
sudo firewall-cmd --set-default-zone=publicweb |
결론
이제 자신만의 영역을 성공적으로 생성했습니다. 일상적인 사용을 위해 CentOS 시스템에서 firewalld 서비스를 관리하는 기본적인 방법을 이해하셨을 것입니다. firewalld 서비스를 잘 파악하면 그 강력함과 유연성을 최대한 활용할 수 있습니다.
즐거운 컴퓨팅 되세요!


댓글
아직 댓글이 없습니다. 첫 번째로 작성해 보세요.