2019년 9월 10일 화요일

CentOS 7.x 에서의 Port 관리법


CentOS 7.x 에서의 Port 관리법


개요

포트를 오픈하려고 iptables 명령을 사용했다. 그런데 아무런 반응이 없었다.
iptables -I INPUT -p tcp --dport 8889 -j ACCEPT

그리고 iptables을 재실행할라하니 다음과 같은 에러를 확인했다.
$ /etc/init.d/iptables restart
Failed to restart iptables.service: Unit not found.
이에 해당 문제를 해결하고자 찾아보았더니 CentOS 7.x에서는 iptables 대신 firewall을 채용했다고 한다.


iptables 대신 firewall을 사용하게된 이유

Redhat Products & Servies의 4.11. 보안 및 액세스 제어에는 다음과 같은 설명이 나온다.

4.11.1. 새로운 방화벽 (firewalld)


Red Hat Enterprise Linux 6에서 방화벽 기능은 iptables 유틸리티에 의해 제공되어 명령행이나 그래픽 설정 도구, system-config-firewall에서 설정되었습니다. Red Hat Enterprise Linux 7에서 방화벽 기능은 iptables에 의해 제공되지만 관리자는 동적 방화벽 데몬, firewalld, 설정 도구를 통해 iptables와 상호 작용합니다. 설정 도구에는 firewall-configfirewall-cmdfirewall-applet이 있으며 이는 Red Hat Enterprise Linux 7 기본값 설치에 포함되어 있지 않습니다.
firewalld는 동적이기 때문에 언제든지 설정을 변경할 수 있고 바로 실행됩니다. 방화벽을 다시 로딩할 필요가 없으므로 기존 네트워크 연결에서 의도하지 않은 중단이 발생하지 않습니다.
Red Hat Enterprise Linux 6와 7 간의 방화벽에서의 주요 차이점은 다음과 같습니다:

  • 방화벽 설정에 대한 자세한 내용은 /etc/sysconfig/iptables에 저장되어 있지 않고 이 파일이 존재하지도 않습니다. 대신 설정 상세 정보는 /usr/lib/firewalld 및 /etc/firewalld 디렉토리에 있는 다양한 파일에 저장됩니다.
  • Red Hat Enterprise Linux 6의 방화벽 시스템에서는 설정 변경 사항이 있을 때 마다 모든 규칙이 삭제되고 다시 적용되어 firewalld는 설정 차이만을 적용합니다. 그 결과 firewalld는 기존 연결을 중단하지 않고 런타임 동안 설정을 변경할 수 있습니다.

그리고, firewalld concept and configuration의 Page-5를 보면 다음과 같이 필요성에 대해 서술한다.
첨언하자면, iptables과 firewall의 장단에 대해서는 이래저래 말들이 많은 듯 하다. 새롭게 나온 기능이다보니 으례 발생하는 과도기적 충돌이겠거니 싶다.ㅎㅎ


iptables vs firewall

firewall로 변경되었다고는 하나, 다음과 같이 firewall을 중지시키고 iptables를 설치해서 기존처럼 사용하는 것도 가능하다.
$ systemctl stop firewalld
$ systemctl mask firewalld
$ yum install iptables-services
$ systemctl enable iptables
$ service iptables save
※ 결국, firewalld를 사용할지 iptables를 사용할지는 본인의 선택이다.


firewall의 설정법

맨 처음, 혹시 몰라 yum update 를 해 주었다. ㅡㅡ;;
systemctl enable firewalld
systemctl start firewalld
systemctl stop firewalld
systemctl disable firewalld

방화벽을 사용설정 하였다면 이제 방화벽 상태를 확인하자.

firewall-cmd --state
firewall-cmd --get-zones
firewall-cmd --get-default-zone
firewall-cmd --get-active-zones
firewall-cmd --list-all
firewall-cmd --zone=public --list-all

상태를 확인하였으니, 새로운 서비스/포트를 추가해보자.

참고로 시스템 재부팅 또는 방화벽 재시작 후에도 지속적용 되도록 하려면 --permanent 옵션을 붙인다.


Add FTP Service

firewall-cmd --permanent --add-service=ftp


Delete FTP Service

firewall-cmd --remove-service=ftp


Add FTP Port

firewall-cmd --permanent --add-port=21/tcp


Delete FTP Port

firewall-cmd --remove-port=21/tcp


Add HTTP Service

firewall-cmd --permanent --zone=webserver --add-service=http


Add HTTP port

firewall-cmd --permanent --zone=webserver --add-port=9090-9100/tcp


Delete HTTP port

firewall-cmd --permanent --zone=webserver --remove-port=9090-9100/tcp 


중요) 설정내용을 Reload 해야만 적용된다.

firewall-cmd --reload




CENTOS 7.x 이상에서의 포트열기/닫기 (iptables, firewall-cmd)

iptables 이 더이상 유효하지 않게됨.
firewall-cmd로 대체되어 다른 방식으로 포트관리를 해 줘야함.
iptables -I INPUT -p tcp --dport 8889 -j ACCEPT
> 기존 명령을 하면 아무 반응은 없으나 포트개방(혹은 폐쇄)은 불가능.

firewall-cmd 명령을 통해 포트를 관리.

0.
혹시모르니 yum update 

1. 방화벽 사용상태 확인
firewall-cmd --state 

2. Firewall 사용
yum install firewalld systemctl start firewalld systemctl enable firewalld 

3. 정책확인
firewall-cmd  --get-zones 

4. 전체 정책 자세히보기
firewall-cmd --list-all-zones 

5. 활성화 상태확인
firewall-cmd --get-active-zone 

6. 변경정책 적용 (포트, 아이피 추가/변경은 --reload 옵션으로 반드시 재실행해야됨)
firewall-cmd --reload 

7-1. FTP 서비스 사용 예.
firewall-cmd --permanent --add-service=ftp 

7-2. HTTP 서비스 사용 예.
firewall-cmd --permanent --zone=webserver --add-service=http 

8-1. FTP(21)포트 개방 예.
firewall-cmd --permanent --add-port=21/tcp 

8-2. 9090에서 9100포트까지 개방 예.
firewall-cmd --permanent --zone=webserver --add-port=9090-9100/tcp 

8-3. 임의포트로 8080포트 개방 예.
firewall-cmd --zone=public --permanent --add-port=8080/tcp 

9. 9090에서 9100포트까지 삭제 예.
firewall-cmd --permanent --zone=webserver --remove-port=9090-9100/tcp