개발자는 오늘도 달립니다.
[리눅스] 방화벽 FirewallD 설치 및 설정 방법 (iptable 방화벽 설정) 본문
FirewallD는 Linux 운영 체제를 위한 방화벽 관리 도구입니다.
iptables 는 숙련된 관리자가 아니면 사용이 어려운 단점이 있었는데 이런 문제를 해결하고자
RHEL/CentOS 7 부터는 방화벽 관리 유틸인 firewalld 가 나오게 되었고,
이에 따라 iptables 명령어 대신 firewall-cmd, GUI 환경에서는 firewall-config를 사용하게 되었습니다.
(물론 iptables 도 사용 가능합니다.)
Firewall 특징
- FirewallD 는 체인과 규칙 대신 Zone 과 Service 를 사용합니다.
- 규칙 세트를 동적으로 관리하여 기존 세션 및 연결을 끊지 않고 업데이트를 가능합니다.
Note!
FirewallD는 iptables 규칙을 더 쉽게 관리할 수 있도록 iptables 용 래퍼입니다.
iptables를 대체하는 것은 아닙니다.
iptables 명령은 여전히 사용 가능합니다.
방화벽 설치 및 관리
FirewallD 는 CentOS 7 에 기본적으로 탑재되어 있지만 비활성 상태입니다.
(클라우딩 시스템에는 기본적으로 탑재 되어 있지 않습니다. ex) AWS )
# firewalld 설치
yum install firewalld
# firewalld 서비스를 시작
sudo systemctl start firewalld
# firewalld 서비스 활성화 (재부팅 후 계속 반영)
sudo systemctl enable firewalld
# firewalld 서비스 중지
sudo systemctl stop firewalld
# firewalld 서비스 비활성화 (재부팅 후 계속 반영)
sudo systemctl disable firewalld
# firewalld 방화벽 상태 확인
# 출력은 running 또는 not running입니다.
sudo firewall-cmd --state
# firewalld 서비스 상태 확인
sudo systemctl status firewalld
# firewalld 설정 후 내용 즉시 로드 방법
sudo firewall-cmd --reload
FirewallD 구성
Firewalld는 XML 파일로 구성됩니다. 매우 구체적인 구성을 제외하고는 처리할 필요가 없으며 대신 firewall-cmd 커맨드를 활용하실 수 있습니다.
구성 파일은 다음 두 디렉터리에 있습니다.
- /usr/lib/FirewallD
(기본 영역 및 공통 서비스와 같은 기본 구성을 보유, 방화벽이 있는 각 패키지 업데이트가 해당 파일을 덮어쓰므로 업데이트하면 안 됨.) - /etc/firewalld
(시스템 구성 파일을 보유합니다. 이러한 파일은 기본 구성을 덮어씁니다.)
FirewallD 설정 방법
Firewalld 는 런타임 및 영구적인 변경 두 가지를 선택 사용합니다.
런타임 구성 변경 사항은 재부팅 시 또는 FirewallD 를 다시 시작할 때 유지되지 않지만 영구 변경 사항은 실행 중인 시스템에 바로 적용되지는 않습니다. (리로드 필요)
기본적으로 firewall-cmd 명령은 런타임 구성에 적용되지만 --permanent 플래그를 사용하면 영구 구성이 설정됩니다.
영구 규칙을 추가하고 활성화하려면 두 가지 방법 중 하나를 사용할 수 있습니다.
# 영구 변경 및 런타임 두 가지 모두 규칙에 추가하는 경우
sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --zone=public --add-service=http
# 영구 변경을 적용하고 FirewallD를 다시 로드하는 방법
# reload 명령은 모든 런타임 구성을 제거하고 영구 변경 구성을 적용합니다.
# firewalld 는 규칙 들을 동적으로 관리하기 때문에 기존 연결 및 세션을 중단하지 않습니다.
sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --reload
방화벽 영역 (Zone)
Zone 은 주어진 위치 또는 특정 영역에 대해 가질 수 있는 다양한 신뢰 수준에 대해 미리 구성된 규칙 집합입니다.
설정된 영역만 수신 트래픽 유형을 허용하고 이외에 것들은 거부합니다. FirewallD 를 처음 사용하도록 설정하면 Public 이 기본 영역이 됩니다.
영역은 다른 네트워크 인터페이스에도 적용할 수 있습니다. 예를 들어 내부 네트워크와 인터넷 모두에 대해 별도의 인터페이스를 사용하면 내부 영역에서는 DHCP를 허용하고 외부 영역에서는 HTTP 및 SSH 만 허용할 수 있습니다.
특정 영역으로 명시적으로 설정되지 않은 모든 인터페이스는 기본 영역에 연결됩니다.
# 기본 설정된 zone 확인
sudo firewall-cmd --get-default-zone
# 기본 zone inernal 로 변경
sudo firewall-cmd --set-default-zone=internal
# 네트워크 인터페이스에서 사용하는 영역을 보기
sudo firewall-cmd --get-active-zones
# 출력 예
# public interfaces: eth0
# 특정 영역에 대한 모든 구성을 가져오기
sudo firewall-cmd --zone=public --list-all
# 출력 예
# public (active) target: default icmp-block-inversion: no interfaces: eth0 sources: services: ssh dhcpv6-client http ports: 12345/tcp protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
# 모든 영역에 대한 모든 구성을 가져오기
sudo firewall-cmd --list-all-zones
# 출력 예
# trusted target: ACCEPT icmp-block-inversion: no interfaces: sources: services: ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules: ... work target: default icmp-block-inversion: no interfaces: sources: services: ssh dhcpv6-client ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
설정 확인
FirewallD 는 특정 네트워크 서비스에 대해 미리 정의된 규칙에 따라 트래픽을 허용할 수 있습니다.
사용자 한정 서비스 규칙을 만들어 모든 영역에 추가할 수 있습니다.
기본 지원 서비스에 대한 구성 파일은 /usr/lib/firewalld/services 있으며, 사용자가 만든 서비스 파일은 /etc/firewalld/services 입니다.
# 사용 가능한 기본 서비스 보기
sudo firewall-cmd --get-services
# 예시) HTTP 서비스를 활성화 또는 비활성화 하기
sudo firewall-cmd --zone=public --add-service=http --permanent sudo firewall-cmd --zone=public --remove-service=http --permanent
임의 포트 / 프로토콜 허용 또는 거부
# 예시) 포트 12345에서 TCP 트래픽을 허용 또는 비활성화합니다.
sudo firewall-cmd --zone=public --add-port=12345/tcp --permanent sudo firewall-cmd --zone=public --remove-port=12345/tcp --permanent
포트 포워딩
# 예시) 동일한 서버의 포트 80 에서 포트 12345 로 트래픽을 전달합니다.
sudo firewall-cmd --zone="public" --add-forward-port=port=80:proto=tcp:toport=12345
# 다른 서버 포트로 전달 하기
# public zone에서 masquerade 활성화
sudo firewall-cmd --zone=public --add-masquerade
# localhost:80 -> 198.51.100.0:8080 으로 트래픽 전달 (규칙 추가)
sudo firewall-cmd --zone="public" --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=198.51.100.0
# 규칙을 제거하려면 아래와 같이 --remove 옵션을 사용합니다. :
sudo firewall-cmd --zone=public --remove-masquerade
FirewallD 를 사용하여 규칙 세트 구성
예를 들어, 다음은 웹 서버를 실행하는 경우 FirewallD 를 사용하여 기본 규칙을 Linode에 할당하는 방법입니다.
- dmz영역을 기본 영역으로 eth0 에 할당합니다. 제공되는 기본 영역 중 dmz (비무장 영역)는 SSH 및 ICMP 만 허용하므로 응용 프로그램을 시작하는 것이 가장 바람직합니다.
- sudo firewall-cmd --set-default-zone=dmz sudo firewall-cmd --zone=dmz --add-interface=eth0
- HTTP 및 HTTPS 에 대한 영구 서비스 규칙을 dmz 영역에 추가합니다.
- sudo firewall-cmd --zone=dmz --add-service=http --permanent sudo firewall-cmd --zone=dmz --add-service=https --permanent
- 규칙이 즉시 적용되도록 FirewallD 를 다시 로드합니다. 다음으로 firewall-cmd --zone=dmz --list-all 하면 다음과 같이 출력됩니다. 이것은 dmz영역이 eth0 인터페이스, 모든 네트워크 소스 및 포트에 적용되는 기본값 임을 알려줍니다.
들어오는 HTTP (포트 80), HTTPS (포트 443) 및 SSH (포트 22) 트래픽이 허용되며 IP 버전 관리에 대한 제한이 없으므로 IPv4와 IPv6 모두에 적용됩니다.
Masquerading , port forwarding 은 허용되지 않습니다.
우리는 ICMP 블록을 차단하거나, ICMP 트래픽을 완전히 허용하거나 하는 더 다양한 규칙을 관리합니다. - dmz (default) interfaces: eth0 sources: services: http https ssh ports: masquerade: no forward-ports: icmp-blocks: rich rules:
- sudo firewall-cmd --reload
관리 요소 추가하기!
서비스 및 포트는 기본 구성에 적합하지만 고급 시나리오에는 너무 제한적일 수 있습니다.
풍부한 규칙 및 직접 인터페이스를 사용하면 모든 포트, 프로토콜, 주소 및 작업에 대해 모든 영역에 완전한 사용자 지정 방화벽 규칙을 추가할 수 있습니다.
Rich Rules
Rich Rules 구문은 man 페이지를 활용하거나 firewalld.richlanguage 에 완전히 문서화되어 있습니다.
사용--add-rich-rule,--list-rich-rules및--remove-rich-rule방화벽-CMD 명령으로 그들을 관리할 수 있습니다.
다음은 몇 가지 일반적인 예입니다.
호스트 192.0.2.0의 모든 IPv4 트래픽을 허용합니다.
sudo firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address=192.0.2.0 accept'
호스트 192.0.2.0에서 포트 22 로의 TCP를 통한 IPv4 트래픽을 거부합니다.
sudo firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address="192.0.2.0" port port=22 protocol=tcp reject'
호스트 192.0.2.0에서 포트 80으로의 TCP를 통한 IPv4 트래픽을 허용하고 로컬로 포트 6532로 전달합니다.
sudo firewall-cmd --zone=public --add-rich-rule 'rule family=ipv4 source address=192.0.2.0 forward-port port=80 protocol=tcp to-port=6532'
포트 80의 모든 IPv4 트래픽을 호스트 198.51.100.0의 포트 8080으로 전달합니다 (마스커레이드가 영역에서 활성화되어야 함).
sudo firewall-cmd --zone=public --add-rich-rule 'rule family=ipv4 forward-port port=80 protocol=tcp to-port=8080 to-addr=198.51.100.0'
공개 영역에서 현재 리치 규칙을 나열하려면 다음을 수행하십시오.
sudo firewall-cmd --zone=public --list-rich-rules
iptables Direct Interface
가장 고급 사용 또는 iptables 전문가를 위해 FirewallD 는 iptables 명령을 직접 전달할 수 있는 인터페이스를 제공합니다.
인터페이스 규칙을 사용하지 않는 한 영구적이지 않습니다 --permanent.
FirewallD 에 추가된 모든 사용자 정의 체인 또는 규칙을 보려면 :
firewall-cmd --direct --get-all-chains firewall-cmd --direct --get-all-rules
'리눅스 > 공통' 카테고리의 다른 글
[Error] Bad magic number in super-block while trying to open ... (0) | 2021.09.10 |
---|---|
[md5sum] md5 file check 파일 체크 명령어 (0) | 2021.09.06 |
[리눅스] linux LV 용량 확장 (루트 볼륨 확장 /) (0) | 2020.09.24 |
[리눅스] /etc/sudoers (visudo) 파일 에러 해결법 (0) | 2020.05.12 |
[리눅스] SCP 명령어 서버 간 파일 전송 초간단 방법 정리 (0) | 2020.05.07 |