상세 컨텐츠

본문 제목

[CentOS 8] firewalld 사용법

Linux

by mp.jamong 2021. 1. 10. 10:08

본문

 

윈도우즈 OS에서 기본 제공하는 Windows Defender 방화벽과 같이 CentOS에서도 firewalld라는 이름으로 시스템 방화벽을 제공하고 있습니다. iptable이라는 방화벽도 있지만, 이번 포스팅에서는 firewalld 사용법에 대해 알아보겠습니다.

 

 

 

firewalld 서비스 관리

 

firewalld를 사용하기 위해서는 아래의 명령어와 같이 firewalld 서비스를 다루는 명령어를 반드시 알고 있어야 합니다.

 


# 서비스 시작
[root@localhost ~]# systemctl start firewalld

# 서비스 재시작
[root@localhost ~]# systemctl restart firewalld

# 서비스 중지
[root@localhost ~]# systemctl stop firewalld

# 서비스 등록
[root@localhost ~]# systemctl enable firewalld

# 서비스 상태 확인
[root@localhost ~]# systemctl status firewalld

# firewalld 정책 저장 또는 적용
[root@localhost ~]# firewall-cmd --reload

# firewalld 설정파일 경로
[root@localhost ~]# vi /etc/firewalld/firewalld.conf

 

 

firewalld 존(zone) 관리

 

▷ 존(zone)은 방화벽에서 사용하는 영역별 그룹이라고 보면 됩니다. 방화벽을 기준으로 외부는 External(외부), 내부는 Internal(내부), 중간 영역인 DMZ 등 다양한 존으로 나눠서 그룹 관리가 가능합니다.

 

▷ firewalld 에서 기본으로 제공하는 존(zone)이 있으며, 신규 추가하여 사용도 가능합니다. 자세한 내용은 아래 내용을 참고하기 바랍니다.

 


# 사전 정의된 zone 목록 확인
[root@localhost ~]# firewall-cmd --get-zones
block dmz drop external home internal public trusted work

# 기본 설정 zone 확인
[root@localhost ~]# firewall-cmd --get-default-zone
public

# 기본 zone 변경
[root@localhost ~]# firewall-cmd --set-default-zone=external

# 현재 설정 확인
[root@localhost ~]# firewall-cmd --list-all

# 전체 zone 목록 상세 확인
[root@localhost ~]# firewall-cmd --list-all-zones

# 네트워크 인터페이스에 적용된 zone 리스트 확인 (변경 전)
[root@localhost ~]# firewall-cmd --get-active-zone
external
  interfaces: enp0s8 enp0s3

# 네트워크 인터페이스에 zone 변경
[root@localhost ~]# firewall-cmd --change-interface=enp0s3 --zone=public

# 네트워크 인터페이스에 적용된 zone 리스트 확인 (변경 후)
[root@localhost ~]# firewall-cmd --get-active-zone
external
  interfaces: enp0s8
public
  interfaces: enp0s3

# 신규 zone 추가
[root@localhost ~]# firewall-cmd --permanent --new-zone=test
success

# 기존 zone 삭제
[root@localhost ~]# firewall-cmd --permanent --delete-zone=test
success

 

 

firewalld 서비스 관리

 

▷ firewalld 서비스는 잘 알려진 포트 또는 어플리케이션 서비스를 사전 정의한 것입니다. 

 

firewalld 서비스를 이용하면 ssh, telnet, icmp, mysql 등 잘 알려진 어플리케이션에 대해 별도 포트로 설정하지 않고 서비스 이름으로 관리가 가능합니다.

 


# 사전 등록된 서비스 목록 확인
[root@localhost ~]# firewall-cmd --get-services

# 사전 정의된 서비스 파일 위치
[root@localhost ~]# firewall-cmd --get-services

# 특정 zone에 허용된 서비스 리스트 확인 (서비스 추가 전)
[root@localhost ~]# firewall-cmd --list-service --zone=public
cockpit dhcpv6-client ssh

# 특정 zone에 서비스 추가 (http, https, dns, telnet)
[root@localhost ~]# firewall-cmd --permanent --zone=public --add-service=http
[root@localhost ~]# firewall-cmd --permanent --zone=public --add-service=https
[root@localhost ~]# firewall-cmd --permanent --zone=public --add-service=dns
[root@localhost ~]# firewall-cmd --permanent --zone=public --add-service=telnet

# 특정 zone에 서비스 삭제 (telnet)
[root@localhost ~]# firewall-cmd --permanent --zone=public --remove-service=telnet

# 서비스 추가 후 서비스 적용을 위해 방화벽 재시작
[root@localhost ~]# firewall-cmd --reload

# 특정 zone에 허용된 서비스 리스트 확인 (서비스 추가 후)
[root@localhost ~]# firewall-cmd --list-service --zone=public
cockpit dhcpv6-client dns http https ssh

 

 

firealld 포트(port) 관리

 

firewalld 포트(port)는 위에서 설명한 firewalld 서비스에서 언급되지 않은 서비스의 포트를 등록할 때 사용합니다.

 


# 허용 포트 리스트 확인 (추가 전)
[root@localhost ~]# firewall-cmd --list-port --zone=public

# 특정 포트 TCP 8080, 8081 추가
[root@localhost ~]# firewall-cmd --permanent --zone=public --add-port=8080/tcp
[root@localhost ~]# firewall-cmd --permanent --zone=public --add-port=8081/tcp

# 특정 포트 TCP 8081 삭제
[root@localhost ~]# firewall-cmd --permanent --zone=public --remove-port=8081/tcp

# 포트 적용을 위한 방화벽 재시작
[root@localhost ~]# firewall-cmd --reload

# 허용 포트 리스트 확인 (추가 후)
[root@localhost ~]# firewall-cmd --list-port --zone=public
8080/tcp

 

 

firewalld IP 관리

 

firewalld IP는 특정 IP나 IP 대역을 허용할 때 사용 합니다.

 


# 허용 IP 리스트 확인 (추가 전)
[root@localhost ~]# firewall-cmd --list-sources --zone=public

# 허용 IP 추가
[root@localhost ~]# firewall-cmd --permanent --zone=public --add-source=10.0.2.0/24
[root@localhost ~]# firewall-cmd --permanent --zone=public --add-source=10.0.3.0/24

# 허용 IP 삭제
[root@localhost ~]# firewall-cmd --permanent --zone=public --remove-source=10.0.3.0/24

# 허용 IP 적용을 위한 방화벽 재시작
[root@localhost ~]# firewall-cmd --reload

# 허용 IP 리스트 확인 (추가 후)
[root@localhost ~]# firewall-cmd --list-sources --zone=public
10.0.2.0/24

 

 

firewalld 정책(rule) 현황 확인

 

 firewalld 에서 생성한 정책(rule)은 존(zone)별로 관리되며, 아래 경로에서 확인할 수 있습니다.

 → 정책 경로 : /etc/firewalld/zones

 


# firewalld zone 경로 확인
[root@localhost ~]# ls -al /etc/firewalld/zones
total 20
drwxr-x---. 2 root root 110 Jan 10 08:29 .
drwxr-x---. 7 root root 159 Jan 10 08:25 ..
-rw-r--r--. 1 root root 304 Jan 10 07:53 external.xml
-rw-r--r--. 1 root root 328 Jan 10 07:53 external.xml.old
-rw-r--r--. 1 root root 489 Jan 10 08:28 public.xml
-rw-r--r--. 1 root root 523 Jan 10 08:28 public.xml.old
-rw-r--r--. 1 root root  54 Jan 10 07:30 test.xml.old

# public zone 정책 확인
[root@localhost ~]# cat /etc/firewalld/zones/public.xml

 

 

firewalld 로깅(logging) 설정

 

 firewalld 로깅(logging)은 방화벽에 접근한 로그를 남기는 것입니다. 로깅(lgging) 설정 방법은 아래와 같습니다.

 


# firewalld.conf에서 로깅 설정 변경
[root@localhost ~]# vi /etc/firewalld/firewalld.conf
LogDenied=off
->
LogDenied=all

# 서비스 재시작
[root@localhost ~]# systemctl restart firewalld

# 설정 확인
[root@localhost ~]# firewall-cmd --get-log-denied

# 로그 보기
[root@localhost ~]# dmesg | grep -i REJECT

# 로그 파일 생성 후 로깅 설정 (신규 파일 생성 후 아래 내용 추가)
[root@localhost ~]# vi /etc/rsyslog.d/firewalld-droppd.conf

:msg,contains,"_DROP" /var/log/firewalld-droppd.log
:msg,contains,"_REJECT" /var/log/firewalld-droppd.log
& stop

# rsyslog 서비스 재시작
[root@localhost ~]# systemctl restart rsyslog.service

# deny log 확인
[root@localhost ~]# tail -f /etc/firewalld-droppd.log

 

 

 

▽ 같이 보면 더 좋은 블로그 글 

 

[CentOS 8] 초기 세팅 | 네트워크 설정

서버를 이용하기 위해서는 네트워크 설정이 필요하며, 서비스 제공을 위해 기본적으로 고정IP가 필요하다. 이번 포스팅에서는 서버간 이름을 지정하는 Hostname 설정과 고정 IP 설정 방법, 사용하

mpjamong.tistory.com

 

[CentOS 8] 마스터 네임서버 구축 방법

내부에 웹서버나 NAS 구축 후 도메인을 연동하여 내부에서 도메인으로 웹 서버나 NAS를 접속할 수 있게 해주는 마스터 네임서버 설정 방법에 대해 알아보겠습니다. 이전 포스팅에서 소개한 캐싱

mpjamong.tistory.com

관련글 더보기

댓글 영역