본문 바로가기

리눅스

[draft] CentOS 7에서 방화벽을 설정하는 방법

728x90

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:
728x90

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>

 

728x90