SW/리눅스

Linux : CentOS 8 : 방화벽 구성, 관리 방법, 예제, 명령어

얇은생각 2022. 4. 17. 07:30
반응형

방화벽은 들어오고 나가는 네트워크 트래픽을 모니터링하고 필터링하는 방법입니다. 특정 트래픽을 허용할지 차단할지 결정하는 일련의 보안 규칙을 정의하여 작동합니다. 적절하게 구성된 방화벽은 전체 시스템 보안에서 가장 중요한 측면 중 하나입니다.

CentOS 8은 firewald라는 이름의 방화벽 데몬과 함께 제공됩니다. 이 솔루션은 시스템의 방화벽을 동적으로 관리할 수 있는 D-Bus 인터페이스를 갖춘 완벽한 솔루션입니다.

CentOS 8에서 방화벽을 구성하고 관리하는 방법에 대해 설명합니다. 또한 방화벽D의 기본 개념에 대해서도 설명합니다.

 

 

Linux : CentOS 8 : 방화벽 구성, 관리 방법, 예제, 명령어

 

 

필수 조건

방화벽 서비스를 구성하려면 루트 또는 sudo 권한이 있는 사용자로 기록해야 합니다.

 

 

파이어월드의 기본 개념

firewald는 구역과 서비스의 개념을 사용합니다. 구성할 영역 및 서비스에 따라 시스템에 대한 허용 또는 차단되는 트래픽을 제어할 수 있습니다.

방화벽-cmd 명령줄 유틸리티를 사용하여 Firewald를 구성하고 관리할 수 있습니다.

CentOS 8에서 iptables는 firewald 데몬의 기본 방화벽 백엔드로 nftables로 대체됩니다.

 

 

파이어월드 존

영역은 컴퓨터가 연결된 네트워크의 신뢰 수준을 지정하는 미리 정의된 규칙 집합입니다. 네트워크 인터페이스와 소스를 영역에 할당할 수 있습니다.

다음은 FirewallD가 트러스트된 영역의 신뢰 수준에 따라 정렬한 영역입니다.

 - drop: 들어오는 모든 연결이 알림 없이 삭제됩니다. 나가는 연결만 허용됩니다.

- block: 들어오는 모든 연결은 IPv4에 대해 immp-호스트 금지 메시지와 IPv6n에 대해 immp6-adm 금지 메시지로 거부됩니다. 나가는 연결만 허용됩니다.

- public: 신뢰할 수 없는 공용 영역에서 사용합니다. 네트워크의 다른 컴퓨터를 신뢰하지는 않지만 선택한 수신 연결을 허용할 수 있습니다.

- external: 시스템이 게이트웨이 또는 라우터 역할을 할 때 NAT 위장 기능을 사용하도록 설정된 외부 네트워크에서 사용합니다. 선택한 수신 연결만 허용됩니다.

- internal: 시스템이 게이트웨이 또는 라우터 역할을 하는 경우 내부 네트워크에서 사용합니다. 네트워크의 다른 시스템은 일반적으로 신뢰됩니다. 선택한 수신 연결만 허용됩니다.

- dmz: 네트워크의 나머지 부분에 대한 액세스가 제한된 비무장 지대에 위치한 컴퓨터에 사용됩니다. 선택한 수신 연결만 허용됩니다.

- work: 작업 기계에 사용됩니다. 네트워크의 다른 컴퓨터는 일반적으로 신뢰됩니다. 선택한 수신 연결만 허용됩니다.

- home: 홈 머신에 사용됩니다. 네트워크의 다른 컴퓨터는 일반적으로 신뢰됩니다. 선택한 수신 연결만 허용됩니다.

- trust:  모든 네트워크 연결이 허용됩니다. 네트워크의 모든 컴퓨터를 신뢰합니다.

 

 

방화벽 서비스

Firewald 서비스는 영역 내에서 적용되고 특정 서비스에 대한 수신 트래픽을 허용하는 데 필요한 설정을 정의하는 미리 정의된 규칙입니다. 이 서비스를 사용하면 한 번에 여러 작업을 쉽게 수행할 수 있습니다.

예를 들어, 서비스에는 포트 열기, 트래픽 전달 등에 대한 정의가 포함될 수 있습니다.

 

 

Firewald 런타임 및 영구 설정

Firewald는 런타임 및 영구 구성이라는 두 개의 분리된 구성 집합을 사용합니다.

런타임 구성은 실제 실행 중인 구성이며 재부팅 시 유지되지 않습니다. 파이어월드 데몬이 시작되면 런타임 구성이 되는 영구 구성을 로드합니다.

기본적으로 방화벽-cmd 유틸리티를 사용하여 Firewald 구성을 변경할 때 변경 내용이 런타임 구성에 적용됩니다. 영구적으로 변경하려면 명령에 --영구 옵션을 추가합니다.

두 구성 세트의 변경 내용을 적용하려면 다음 두 가지 방법 중 하나를 사용할 수 있습니다.

런타임 구성을 변경하고 영구화합니다.

sudo firewall-cmd <options>
sudo firewall-cmd --runtime-to-permanent

 

 

영구 구성을 변경하고 firewald 데몬을 다시 로드합니다.

sudo firewall-cmd --permanent <options>
sudo firewall-cmd --reload

 

 

 

방화벽D를 사용하도록 설정

CentOS 8에서는 기본적으로 firewald가 설치되고 활성화됩니다. 시스템에 설치되어 있지 않은 경우 다음을 입력하여 데몬을 설치하고 시작할 수 있습니다.

sudo dnf install firewalld
sudo systemctl enable firewalld --now

 

 

다음을 사용하여 방화벽 서비스 상태를 확인할 수 있습니다.

sudo firewall-cmd --state

 

 

방화벽이 활성화된 경우 명령이 실행 중인 것으로 인쇄되어야 합니다. 그렇지 않으면 실행 중이지 않음을 알 수 있습니다.

 

 

 

파이어월드 존

변경하지 않은 경우 기본 영역이 공용으로 설정되고 모든 네트워크 인터페이스가 이 영역에 할당됩니다.

기본 영역은 다른 영역에 명시적으로 할당되지 않은 모든 항목에 사용되는 영역입니다.

다음을 입력하면 기본 영역을 볼 수 있습니다.

sudo firewall-cmd --get-default-zone

# public

 

 

사용 가능한 모든 구역 목록을 가져오려면 다음을 입력합니다.

sudo firewall-cmd --get-zones

# block dmz drop external home internal public trusted work

 

 

활성 영역 및 활성 영역에 할당된 네트워크 인터페이스를 보려면 다음을 수행합니다.

아래 출력은 인터페이스 eth0 및 eth1이 공용 영역에 할당되었음을 보여줍니다.

sudo firewall-cmd --get-active-zones

# public
#   interfaces: eth0 eth1

 

 

다음을 사용하여 영역 구성 설정을 인쇄할 수 있습니다.

sudo firewall-cmd --zone=public --list-all

# public (active)
#   target: default
#   icmp-block-inversion: no
#   interfaces: eth0 eth1
#   sources:
#   services: ssh dhcpv6-client
#   ports:
#   protocols:
#   masquerade: no
#   forward-ports:
#   source-ports:
#   icmp-blocks:
#   rich rules:

 

 

위의 출력에서 공용 영역이 활성 상태이며 기본 대상인 Reject를 사용하는 것을 확인할 수 있습니다. 출력에는 또한 영역이 eth0 및 eth1 인터페이스에서 사용되고 DHCP 클라이언트 및 SSH 트래픽을 허용한다는 것도 표시됩니다.

사용 가능한 모든 영역의 구성을 확인하려면 다음을 입력합니다.

sudo firewall-cmd --list-all-zones

 

 

명령은 사용 가능한 모든 영역의 설정이 포함된 큰 목록을 인쇄합니다.

 

 

 

영역 대상을 변경

대상은 지정되지 않은 수신 트래픽에 대한 영역의 기본 동작을 정의합니다. 기본값, 승인, 거부 및 삭제 옵션 중 하나로 설정할 수 있습니다.

구역의 대상을 설정하려면 --zone 옵션을 사용하여 구역을 지정하고 --set-target 옵션을 사용하여 대상을 지정합니다.

예를 들어 공용 영역의 대상을 DROP로 변경하려면 다음을 실행합니다.

sudo firewall-cmd --zone=public --set-target=DROP

 

 

 

인터페이스를 다른 영역에 할당

여러 영역에 대한 특정 규칙 집합을 만들고 서로 다른 인터페이스를 할당할 수 있습니다. 이 기능은 컴퓨터에서 여러 인터페이스를 사용할 때 특히 유용합니다.

인터페이스를 다른 영역에 할당하려면 --zone 옵션이 있는 영역과 --change-interface 옵션이 있는 인터페이스를 지정합니다.

예를 들어, 다음 명령은 eth1 인터페이스를 작업 영역에 할당합니다.

sudo firewall-cmd --zone=work --change-interface=eth1

 

 

다음을 입력하여 변경 내용을 확인합니다.

sudo firewall-cmd --get-active-zones

# work
#   interfaces: eth1
# public
#   interfaces: eth0

 

 

 

기본 영역을 변경

기본 영역을 변경하려면 --set-default-zone 옵션 다음에 기본값으로 설정할 영역의 이름을 사용합니다.

예를 들어 기본 영역을 홈으로 변경하려면 다음 명령을 실행합니다.

sudo firewall-cmd --set-default-zone=home

 

 

다음을 사용하여 변경 내용을 확인합니다.

sudo firewall-cmd --get-default-zone

# home

 

 

 

새 영역을 생성

파이어월드는 또한 여러분만의 구역을 만들 수 있게 해줍니다. 이 기능은 응용 프로그램별 규칙을 만들 때 유용합니다. 

다음 예에서는 memcached라는 새 영역을 만들고 11211 포트를 열고 192.168.100.30 IP 주소에서만 액세스를 허용합니다.

영역을 만듭니다.

sudo firewall-cmd --new-zone=memcached --permanent

 

 

영역에 규칙을 추가합니다.

sudo firewall-cmd --zone=memcached --add-port=11211/udp --permanent
sudo firewall-cmd --zone=memcached --add-port=11211/tcp --permanent
sudo firewall-cmd --zone=memcached --add-source=192.168.100.30/32 --permanent

 

 

firewald 데몬을 다시 로드하여 변경 사항을 활성화합니다.

sudo firewall-cmd --reload

 

 

 

파이어월드 서비스

firewald를 사용하면 서비스라는 미리 정의된 규칙에 따라 특정 포트 및/또는 소스에 대한 트래픽을 허용할 수 있습니다.

사용 가능한 모든 기본 서비스 유형 목록을 가져오려면 다음을 수행합니다.

sudo firewall-cmd --get-services

 

 

/usr/lib/firewald/services 디렉토리에서 연결된 .xml 파일을 열면 각 서비스에 대한 자세한 정보를 찾을 수 있습니다. 예를 들어 HTTP 서비스는 다음과 같이 정의됩니다.

# /usr/lib/firewalld/services/http.xml

<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>WWW (HTTP)</short>
  <description>HTTP is the protocol used to serve Web pages. If you plan to make your Web server publicly available, enable this option. This option is not required for viewing pages locally or developing Web pages.</description>
  <port protocol="tcp" port="80"/>
</service>

 

 

공용 영역의 인터페이스에 대해 수신 HTTP 트래픽(포트 80)을 허용하려면 현재 세션(런타임 구성) 유형에 대해서만 다음을 수행합니다.

sudo firewall-cmd --zone=public --add-service=http

 

 

기본 영역을 수정하는 경우 --zone 옵션을 생략할 수 있습니다.

서비스가 성공적으로 추가되었는지 확인하려면 --list-services 옵션을 사용합니다.

sudo firewall-cmd --zone=public --list-services

# ssh dhcpv6-client http

 

 

재부팅 후 포트 80을 열어두려면 --permanent 옵션을 사용하여 동일한 명령을 다시 한 번 실행하거나 다음 명령을 실행합니다.

sudo firewall-cmd --runtime-to-permanent

 

 

--list-services를 --영구 옵션과 함께 사용하여 변경 내용을 확인합니다.

sudo firewall-cmd --permanent --zone=public --list-services

# ssh dhcpv6-client http

 

 

서비스를 제거하는 구문은 서비스를 추가할 때와 동일합니다.

다음 --add-service 플래그 대신 --remove-service를 사용하십시오.

sudo firewall-cmd --zone=public --remove-service=http --permanent

 

 

위의 명령은 공용 영역 영구 구성에서 http 서비스를 제거합니다.

 

 

 

새 방화벽D 서비스 생성

앞서 언급한 바와 같이 기본 서비스는 /usr/lib/firewald/services 디렉토리에 저장됩니다. 새 서비스를 만드는 가장 쉬운 방법은 기존 서비스 파일을 사용자가 만든 서비스의 위치인 /etc/firewald/services 디렉토리에 복사하고 파일 설정을 수정하는 것입니다.

예를 들어, 플렉스 미디어 서버에 대한 서비스 정의를 생성하려면 SSH 서비스 파일을 사용할 수 있습니다.

sudo cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/plexmediaserver.xml

 

 

새로 만든 플렉스미디어erver.xml 파일을 열고 <short> 및 <description> 태그 내에서 서비스의 단축 이름과 설명을 변경합니다. 변경해야 하는 가장 중요한 태그는 열려는 포트 번호와 프로토콜을 정의하는 포트 태그입니다.

다음 예에서는 포트 1900 UDP와 32400 TCP를 열고 있습니다.

# /etc/firewalld/services/plexmediaserver.xml

<?xml version="1.0" encoding="utf-8"?>
<service version="1.0">
<short>plexmediaserver</short>
<description>Plex is a streaming media server that brings all your video, music and photo collections together and stream them to your devices at anytime and from anywhere.</description>
<port protocol="udp" port="1900"/>
<port protocol="tcp" port="32400"/>
</service>

 

 

파일을 저장하고 방화벽D 서비스를 다시 로드합니다.

sudo firewall-cmd --reload

 

 

이제 다른 서비스와 마찬가지로 영역에서 플렉스 매개 변수 서비스를 사용할 수 있습니다.

 

 

 

포트 및 소스 IP를 열기

또한 Firewald를 사용하면 서비스 정의를 만들지 않고도 신뢰할 수 있는 IP 주소 또는 특정 포트에서 모든 트래픽을 신속하게 활성화할 수 있습니다.

 

 

소스 IP를 열기

특정 IP 주소(또는 범위)에서 들어오는 모든 트래픽을 허용하려면 --zone 옵션을 사용하여 영역을 지정하고 --add-source 옵션을 사용하여 소스 IP를 지정합니다.

예를 들어 공용 영역에서 192.168.1.10에서 들어오는 모든 트래픽을 허용하려면 다음을 실행합니다.

sudo firewall-cmd --zone=public --add-source=192.168.1.10

 

 

새 규칙을 영구화합니다.

sudo firewall-cmd --runtime-to-permanent

 

 

다음 명령을 사용하여 변경 내용을 확인합니다.

sudo firewall-cmd --zone=public --list-sources

# 192.168.1.10

 

 

소스 IP를 제거하는 구문은 추가할 때와 동일합니다. --add-source 옵션 대신 --remove-source를 사용하십시오.

sudo firewall-cmd --zone=public --remove-source=192.168.1.10

 

 

 

원본 포트를 열기

지정된 포트에서 들어오는 모든 트래픽을 허용하려면 --zone 옵션이 있는 영역과 --add-port 옵션이 있는 포트를 지정하고 프로토콜을 지정합니다.

예를 들어, 현재 세션의 공용 영역에서 포트 8080을 열려면 다음을 실행합니다.

sudo firewall-cmd --zone=public --add-port=8080/tcp

 

 

프로토콜은 tcp, udp, sctp 또는 dccp일 수 있습니다.

변경 사항을 확인합니다.

sudo firewall-cmd --zone=public --list-ports

# 8080

 

 

재부팅 후 포트를 열어두려면 --영구 플래그를 사용하거나 다음 명령을 실행하여 규칙을 영구 설정에 추가하십시오.

sudo firewall-cmd --runtime-to-permanent

 

 

포트를 제거하는 구문은 포트를 추가할 때와 동일합니다. --add-port 옵션 대신 --remove-port를 사용하십시오.

sudo firewall-cmd --zone=public --remove-port=8080/tcp

 

 

 

포트를 전달

트래픽을 한 포트에서 다른 포트로 전달하려면 먼저 --add-maskerade 옵션을 사용하여 원하는 영역에 대해 위장 기능을 사용하도록 설정하십시오. 예를 들어 외부 영역에 대해 위장 기능을 사용하려면 다음을 입력합니다.

sudo firewall-cmd --zone=external --add-masquerade

 

 

 

IP 주소의 포트 간에 트래픽을 전달

다음 예에서는 트래픽을 동일한 서버의 포트 80에서 포트 8080으로 전달합니다.

sudo firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toport=8080

 

 

트래픽을 다른 IP 주소로 전달

다음 예에서는 IP 10.10.10을 사용하는 서버의 포트 80에서 포트 80으로 트래픽을 전달합니다.2:

sudo firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toaddr=10.10.10.2

 

 

트래픽을 다른 포트에 있는 다른 서버로 전달

다음 예에서는 IP 10.10.10을 사용하는 서버의 포트 80에서 포트 8080으로 트래픽을 전달합니다.2:

sudo firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=10.10.10.2

 

 

전달 규칙을 지속시키려면 다음을 사용합니다.

sudo firewall-cmd --runtime-to-permanent

 

반응형