CentOS 7에서 방화벽(firewalld)을 설정하는 방법
방화벽 서비스를 사용하여 규칙을 정의하고 관리하는 방식입니다. firewalld는 동적으로 방화벽 규칙을 관리하고 firewalld 명령어와 firewall-cmd 명령어를 통해 방화벽 설정을 쉽게 조정할 수 있습니다.
1. 방화벽 시작 및 상태 확인
방화벽 서비스 상태 확인
sudo systemctl status firewalld
방화벽 서비스 비활성화 및 중지(끄기)
sudo systemctl --now disable firewalld
방화벽 서비스 활성화 및 시작(부팅 시 자동 시작하도록 설정)
sudo systemctl --now enable firewalld
방화벽 상태 확인
sudo firewall-cmd --state
$ sudo firewall-cmd --state
running
2. 방화벽 기본 설정 확인
방화벽에 설정된 기본 영역과 규칙을 확인할 수 있습니다.
기본 영역 확인
sudo firewall-cmd --get-default-zone
public
기본 영역에서 허용된 서비스 목록 확인
sudo firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: enp0s3
sources:
services: dhcpv6-client ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
public 영역에 적용된 규칙 확인
sudo firewall-cmd --zone=public --list-all
public 영역에 적용된 영구적인 규칙 확인
sudo firewall-cmd --list-all --permanent
public 영역에서 활성화된 서비스 목록 확인
sudo firewall-cmd --zone=public --list-services
dhcpv6-client ssh
방화벽에서 사용할 수 있는 모든 서비스 목록 확인
sudo firewall-cmd --get-services
RH-Satellite-6 amanda-client amanda-k5-client amqp amqps apcupsd audit bacula bacula-client bgp bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc ceph ceph-mon cfengine condor-collector ctdb dhcp dhcpv6 dhcpv6-client distcc dns docker-registry docker-swarm dropbox-lansync elasticsearch etcd-client etcd-server finger freeipa-ldap freeipa-ldaps freeipa-replication freeipa-trust ftp ganglia-client ganglia-master git gre high-availability http https imap imaps ipp ipp-client ipsec irc ircs iscsi-target isns jenkins kadmin kerberos kibana klogin kpasswd kprop kshell ldap ldaps libvirt libvirt-tls lightning-network llmnr managesieve matrix mdns minidlna mongodb mosh mountd mqtt mqtt-tls ms-wbt mssql murmur mysql nfs nfs3 nmea-0183 nrpe ntp nut openvpn ovirt-imageio ovirt-storageconsole ovirt-vmconsole plex pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy proxy-dhcp ptp pulseaudio puppetmaster quassel radius redis rpc-bind rsh rsyncd rtsp salt-master samba samba-client samba-dc sane sip sips slp smtp smtp-submission smtps snmp snmptrap spideroak-lansync squid ssh steam-streaming svdrp svn syncthing syncthing-gui synergy syslog syslog-tls telnet tftp tftp-client tinc tor-socks transmission-client upnp-client vdsm vnc-server wbem-http wbem-https wsman wsmans xdmcp xmpp-bosh xmpp-client xmpp-local xmpp-server zabbix-agent zabbix-server
3. 포트 및 서비스 열기
특정 서비스 허용
- --permanent 옵션은 방화벽 규칙을 영구적으로 적용합니다. 옵션을 생략하면 다음 재부팅 시 규칙이 초기화됩니다.
- --zone=public은 규칙을 적용할 네트워크 영역을 지정합니다. 기본 영역은 보통 public입니다.
FTP 서비스를 방화벽에 추가(임시{reload 시 정책이 사라짐}, 재부팅 시 초기화됨)
sudo firewall-cmd --add-service=ftp
success
HTTP 서비스를 public 영역에 영구적으로 추가
sudo firewall-cmd --zone=public --add-service=http --permanent
HTTPS 서비스를 public 영역에 영구적으로 추가
sudo firewall-cmd --zone=public --add-service=https --permanent
DHCP 서비스를 public 영역에 영구적으로 추가
sudo firewall-cmd --zone=public --add-service=dhcp --permanent
DNS 서비스를 public 영역에 영구적으로 추가
sudo firewall-cmd --zone=public --add-service=dns --permanent
NTP(Network Time Protocol) 서비스를 public 영역에 영구적으로 추가
sudo firewall-cmd --zone=public --add-service=ntp --permanent
TFTP(Trivial File Transfer Protocol) 서비스를 public 영역에 영구적으로 추가
sudo firewall-cmd --zone=public --add-service=tftp --permanent
public 영역에 적용된 규칙 확인
$ sudo firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: enp0s3
sources:
services: dhcpv6-client ftp ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
public 영역에 적용된 영구적인 규칙 확인
$ sudo firewall-cmd --list-all --permanent
public
target: default
icmp-block-inversion: no
interfaces:
sources:
services: dhcp dhcpv6-client dns http https ntp ssh tftp
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
특정 포트 허용
포트 8080
sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
규칙 적용 후 재로드
sudo firewall-cmd --reload
public 영역에 적용된 규칙 확인
$ sudo firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: enp0s3
sources:
services: dhcp dhcpv6-client dns http https ntp ssh tftp
ports: 8080/tcp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
4. 규칙 삭제
FTP 서비스를 방화벽에서 제거
sudo firewall-cmd --remove-service=ftp
success
특정 서비스 차단
sudo firewall-cmd --zone=public --remove-service=http --permanent
DHCPv6 클라이언트 서비스를 public 영역에서 영구적으로 제거
sudo firewall-cmd --zone=public --remove-service=dhcpv6-client --permanent
public 영역에 적용된 영구적인 규칙 확인
$ sudo firewall-cmd --list-all --permanent
public
target: default
icmp-block-inversion: no
interfaces:
sources:
services: dhcp dns http https ntp ssh tftp
ports: 8080/tcp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
특정 포트 차단
sudo firewall-cmd --zone=public --remove-port=8080/tcp --permanent
규칙을 삭제한 후 재로드
sudo firewall-cmd --reload
public 영역에 적용된 규칙 확인
$ sudo firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: enp0s3
sources:
services: dhcp dns http https ntp ssh tftp
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
5. 방화벽 규칙 확인
모든 영역에서 허용된 서비스 및 포트 확인
sudo firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: enp0s3
sources:
services: dhcp dns http https ntp ssh tftp
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
특정 영역의 규칙 확인(예: public 영역)
sudo firewall-cmd --zone=public --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: enp0s3
sources:
services: dhcp dns http https ntp ssh tftp
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
6. 특정 IP 또는 IP 범위 허용
특정 IP 주소나 IP 대역을 허용하려면 --add-source 옵션을 사용합니다.
192.168.1.100 IP 주소 허용
sudo firewall-cmd --zone=public --add-source=192.168.1.100 --permanent
192.168.1.0/24 IP 범위 허용
sudo firewall-cmd --zone=public --add-source=192.168.1.0/24 --permanent
public 영역에 적용된 영구적인 규칙 확인
$ sudo firewall-cmd --list-all --permanent
public (active)
target: default
icmp-block-inversion: no
interfaces:
sources: 192.168.1.100 192.168.1.0/24
services: dhcp dns http https ntp ssh tftp
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
7. 방화벽 설정 파일
방화벽의 public 영역 XML 설정 파일을 수정(public.xml 파일)
vim /etc/firewalld/zones/public.xml
<?xml version="1.0" encoding="utf-8"?>
<zone>
<!-- 'Public' 영역의 간략한 설명 -->
<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 accepted.</description>
<!-- HTTP 서비스 허용 -->
<service name="http"/>
<!-- HTTPS 서비스 허용 -->
<service name="https"/>
<!-- NTP(Network Time Protocol) 서비스 허용 -->
<service name="ntp"/>
<!-- SSH(Secure Shell) 서비스 허용 -->
<service name="ssh"/>
<!-- DNS(Domain Name System) 서비스 허용 -->
<service name="dns"/>
<!-- DHCP(Dynamic Host Configuration Protocol) 서비스 허용 -->
<service name="dhcp"/>
<!-- TFTP(Trivial File Transfer Protocol) 서비스 허용 -->
<service name="tftp"/>
</zone>
'리눅스' 카테고리의 다른 글
[리눅스] BIND(named)에서 $GENERATE 지시어를 사용하는 방법 (0) | 2022.11.28 |
---|---|
MySQL에서 원격 접속을 허용하는 방법 (0) | 2022.11.26 |
[draft] HTTP Status Codes (0) | 2022.11.25 |
HP 서버 스토리지 정보 확인(raid) (0) | 2022.11.25 |
[리눅스] swap 메모리 초기화 (0) | 2022.11.25 |