Ubuntu 20.04에서 Apache 또는 Nginx를 사용하여 Tomcat 10을 보호하는 방법

Ubuntu 20.04에서 Apache 또는 Nginx를 사용하여 Tomcat 10을 보호하는 방법

2022-05-31 last update

15 minutes reading Apache Nginx Ubuntu 20.04
저자는 Free and Open Source Fund 계획의 일부로 기부를 받기로 했다.

소개


Write for DOnations는 서비스Apache Tomcat 응용 프로그램에 사용되는 웹 서버와 servlet 용기입니다.이것은 Java,Jakarta ServletJakarta Server Pages 플랫폼의 기타 기술의 개원 실현이다.
설치 후 Tomcat은 암호 또는 기타 민감한 데이터를 포함한 기본 암호화되지 않은 데이터를 제공합니다.Tomcat 설치의 보안을 위해 모든 HTTP 연결 통합Jakarta EE TLS 인증서를 사용합니다.TLS를 통합하려면 설정된 인증서를 사용하여 클라이언트와 안전하게 협상하고 요청을 Tomcat에 전달하는 역방향 에이전트를 설정할 수 있습니다.
Tomcat에서 TLS 연결을 구성할 수 있지만 Tomcat에 최신 TLS 표준과 보안 업데이트가 없기 때문에 권장하지 않습니다.이 강좌에서는 Let’s Encrypt 또는 Apache 을 사용하여 연결을 구성합니다.그것들은 모두 보편적이고 좋은 테스트를 거쳤으며, 자동화 Let's Encrypt 인증서가 제공하는 소프트웨어, 예를 들어 certbot는 Tomcat을 지원하지 않는다.Apache와 Nginx를 동시에 시도하려면 각 서버에 각각 서버를 제공해야 합니다.

선결 조건

  • Ubuntu 20.04 서버로 sudo 비root 사용자와 방화벽이 있습니다. Nginx에 따라 설정할 수 있습니다.
  • Tomcat 10을 서버에 설치하면 다음과 같이 설정할 수 있습니다Ubuntu 20.04 initial server setup guide.
  • 도메인 이름을 등록합니다.이 강좌는 시종 your_domain 을 예로 사용할 것이다.How To Install Apache Tomcat 10 on Ubuntu 20.04에서 도메인 이름을 구입하거나 Namecheap에서 도메인 이름을 무료로 받거나 선택한 도메인 이름 등록기를 사용할 수 있습니다.
  • 서버의 공용 IP 주소에 대한 DNS 레코드입니다.추가에 대한 자세한 내용은 Freenom 를 참조하십시오.
  • 옵션 1 – Apache를 리버스 에이전트로 사용


    제절 선결 조건

  • 아파치 설치 방법은 다음과 같다this introduction to DigitalOcean DNS.도메인이 있는지 확인하십시오 How To Install Apache on Ubuntu 20.04.
  • 도메인 암호화 서버에 설치된 TLS 인증서를 제공합니다.virtual host file에서 설명한 절차를 따릅니다.프롬프트가 나타나면 보안 영역으로 리디렉션할 수 있습니다.
  • 1단계 – Apache에서 가상 호스트 구성


    도메인에 기본 가상 호스트를 설정하고 "선결 조건"섹션의 "암호화 시키기"를 사용하여 보호하기 때문에 사용할 수 있는 가상 호스트가 두 개 있습니다.HTTPS 트래픽을 구성하는 것만 편집하면 됩니다.나열하려면 다음 명령을 실행하여 Apache 구성을 표시합니다.
    1. sudo apache2ctl -S
    출력은 다음과 같습니다.
    Output
    ... VirtualHost configuration: *:443 your_domain (/etc/apache2/sites-enabled/your_domain-le-ssl.conf:2) *:80 your_domain (/etc/apache2/sites-enabled/your_domain.conf:1) ServerRoot: "/etc/apache2" Main DocumentRoot: "/var/www/html" Main ErrorLog: "/var/log/apache2/error.log" Mutex watchdog-callback: using_defaults Mutex rewrite-map: using_defaults Mutex ssl-stapling-refresh: using_defaults Mutex ssl-stapling: using_defaults Mutex ssl-cache: using_defaults Mutex default: dir="/var/run/apache2/" mechanism=default PidFile: "/var/run/apache2/apache2.pid" Define: DUMP_VHOSTS Define: DUMP_RUN_CFG User: name="www-data" id=33 Group: name="www-data" id=33
    HTTPS 구성을 제공하는 파일은 /etc/apache2/sites-enabled/your_domain-le-ssl.conf 입니다.다음 명령을 실행하여 도메인 이름 대신 your_domain 을 열고 편집합니다.
    1. sudo nano /etc/apache2/sites-enabled/your_domain-le-ssl.conf
    이 파일은 다음과 유사합니다.
    /etc/apache2/sites enabled/your\u domain-le-ssl.형태
    <IfModule mod_ssl.c>
    <VirtualHost *:443>
        ServerAdmin [email protected]
        ServerName your_domain
        ServerAlias www.your_domain
        DocumentRoot /var/www/your_domain.conf
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
    
    SSLCertificateFile /etc/letsencrypt/live/your_domain/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/your_domain/privkey.pem
    Include /etc/letsencrypt/options-ssl-apache.conf
    </VirtualHost>
    </IfModule>
    
    강조 표시된 행 추가VirtualHost:
    /etc/apache2/sites enabled/your\u domain-le-ssl.형태
    ...
        CustomLog ${APACHE_LOG_DIR}/access.log combined
        
        ProxyPreserveHost On
        ProxyPass / http://127.0.0.1:8080/
        ProxyPassReverse / http://127.0.0.1:8080/
    ...
    
    이 세 가지 강조 표시된 명령은 아파치가 Tomcat과 외부 세계 간의 양방향 통신을 활성화하고 HTTP 헤더 값을 유지하도록 지시한다.완료되면 파일을 저장하고 닫습니다.
    Tomcat에 트래픽 에이전트를 설치하도록 Apache에 지시했지만 기본적으로 활성화되지 않았습니다.

    2단계 – 새로운 Apache 구성 테스트


    이 단계에서는 에이전트 연결에 편리한 아파치 모듈인 mod_proxymod_proxy_http 을 사용합니다.다음 명령을 실행하여 활성화합니다.
    1. sudo a2enmod proxy
    2. sudo a2enmod proxy_http
    그런 다음 다음을 입력하여 구성을 확인합니다.
    1. sudo apache2ctl configtest
    출력은 Syntax OK 로 끝내야 합니다.오류가 있으면 방금 수정한 구성을 보십시오.
    마지막으로 Apache 웹 서버 프로세스를 다시 시작합니다.
    1. sudo systemctl restart apache2
    이제 웹 브라우저에서 your_domain 액세스할 때 Tomcat 설치가 TLS 인증서의 보호를 받는 것을 볼 수 있습니다.Nginx 섹션을 건너뛰고 Tomcat에 대한 액세스를 제한하는 절차를 따를 수 있습니다.

    옵션 2 – Nginx를 리버스 에이전트로 사용


    제절 선결 조건

  • Nginx는 도메인에 설치되어 있습니다Let’s Encrypt guide for Apache.이 절은 /etc/nginx/sites-available/your_domain 을 예로 들 것이다.다음 방법으로 Nginxserver block를 설정할 수 있습니다.
  • 도메인 암호화 서버에 설치된 TLS 인증서를 제공합니다.How To Install Nginx on Ubuntu 20.04에서 설명한 절차를 따릅니다.프롬프트가 나타나면 보안 영역으로 리디렉션할 수 있습니다.
  • 1단계 – Nginx 서버 블록 구성 조정


    이 단계에서는 Nginx가 Tomcat을 이해하도록 "선결 조건"섹션에서 만든 도메인의 서버 블록 구성을 수정합니다.
    다음 명령을 사용하여 편집할 구성 파일을 엽니다.
    1. sudo nano /etc/nginx/sites-available/your_domain
    파일 상단에 다음 행을 추가합니다.
    /etc/nginx/sites available/your\u 도메인
    upstream tomcat {
        server 127.0.0.1:8080 fail_timeout=0;
    }
    
    upstream 블록은 Tomcat에 연결하는 방법을 정의하여 Nginx가 Tomcat의 위치를 알 수 있도록 합니다.
    다음은 포트 443에 정의된 server 블록에서 강조 표시된 명령으로 location / 블록의 내용을 대체합니다.
    /etc/nginx/sites available/your\u 도메인
    upstream tomcat {
        server 127.0.0.1:8080 fail_timeout=0;
    }
    
    server {
    ...
        location / {
            include proxy_params;
            proxy_pass http://tomcat/;
        }
    ...
    
    이 두 줄은 모든 데이터가 방금 정의한 upstream 블록으로 넘어가야 한다고 지정합니다.프록시 프로세스에서 모든 HTTP 매개 변수를 유지하도록 명령할 수도 있습니다.완료되면 파일을 저장하고 닫습니다.
    이제 도메인의 Tomcat에 액세스하여 이 구성을 테스트합니다.

    2단계 – 새로운 Nginx 구성 테스트


    구성 변경에 구문 오류가 없는지 테스트하려면 다음 명령을 실행하십시오.
    1. sudo nginx -t
    출력은 다음과 같습니다.
    Output
    nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
    오류가 발생하면 이전 단계로 돌아가서 수정된 구성을 보십시오.
    그런 다음 Nginx를 다시 시작하여 구성을 다시 로드합니다.
    1. sudo systemctl restart nginx
    이제 웹 브라우저에서 도메인의 TLS 보안 변형에 액세스할 때 Tomcat 설치를 볼 수 있습니다.
    https://your_domain
    

    Tomcat에 대한 Apache 또는 Nginx 액세스 제한


    이제 TLS 인증서가 있는 프록시 서버를 통해 도메인에 Tomcat 설치를 공개했습니다. Tomcat 설치에 대한 액세스를 제한하여 Tomcat 설치를 강화할 수 있습니다.
    Tomcat에 대한 모든 HTTP 요청은 에이전트를 통해 수행되지만 Tomcat을 로컬 루프백 인터페이스의 연결만 탐지하도록 구성할 수 있습니다.이 구성은 외부 당사자가 Tomcat에 직접 요청할 수 없도록 합니다.
    편집할 파일을 엽니다(Tomcat 구성 디렉토리에 있음):
    1. sudo nano /opt/tomcat/conf/server.xml
    tomcatserver.xml에서 다음과 같은 정의를 찾습니다.
    /opt/tomcat/conf/server.xml
    ...
        <Connector port="8080" protocol="HTTP/1.1"
                   connectionTimeout="20000"
                   redirectPort="8443" />
    ...
    
    로컬 루프백 인터페이스에 대한 액세스를 제한하려면 ConnectorService 매개변수로 지정합니다.
    /opt/tomcat/conf/server.xml
    ...
        <Connector port="8080" protocol="HTTP/1.1"
                   connectionTimeout="20000"
                   address="127.0.0.1"
                   redirectPort="8443" />
    ...
    
    완료되면 파일을 저장하고 닫습니다.
    변경하려면 다음 명령을 실행하여 Tomcat을 다시 시작합니다.
    1. sudo systemctl restart tomcat
    Tomcat 설치는 현재 Apache 또는 Nginx 웹 서버 에이전트를 통해서만 액세스할 수 있습니다.Apache 또는 Nginx는 Tomcat을 인터넷에서 분리하므로 도메인의 Catalina 포트에 액세스할 수 없습니다.

    결론


    이 강좌에서 프록시 서버 뒤에 Tomcat을 설정합니다. 이 프록시 서버는 free Let's Encrypt TLS 인증서로 보호됩니다.또한 로컬 루프백 인터페이스 (127.0.0.1 를 통한 Tomcat 연결을 제한하여 직접 외부 액세스를 금지합니다. 이는 Apache 또는 Nginx와 같은 로컬 응용 프로그램만 연결할 수 있음을 의미합니다.
    단독 웹 서버 프로세스를 설정하면 서비스 응용 프로그램과 관련된 소프트웨어가 증가할 수 있지만 Tomcat 데이터를 보호하는 과정을 간소화할 수 있다.에이전트 데이터 프로세스에 대한 자세한 내용은 Let’s Encrypt guide for NginxApache 공식 문서를 참조하십시오.