728x90
반응형
firewall 이란


  • RHEL7부터는 방화벽을 관리하는 데몬이 firewalld로 변경되었고 방화벽 설정은 iptables 명령어 대신 firewall-cmd (콘솔), firewall-config (X-Windows) 명령어를 사용해야 한다.
  • 기존에 사용하는 iptables가 완전이 사라진 것은 아니며 firewalld는 iptables를 기반으로 동작하고 있는 것 (firewalld은 iptables를 의존 패키지로 두고 있음)
  • 방화벽에는 zone(영역)이라는 것이 존재하는데 개방된 네트워크와 연결되어 있다면 public zone(공개 영역)에 있는 룰이 적용되고, 개인 네트워크에 있다면 다른 zone의 룰을 적용할 수 있다.
    네트워크 형태에 따라 적용하는 방화벽 룰을 다르게 할 수 있다. (서버 용도로 리눅스를 사용한다면 개방된 네트워크 public zone만 필요)
  • iptables의 룰 변경시 서비스 중지 및 설정 변경을 하여야 했지만 firewall의 경우 KVM, openstack과 같은 가상화, 클라우드 환경하에서의 필터링 정책을 동적으로 추가 가능하다.
    (즉 동적이기때문에 언제든지 설정을 변경할 수 있고 바로 실행되며 방화벽을 다시 로딩할 필요가 없으므로 기존 네트워크 연결에서 의도하지 않은 중단이 발생하지 않는다.)
  • iptables의 경우 응용프로그램 자체에서 필터링 정책을 구성하는 경우 iptables 정책과 충돌되는 등의 문제가 발생하였으나 firewalld는 DBUS API를 통한 정보 공유를 통해 정책 충돌 문제를 해결한다.





firewall 구동방식


  • 설정파일은 /etc/firewalld/zones/public.xml 파일로 xml 형식으로 존재한다. 해당 파일에는 firewall-cmd --permanent --zone=public 명령으로 추가했던 룰들이 저장되어 있으며
    zone의 설정 파일을 변경할 경우 방화벽을 reload 해야 반영이 된다.
  • firewall-cmd 에서 --permanent 옵션이 들어간다면 바로 반영이 되지않고 해당 zone의 설정파일에서 룰에 대한 추가 / 수정만  이루어진다. 따라서 --permanet 옵션을 넣었다면
    방화벽을 reload 해야한다(설정파일에 추가된 룰은 영구반영). 만약 --permanet 옵션을 넣지않으면 일시적으로 즉시 반영되지만 재부팅을 할 경우 zone의 설정파일에 추가되지
    않은 룰이므로 전부 삭제가 된다.





firewall 사용법


  1.  포트

- 포트추가
# firewall-cmd --permanent --zone=public --add-port=포트
예) firewall-cmd --permanent --zone=public --add-port=80/tcp

# firewall-cmd --reload

- 포트 제거
# firewall-cmd --permanent --zone=public --remove-port=포트
예) firewall-cmd --permanent --zone=public --remove-port=80/tcp

# firewall-cmd --reload


  1.  서비스

서비스에서 사용하는 룰을 적용하려면 아래와 같이 서비스를 추가하면 된다.
단, 해당 서비스 xml 룰 파일이 /usr/lib/firewalld/services 에 있어야 사용할 수 있다.

* 서비스 추가
firewall-cmd --permanent --zone=public --add-service=서비스
예) firewall-cmd --permanent --zone=public --add-service=http

# firewall-cmd --reload

* 서비스 제거
firewall-cmd --permanent --zone=public --remove-service=서비스
예) firewall-cmd --permanent --zone=public --remove-service=http

# firewall-cmd --reload

그리고 /usr/lib/firewalld/services 디렉토리에 있는 서비스 파일들을 수정하려면 /etc/firewalld/services에 복사후 수정해야 한다.
(/etc/firewalld/services에 있는 서비스 파일들이 우선 적용되기에 관리상 편리)


  1. 임의의 룰 (Rich rule)

포트, 서비스 룰 이외에 원하는 룰을 임의로 적용할 수 있다. 예를 들면 ip차단이다.

* 룰 추가
# firewall-cmd --permanent --zone=public --add-rich-rule="임의의 룰"
예) firewall-cmd --permanent --zone=public --add-rich-rule="rule family=ipv4 source address=192.168.0.4/24 service name=http accept"

# firewall-cmd --reload

* 룰 제거
# firewall-cmd --permanent --zone=public --remove-rich-rule="임의의 룰"
예) firewall-cmd --permanent --zone=public --remove-rich-rule="rule family=ipv4 source address=192.168.0.4/24 service name=http accept"

# firewall-cmd --reload


  1. 응용예시 - http(80번 포트) 서비스에서 특정 ip 차단

웹서버를 운영하다보면 특정ip(스팸같은)를 차단시키고 싶을 때가 있다. 그럴경우 아래와 같이 임의의 룰을 활용하면 된다.

차단시)
# firewall-cmd --permanent --zone=public --add-rich-rule="rule family=ipv4 source address=차단ip service name=http reject"

차단해제시)
# firewall-cmd --permanent --zone=public --remove-rich-rule="rule family=ipv4 source address=차단ip service name=http reject"

# firewall-cmd --reload

위 명령을 실행하면 즉시 영구적으로 해당 ip를 웹사이트에 접속하지못하게 차단시킬 수 있다.
이 방법은 웹서버 자체에서 ip를 차단시키는 것보다 효과적이다.


  1. 방화벽 기타 명령어


- zone - 

* 사전 정의된 존 목록 출력
# firewall-cmd --get-zones

* 전체 존 목록을 상세하게 출력
# firewall-cmd --list-all-zones

* 기존 존 출력
# firewall-cmd --get-default-zone

* 활성화된 존 출력
# firewall-cmd --get-active-zone

* public zone에 있는 서비스 목록
# firewall-cmd --zone=public --list-services

- service -

* 현재 존재하는 서비스 목록
# firewall-cmd --get-service

permanent 로 등록된 서비스 목록
# firewall-cmd --permanent --list-all


- port -

* 허용한 포트 목록
# firewall-cmd --list-ports

- other -

* 방화벽 상태 확인
# firewall-cmd --state


반응형

'Linux' 카테고리의 다른 글

Linux Network 인터페이스 안올라옴  (0) 2018.08.08
Linux Bonding  (0) 2018.08.08
Linux Teaming  (0) 2018.08.08
Linux eth0 사용하기(RHEL 7버전 이상)  (0) 2018.08.08
Linux UEFI Booting Error  (0) 2018.08.08

+ Recent posts