/
RHEL/CentOS 에서 방화벽(firewall) 설정하기

RHEL/CentOS 에서 방화벽(firewall) 설정하기

RHEL 7 부터는 방화벽을 관리하는 데몬이 firewalld 로 변경되었고 방화벽 설정은 복잡한 iptables 명령어대신 firewall-cmd (콘솔), firewall-config(X-Windows) 명령어를 사용하는 것을 권장합니다.

Firewalld

현재 페이지는 갱신되지 않습니다. 갱신되는 자료를 보시려면 "바쁜 개발자를 위한 웹 서비스 보안" "firewalld 방화벽" 페이지를 참고하세요.

firewall-cmd 는 iptables 를 쓰기 쉽게 하는 wrapper 이고 복잡한 규칙을 사용할 경우 --direct 옵션으로 iptables 내부에 접근해야 합니다.



설치

yum install firewalld
systemctl start firewalld
systemctl enable firewalld


설정

설정 파일

기본 설정은 /usr/lib/firewalld/ 에 위치하고 있으며 미리 설정된 zone과 zone 별 허용하는 서비스등은 이 폴더를 보면 확인할 수 있습니다.


시스템 개별 설정은 /etc/firewalld/ 에 위치하며 default zone 등 firewall 의 동작은 /etc/firewalld/firewalld.conf 에서 지정할 수 있으며 예로 default zone 을 dmz로 변경하려면 아래와 같이 설정하고 firewalld 를 재시작하면 됩니다.

/etc/firewalld/firewalld.conf
DefaultZone=dmz


커스터마이징된 zone 설정은 /etc/firewalld/zones//[ZONE].xml 에서 확인할 수 있으며 예로 public 존은 /etc/firewalld/zones/public.xml 에 설정합니다.

<?xml version="1.0" encoding="utf-8"?>
<zone>
  <short>Public</short>
  <description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accept
ed.</description>
  <service name="dhcpv6-client"/>
  <service name="http"/>
  <service name="ssh"/>
  <service name="https"/>
</zone>


재구동

서비스 재구동시 service iptables restart 대신 firewall-cmd 명령어를 사용합니다.

firewall-cmd --reload


zone

존은 서버의 용도에 맞게 사전에 정의된 네트워크의 신뢰 레벨을 의미.


사전 정의된 존 목록 출력

firewall-cmd --get-zones 


work drop internal external trusted home dmz public block


전체 존 목록을 상세하게 출력

firewall-cmd --list-all-zones 


기본 존 출력

default 로 설정된 존 출력

firewall-cmd --get-default-zone


public


활성화된 존 출력

firewall-cmd --get-active-zone


새로운 존 추가

--new-zone=ZONENAME 으로 추가

firewall-cmd --permanent --new-zone=webserver 


존 삭제

--delete-zone=ZONENAME 으로 삭제

firewall-cmd --permanent --delete-zone=webserver 



서비스 목록

사전에 정의된 서비스의 목록은 --get-services 으로 확인 가능

firewall-cmd --get-services


RH-Satellite-6 amanda-client bacula bacula-client dhcp dhcpv6 dhcpv6-client dns freeipa-ldap freeipa-ldaps freeipa-replication ftp high-availability http https imaps ipp ipp-client ipsec iscsi-target kerberos kpasswd ldap ldaps libvirt libvirt-tls mdns mountd ms-wbt mysql nfs ntp openvpn pmcd pmproxy pmwebapi pmwebapis pop3s postgresql proxy-dhcp radius rpc-bind rsyncd samba samba-client smtp ssh telnet tftp tftp-client transmission-client vdsm vnc-server wbem-https

permanent 로 등록된 서비스 목록

dmz 존에 영구적으로 등록된 서비스 목록 확인
firewall-cmd --permanent --list-all --zone=dmz


서비스 추가

--add-service=SERVICE_NAME 으로 추가할 서비스 지정

firewall-cmd --permanent --zone=dmz --add-service=http
firewall-cmd --permanent --zone=dmz --add-service=https


서비스 삭제

--remove-service=SERVICE_NAME 으로 삭제할 서비스 지정

firewall-cmd --permanent --zone=dmz --remove-service=http

포트 추가

--add-port=<portid>[-<portid>]/<protocol> 옵션을 사용하여 포트 추가

포트 추가/변경, IP 추가/변경는 --reload 옵션을 실행해야 반영됨.

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

포트를 범위로 지정하려면 - 구분자를 넣어서 설정

4000 ~ 4100 포트 오픈
firewall-cmd --permanent --zone=public --add-port=4000-4100/tcp


포트 삭제

--remove-port=<portid>[-<portid>]/<protocol> 옵션 사용

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

허용 IP 추가

--add-source=<source range>/netmask 옵션을 사용하여 IP 추가


아래 예는 192.168.1. 대역에서 ssh 접근을 허용

firewall-cmd --permanent --zone=public --add-source=192.168.1.0/24 --add-port=22/tcp


firewall-cmd --reload

rich-rule

보다 복잡한 규칙 설정이 필요할때나 firewall-cmd에서 필요로 하는 옵션을 제공하지 않을 경우 rich rule 언어를 사용하여 직접 방화벽 규칙을 설정할 수 있음.

새로운 룰 추가는 --add-rich-rule='<rule>' 와 같은 형식으로 설정


firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4"  source address="192.168.10.0/24"  port protocol="tcp" port="9000" accept"



direct

--direct 옵션을 사용하면 기존의 iptables 명령처럼 직접 방화벽 내부에 접근해서 설정할 수 있음

$ sudo firewall-cmd  --direct --get-all-rules

ipv4 filter INPUT 0 -p tcp -m multiport --dports ssh -m set --match-set fail2ban-sshd src -j REJECT --reject-with icmp-port-unreachable



firewall-cmd --direct --add-rule ipv4 nat POSTROUTING 0 -o eth_ext -j MASQUERADE


서비스 설정

웹 서버 방화벽 설정

  1. 새로운 zone 생성

    firewall-cmd --permanent --new-zone=webserver
  2. 활성화

    firewall-cmd --set-default-zone=webserver  
  3. 방화벽에 포트 추가

    firewall-cmd --permanent --zone=webserver --add-service=http
    firewall-cmd --permanent --zone=webserver --add-service=https

    기본 zone이 webserver 이므로 --zone=webserver 옵션은 생략 가능

  4. firewalld 재시작

    firewall-cmd --reload
  5. 정상 설정 여부 확인

    firewall-cmd --list-services   --zone=webserver
     
    dhcpv6-client http https ssh

apache 웹서버 설정

  1. 서비스 활성화

    systemctl enable httpd
  2. 서비스 시작

    systemctl start httpd

nginx 설정

  1. 기존에 아파치 httpd 가 설치되어 있으면 비활성화

    systemctl stop httpd
    systemctl disable httpd
  2. 서비스 활성화

    systemctl enable nginx.service
  3. 시작

    systemctl start nginx.service



같이 보기

Ref



Related content

firewalld 방화벽 사용
firewalld 방화벽 사용
More like this
RHEL/CentOS 8 주요 변경 사항
RHEL/CentOS 8 주요 변경 사항
More like this
RHEL/CentOS 7 에 TLS 1.3 적용하기(OpenSSL 1.1 & Nginx compile)
RHEL/CentOS 7 에 TLS 1.3 적용하기(OpenSSL 1.1 & Nginx compile)
More like this
SELinux
More like this
wsl 2 에서 Windows Host 연결하기
wsl 2 에서 Windows Host 연결하기
More like this
RHEL/CentOS 8 network 설정 반영
RHEL/CentOS 8 network 설정 반영
More like this