CentOS 7 Firewalld 에서 특정 소스에서만 접근 가능하게 설정해보기

CentOS 7 Firewalld 를 설치하면 기본 영역이 'public' 으로 되어 있는데,
이 영역은 기본적으로 포트나 서비스등 룰을 추가할 경우 특정하지 않는 경우
모든 소스에 대해 허용하는 설정이므로, 특정한 소스에 대해서만 접근 가능하게
하는 설정을 기본적으로 할 수 없다.

방화벽을 운영하다 보면 들어오는 것에 대해 모두 막은 다음,
특정한 소스(source)에 대해 목적지(destination)로 가는 서비스 또는 포트를
허용(accept) 하는 것으로 보통 설정한다.

이것을 규칙(rule) 이라고도 하는데, 이러한 규칙은 규칙의 순서, 즉, 먼저 만들어진
규칙을 적용받은 후 다음 규칙을 적용받는 형식이다.

예를들면,  소스 A(192.168.3.4/32)에서 목적지 B로 80(http) 을 허용하는 규칙이
먼저 만들어진 상황에서 소스 A가 속한 네트워크 AA(192.168.3.0/24)에서 목적지
B로 80(http) 을 거부(reject) 하는 규칙이 만들어진 경우,
소스 A 는 목적지로 접근이 가능하고, 나머지 소스 A가 속한 네트워크의 다른
소스는 접근이 거부된다. 사실 이 두번째 규칙은 의미가 없다.
소스 A를 제외하곤 이미 모든 소스에 대해 막혀 있기 때문이다.

CentOS 7 firewalld 에서 특정 소스에서만 접근 가능하게 설정하려면,
기본 영역(zone)을 차단(block) 영역으로 변경한 후 설정하면 가능하다.

운영하는 웹서버로 사내의 모든 네트워크 대역의 특정 IP 에서만 http(80) 로
접근이 가능하게 설정하려면 아래와 같이 설정이 가능하다.

방화벽 설정 변경에는 관리자 권한이 필요하다.

예에서는 root 사용자로 CLI 를 이용하여 설정하는 과정이다.

우선 firewalld 의 영역(zone)을 확인할 수 있는데,

[root@localhost ~]# firewall-cmd --get-zones
block dmz drop external home internal public trusted work

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

기본 영역을 public 에서 block 로 변경
[root@localhost ~]# firewall-cmd --set-default-zone=block
[root@localhost ~]# firewall-cmd --get-default-zone
block

또는 /etc/firewalld/firewalld.conf 파일에서
DefaultZone=block
로 변경 저장 후 firewalld 를 재시작 하면 적용된다.

기본 영역을 block 로 변경 후 영역에 대한 정보를 확인하면,
[root@localhost ~]# firewall-cmd --info-zone=block
block (active)
  target: %%REJECT%%
  icmp-block-inversion: no
  interfaces: eno16777984
  sources:
  services:
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

block 영역의 기본 target 에 대한 정책은 REJECT 임을 알 수 있는데,
이는 기본적으로 모든 소스에 대해 막는다는 의미이다.

이제는 허용하고자 하는 소스와 포트 또는 서비스 규칙을 설정해 보자.

운영되고 있는 테스트 웹 서버에 한 개발자 IP(192.168.1.5) 만 http(80) 서비스로
접근할 수 있게 설정해 보자.

[root@localhost ~]# firewall-cmd --permanent --zone=block --add-rich-rule="rule family="ipv4" source address="192.168.1.5/32" port protocol="tcp" port="80" accept"

success
[root@localhost ~]#

설명]
--permanent  : 영구적으로 적용 (firewalld 재시작 시에도 적용됨)

영역에 정책이 추가되었는지 확인해 보자.
[root@localhost ~]# firewall-cmd --info-zone=block
block (active)
  target: %%REJECT%%
  icmp-block-inversion: no
  interfaces: eno16777984
  sources:
  services:
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:      rule family="ipv4" source address="192.168.1.5/32" port port="80" protocol="tcp" accept
[root@localhost ~]#

rich rules: 에 추가 되어 있다.
firewalld 재시작하여 적용한다.
[root@localhost ~]#firewall-cmd --reload

이제 해당 소스 IP 인 192.168.1.5 에서만 테스트 웹서버 웹 페이지에 접근이 가능하다.



CentOS 7 Firewalld 에 대한 참고 링크
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/security_guide/sec-using_firewalls


댓글

이 블로그의 인기 게시물

2010년 9월 18일 내풀로 28회 공연