Categories: 활용하기

SELinux를 사용하는 서버에서 특정 서비스 포트 변경하기

SELinux를 사용하는 서버에서 특정 서비스 포트 변경하기


SELinux (Secure Enhanced Linux/보안 강화 리눅스)는 최신 리눅스 운영체제에 적용된 향상된 보안 정책 모듈입니다.

이 모듈을 사용하여 세부적으로 접근 권한을 설정할 수 있다는 것은 장점이지만, 간혹 이유 모를 원인으로 발생하는 에러들의 일부가 SELinux가 켜져있어서 발생하기 때문에 리눅스 관리에 있어 다소 불편할 수 있습니다.

▲ SElinux가 켜져 있을 때 모습

이 때문에 SELinux를 사용할 때 시스템 보안 정책에 의해 특정 서비스 포트를 변경하려고 하면 아래 메세지가 출력되며 거부될 수 있습니다.

Redirecting to /bin/systemctl restart sshd.service
Job for sshd.service failed because the control process exited with error code. See "systemctl status sshd.service" and "journalctl -xe" for details.
(위 메세지는 SSH 데몬 설정에서 22번 기본 포트를 변경하려고 할 시에 발생하는 메세지 입니다.)

 

Journalctl 관련된 에러 메세지는 주로 설정 파일의 문법 오류로도 나타나지만 SELinux로 인해 서비스 포트 변경이 차단 되어서 나타나기도 합니다.

SSH 포트를 변경할 경우 /etc/ssh/sshd_config 파일을 살펴보면 아래와 같이 SELinux가 켜져있을 때의 조치를 안내하고 있습니다.

# If you want to change the port on a SELinux system, you have to tell
# SELinux about this change.
# semanage port -a -t ssh_port_t -p tcp #PORTNUMBER

 

보통 이와 같은 문제를 해결하기 위해 주로 SELinux 자체를 끄고는 하지만, 이 글에서는 SELinux를 끄지 않고 포트 변경을 수행하는 방법을 알려드리고자 합니다.

 

먼저, semanage 명령어를 사용하기 위해 아래 패키지를 설치합니다. 이미 해당 명령어를 사용할 수 있다면 건너뛰셔도 됩니다.

# yum install policycoreutils-python

 

다음으로, semanage 명령어를 Root 권한으로 실행합니다. 예로 22번을 사용하는 SSH 서비스 포트를 7777 포트로 변경하고자 하면 아래 명령어로 포트 변경을 요청할 수 있습니다.

# semanage port -a -t ssh_port_t -p tcp 7777

 

usage: semanage port [-h] [-n] [-N] [-S STORE] [ –add -t TYPE -p PROTOCOL -r RANGE ( port_name | port_range ) | –delete -p PROTOCOL ( port_name | port_range ) | –deleteall | –extract | –list -C | –modify -t TYPE -p PROTOCOL -r RANGE ( port_name | port_range ) ] -a, –add Add a record of the port object type
-t TYPE, –type TYPE SELinux Type for the object
-p PROTO, –proto PROTO
Protocol for the specified port (tcp|udp) or internet protocol version for the specified node (ipv4|ipv6).

 

적용이 완료되었다면 이제 포트 변경을 수행할 수 있습니다.

위 예시에서는 /etc/ssh/sshd_config 파일에서 Port7777 로 변경했는지 확인한 후, systemctl restart sshd 또는 service sshd restart 를 실행하여 포트 변경 후 적용이 되는지 확인할 수 있습니다. (Journalctl 관련 메세지가 출력되지 않으면 됩니다.)

만약 변경한 포트가 방화벽에 의해 차단되어 있다면 이를 해제해주어야 합니다.

단, 서버마다 사용 중인 방화벽 프로그램이 다를 수 있기 때문에 서버에서 사용되는 방화벽 소프트웨어를 먼저 확인해보아야 합니다. 각 방화벽 프로그램별로 7777번 포트를 허용해보겠습니다.

아래는 iptables의 방화벽 규칙 추가 예시입니다.

[root@localhost ~]# iptables -A INPUT -p tcp -m tcp --dport 7777 -j ACCEPT

아래는 firewalld의 방화벽 규칙 추가 예시입니다.

[root@localhost ~]# firewall-cmd --zone=public --add-port=7777/tcp --permanent

아래는 ufw의 방화벽 규칙 추가 예시입니다.

[root@localhost ~]# ufw allow 7777/tcp

 

이런 방식으로 SELinux를 끄지 않고 포트 변경을 할 수 있습니다.

JooTC

안녕하세요. 테크놀로지에 관심이 많은 블로거입니다.

View Comments

  • 방화벽을 해제하는부분이 없어서 해멨어요;;;;
    firewall-cmd --permanent --zone=public --add-port=해당포트/tcp
    firewall-cmd --reload
    해주셔야 해요

    • 방화벽 규칙 허용에 관한 내용을 언급하는걸 잊었었나봅니다..ㅠㅠ
      말씀하신대로 포스트 내용을 보충했습니다. 감사합니다!

Recent Posts

Zalgo 텍스트와 이를 방지하는 방법

인터넷 커뮤니티 사이트에서 게시글이나 댓글에 간혹 장난을 목적으로 작성된 특이한 글자를 볼 수 있습니다. 위…

4주 ago

리눅스 kill, killall 명령어 – 특정 프로세스 종료하기

리눅스 명령어 - kill, killall 리눅스 kill 명령어는 특정 프로세스를 종료해주는 명령어입니다. 백그라운드에서 실행되고 있는…

4주 ago

JavaScript typeof null이 ‘object’인 이유

JavaScript는 역사가 긴 스크립트 프로그래밍 언어입니다. 세월이 흐르면서 많은 자바스크립트 표준이 만들어졌고, 현재는 많은 문법적…

1개월 ago

Mocha Error: Resolution method is overspecified. 해결 방법

NodeJS 테스트 프레임워크인 Mocha는 비동기 테스트를 지원합니다. 간혹 특정 테스트 스크립트를 작성하고 실행하면 아래와 같이…

1개월 ago

윈도우 11 설치 시 Microsoft 계정 로그인 없이 로컬 계정 만들기

언제부턴가 윈도우 11을 처음 설치할 때 마이크로소프트(Microsoft) 계정 로그인을 강제로 요구하게 되었습니다. 물론 마이크로소프트 계정이…

6개월 ago

에어팟 프로 2 케이스 스피커 소리를 완전히 끄는 방법

애플 에어팟 프로 2 (AirPods Pro 2) 케이스에는 스피커가 내장되어 있습니다. 그런데 간혹 아무 것도…

9개월 ago