방화벽

김상우·2022년 8월 1일
0
post-thumbnail

시스템을 접하게 될때 CLI 환경으로 접하게 되는 경우가 많다.
어떠한 서비스를 사용하기 위해 특정 포트로 접속하는데 방화벽에서 포트를 열어주지 않으면 서비스를 실행할 수 없게 된다.
특히나 CLI 환경에서 방화벽을 확인하고 설정할 수 있는 명령어에 대해서 포스트 해보았다.
특히 이번 포스트는 centos 8을 기준으로 작성했으며, iptables와 firewalld 중 firewalld에 대해 다뤄보았다.

iptables와 firewalld의 차이점

  • iptables
    • iptables를 통한 방화벽 시스템에서는 설정 변경 사항이 있을 때 마다 모든 규칙이 삭제되고 다시 적용된다.
    • 설정 상세 정보는 /etc/sysconfig/iptables에 저장된다.
  • firewalld
    • firewalld는 설정 변경 사항이 있을 때 마다 변경된 설정 차이만을 적용한다.
    • 설정 상세 정보는 /usr/lib/firewalld 및 /etc/firewalld 의 다양한 파일에 저장된다.

기본 명령어

  • 방화벽 데몬 설치 및 활성화
[root@localhost ~]# dnf install -y firewalld
[root@localhost ~]# systemctl start firewalld
[root@localhost ~]# systemctl enable firewalld

사용하는 리눅스또는 버전에 따라 dnf가 아닌 yum, apt-get 등을 사용할 수 있다.

  • --permanent 옵션

    • --permanent 옵션은 입력하고 있는 명령어에 대해 영구적으로 설정을 적용하라는 의미를 담고 있다.
    • 만약 이 옵션을 사용하지 않고 명령문을 입력하게 된다면 시스템을 재부팅 및 재실행했을 때 적용한 방화벽 규칙이 사라지게 된다.
    • 방화벽을 추가하는 목적이 일회성이라면 이 옵션을 사용하지 않아도 되지만 서버의 목적에 맞게 방화벽 규칙을 추가해야하는 목적이라면 --permanent 옵션을 꼭 사용해야한다.
  • 방화벽 동작 여부 및 zone 확인

[root@localhost ~]# firewall-cmd --state
[root@localhost ~]# firewall-cmd --get-active-zone
[root@localhost ~]# firewall-cmd --get-default-zone
[root@localhost ~]# firewall-cmd --zone=public --list-all

방화벽 동작 여부 확인
방화벽 활성 zone 확인
방화벽 기본 zone 확인
zone 기준의 방화벽 활성 서비스 및 포트 확인

  • zone 추가 및 삭제
[root@localhost ~]# firewall-cmd --permanent --new-zone=[zone name]
[root@localhost ~]# firewall-cmd --permanent --delete-zone=[zone name]

zone 생성
zone 삭제

  • 포트 추가 및 삭제 (default zone이 public이므로 zone을 public으로 작성했다.)
[root@localhost ~]# firewall-cmd --permanent --zone-public --add-port=[port number]/[tcp/udp]
[root@localhost ~]# firewall-cmd --permanent --zone-public --remove-port=[port number]/[protocol]

방화벽 포트 추가
방화벽 포트 삭제

  • 22번 포트를 추가하는 예시
    [root@localhost ~]# firewall-cmd --permanent --zone-public --add-port=22/tcp

예시에서 보이는 것처럼 port number에서는 추가 및 삭제할 포트번호를 입력하고 활성화 하기 위한 프로토콜을 뒤에 입력한다.
삭제 명령어 또한 동일하게 작성한다.

  • 추가 및 삭제하기 위한 포트번호가 생각나지 않을 때
    [root@localhost ~]# firewall-cmd --permanent --zone=public --add-service=ssh/tcp

이 방법은 포트가 정해져있는 서비스의 포트가 생각나지 않을때 port 대신 service 명령어를 사용해 추가 및 삭제할 수 있다.

  • 허용 ip추가
[root@localhost ~]# firewall-cmd --permanent --zone=public --add-source=[source range/netmask] --add-port=[port number]/[protocol]
  • 예시
    [root@localhost ~]# firewall-cmd --permanent --zone=public --add-source=192.168.0.1/24 --add-port=22/tcp

public zone에 22번 포트에 해당하는 ssh를 추가하는 명령문이다.
기본 포트 추가나 서비스 추가하는 명령어에 --add-source=[source range/netmask]부분을 추가한다.
--add-source 뒷부분은 허용할 ip와 그 ip의 서브넷마스크(prefix)를 작성한다.

  • 설정 적용 및 상태 확인
[root@localhost ~]# firewall-cmd --reload
[root@localhost ~]# netstat -tulpn | grep LISTEN

웹 서버를 예시로 방화벽 설정 과정

  • 새로운 zone 생성 및 서비스 추가 과정
[root@localhost ~]# firewall-cmd --permanent --new-zone=webserver
[root@localhost ~]# firewall-cmd --permanent --set-default-zone=webserver
[root@localhost ~]# firewall-cmd --permanent --add-service=http
[root@localhost ~]# firewall-cmd --permanent --add-port=443/tcp
[root@localhost ~]# firewall-cmd --reload
[root@localhost ~]# firewall-cmd --list-services --zone-webserver
  1. webserver라는 이름의 zone을 새로 생성한다.
  2. default zone을 webserver로 설정한다.
  3. --add-service 명령어를 통해 http 서비스를 추가한다.
  4. --add-port 명령어를 통해 443포트를 추가한다.
    (443 포트는 https이다.)
  5. 방화벽을 재실행하여 변경사항이 적용될 수 있게 한다.
  6. webserver zone에 추가된 방화벽 규칙을 확인한다.

위 예시에서 본 설정과정 중 서비스 및 포트를 추가하는 과정에서 --zone=webserver를 생략한 이유는 두 번째 명령어에서 default zone을 webserver로 설정했기 때문에 생략한 것이다.
만약 default zone을 public에서 새로운 zone으로 변경하지 않았다면 서비스 및 포트 추가하는 명령문에 --zone=webserver를 추가 후 작성해야한다.

profile
아침엔 운동하고 밤엔 잠을 잔다.

0개의 댓글