시스템을 접하게 될때 CLI 환경으로 접하게 되는 경우가 많다.
어떠한 서비스를 사용하기 위해 특정 포트로 접속하는데 방화벽에서 포트를 열어주지 않으면 서비스를 실행할 수 없게 된다.
특히나 CLI 환경에서 방화벽을 확인하고 설정할 수 있는 명령어에 대해서 포스트 해보았다.
특히 이번 포스트는 centos 8을 기준으로 작성했으며, iptables와 firewalld 중 firewalld에 대해 다뤄보았다.
[root@localhost ~]# dnf install -y firewalld
[root@localhost ~]# systemctl start firewalld
[root@localhost ~]# systemctl enable firewalld
사용하는 리눅스또는 버전에 따라 dnf가 아닌 yum, apt-get 등을 사용할 수 있다.
--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 기준의 방화벽 활성 서비스 및 포트 확인
[root@localhost ~]# firewall-cmd --permanent --new-zone=[zone name]
[root@localhost ~]# firewall-cmd --permanent --delete-zone=[zone name]
zone 생성
zone 삭제
[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 명령어를 사용해 추가 및 삭제할 수 있다.
[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
[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
- webserver라는 이름의 zone을 새로 생성한다.
- default zone을 webserver로 설정한다.
- --add-service 명령어를 통해 http 서비스를 추가한다.
- --add-port 명령어를 통해 443포트를 추가한다.
(443 포트는 https이다.)- 방화벽을 재실행하여 변경사항이 적용될 수 있게 한다.
- webserver zone에 추가된 방화벽 규칙을 확인한다.
위 예시에서 본 설정과정 중 서비스 및 포트를 추가하는 과정에서 --zone=webserver를 생략한 이유는 두 번째 명령어에서 default zone을 webserver로 설정했기 때문에 생략한 것이다.
만약 default zone을 public에서 새로운 zone으로 변경하지 않았다면 서비스 및 포트 추가하는 명령문에 --zone=webserver
를 추가 후 작성해야한다.