2019년 3월 6일

SELinux 환경에서 아파치 - 톰켓 연결시 보안 오류

SELinux (Security Enhanced Linux) 는 리눅스 보안 커널의 일부로 RedHat 과 미국 NAS(National Security Agent) 간의 협업으로 배포되었다. SELinux 의 경쟁자로는 SUSE Linux Enterprise Server 의 AppArmor 이 있다.

리눅스 커널에서 SELinux 는 관리자가 설정한 규칙 및 정책에 따라 사용자의 접근을 제한하는 강제접근제어 (Mandatory Access Controls, 이하 MAC ) 을 사용한다.  MAC 방식은  임의접근제어 ( Discretionary Access Control, 이하 DAC ) 방식 보다 높은 수준의 접근 제어 방식으로 관리자가 사전에 승인한 파일들만 처리하는 방식으로 보안 침해를 방지한다.

이슈 

Apache HTTPD 와 새로운 Tomcat  연결시 8009 포트가 아닌 새로운 포트(여기에서는 8010을 사용) 를 사용하게 된다.

❶ 설정을 추가하고 서버를 다시 시작하면 Apache HTTPD 에서 Tomcat 과 연결할 수 없다는 오류가 발생하게 된다. (로그를 통하여 확인)

❷ 그러나 Tomcat 로그를 확인해보면 8010 포트로 정상 시작되었음을 로그를 통하여 확인할 수 있었다.

❸ Apache HTTPD 와  Apache Tomcat 이슈가 아닐 거라는 가정하에 리눅스 서버의 로그를 확인을 시도하였으며 /var/log/messages 로그에서 보안이슈를 확인할 수 있다.


Mar 3 10:56:21 localhost setroubleshoot: SELinux is preventing /usr/sbin/httpd from name_connect 
access on the tcp_socket port 8010. For complete SELinux messages. 
run sealert -l aa722160-f075-474c-bcd2-a2ce9535be26


문제해결

먼저 앞으로 문제해결을 위하여 사용할 기능들을 위하여 미리 (semanage , sepolicy) 다음 패키지를 설치한다.

#yum install policycoreutils-python
#yum install selinux-policy-devel

semanage 명령을 입력하여 httpd 서비스에 허용된 포트를 확인할 수 있다.

# semanage port -l | grep -w http_port_t
http_port_t                    tcp      80, 81, 443, 488, 8008, 8009, 8443, 9000


sepolicy 명령을 사용하는 방법도 있다.

# sepolicy network -t http_port_t
http_port_t: tcp: 80,81,443,488,8008,8009,8443,9000


이제 사용하려는 포트가 이미 등록되어 있는 포트는 아닌지 다음과 같이 확인한다. (이미 등록된 포트는 등록할 수 없다)

# sepolicy network -p 8010
8010: tcp unreserved_port_t 1024-32767
8010: udp unreserved_port_t 1024-32767
8010: sctp unreserved_port_t 1024-65535


이제 httpd 서비스에서 8010 포트를 사용할 수 있도록 아래과 같이 추가할 수 있다.

# semanage port -a -t http_port_t -p tcp 8010

  • 옵션 -d 를 사용하면 특정 서비스에 대하여 등록된 정책을 삭제 할 수 있다. 
  • 8010 포트가 이미 다른 서비스에 등록되어 있다면 -m 옵션을 사용한다. 


이제 아파치 서비스를 다시 시작하면 정상적으로 8010 포트를 통하여 톰켓과 접속함을 확인 할 수 있다.

결론 

SELinux 환경에서 Apache HTTPD 는 관리자에 의하여 미리 승인된 자원들에게만 접근이 가능하게 된다. 디폴트로 httpd 서비스의 경우 다음과 포트을 사용하는 것은 허용되어 있다. 그러나 이들 허용된 포트가 아닌 다른 포트를 사용하고자 하는 경우는 SELinux 정책을 수정해야 한다.

참고자료 

SELinux (Security-Enhanced Linux)
12 Critical Linux Log Files You Must be Monitoring
RHEL7: Use SELinux port labelling to allow services to use non-standard ports.

댓글 1개:

  1. 혹시 ios웹뷰 부분 코드수정 가능하신가요?
    저희가 만든 하이브리드앱이 있는데 장착한 ios웹뷰에서 주소창에 URL호출을
    잘못하네요. 말하자면 네이버 블로그 들어가면 주소창에 계속 한가지 주소만 뜨네요.다른것들은 잘 뜨는데 특수하게도 네이버 블로그, 이미지. 다음이미지 이런류들이 제 주소를 못 불러오는것 같아요 ㅜㅜ 이걸 그 현 페이지 주소가 호출될수 있게 소스코드를 만들어 주실수 있는지 입니다.
    자세한것은 통화가 가능하다면 연락 한번 부탁드립니다. 공수 하겠습니다.
    010-5512-7173 연락 부탁드려요

    답글삭제