본문 바로가기

NETWORK Security/보안 프로토콜

TLS1.3 (5) - 환경 구축 (Nginx-1) / nginx, openssl RPM update

 

 

 

 


nginx 환경은 .. 구축은 괜찮았는데 EC2 에 내장된 nginx 와 openssl 버전을 업그레이드 하는데 자꾸 원상복귀되는 문제가 발생해서.. 힘들었다

 

youtube 에 너무 좋은 참고 영상이 있어서 맨 밑에 참고로 올리도록 하겠다.

이번 포스팅은 거의 이 youtube 를 글로 적어둔 거라고 보면 될 것 같다.

 

 

Nginx 웹 서버 환경은 위와 같이 AWS EC2 Amazon Linux 2 AMI (centos7) 에서 구축하였고, nodejs 까지 함께 설치하며 진행하였다.

 

 

 

 

 


기본 구축은 TLS 1.3 지원이 안되기 때문에 TLS 1.2 기준으로 쭉 환경 구축을 한 후 패키지를 업그레이드해주면 된다.

Amazon Linux 2 의 centOS7 을 웹 서버로 사용하였고, 프리티어에서 스토리지 30기가까지 무료이므로 30으로 늘려서 설정해주자.

 

 

 

그리고 보안 그룹 구성에서 http (port 80) 추가 !

접근 아이피 같은 경우 나만 접속이 가능하도록 내 아이피를 입력해주는게 좋지만 실습만 하고 없앨거니까 전체 아이피 허용

 

그리고 키 페어를 생성한다.

내가 원하는 위치에 key (~~.pem) 를 생성하여 저장하는데 분실할일은 없겠지만 분실하지 않도록 주의하고 인스턴스 시작.

 

 

이제 인스터스 아이디를 누르고 접근하여 인스턴스 이름을 다른 인스턴스와 헷갈리지 않게 적절히 설정해주고

퍼블릭 DNS 나 아이피를 통해 접근하면 된다.

 

 

 

 

 


 

 

윈도우 powershell 에서 명령어를 입력 후 진입하여 각종 설정을 해보자.

진입 후 바로 #sudo yum update -y 로 보안 패치를 적용해주고,

#sudo bash 로 관리자 권한에서 패키지 설치를 하자. (일일이 sudo 입력하기 귀찮으니까)

 

 

#amazon-linux-extras install nginx1.12 를 통해 nginx 웹 서버를 설치하는데,

여기서 중요한건 Amazon Linux 2 에서 nginx1.12 버전까지만 내장되어 있기 때문에

설치 후에 rpm 파일 자체를 컴파일해서 적용해주어야 한다.

 

openssl 설치를 해도 yum info openssl 와 openssl version 이 자꾸 다르게 출력되어 진행이 안되었는데..

rpm 파일을 컴파일해서 적용해야만 된다는걸 이틀에 걸친 삽질을 통해 알아내었다...

감사한 참고 링크는 맨 마지막에 첨부하도록 하겠다. 

 


먼저 패키지 설치

#yum -y install wget gcc gcc-c++ make openssl-devel libxml2-devel libxslt-devel gd-devel perl-ExtUtils-Embed GeoIP-devel pcre-devel rpm-build

 

빌드 위해 유저 생성

#groupadd builder

#useradd -g builder builder

 

1.1.1 이상 openssl 다운로드

#wget https://www.openssl.org/source/openssl-1.1.1h.tar.gz

#tar zxvf openssl-1.1.1h.tar.gz -C /usr/local/src/

 

Nginx1.19 이상 SRPM 설치

#rpm -ivh http://nginx.org/packages/mainline/centos/7/SRPMS/nginx-1.19.6-1.el7.ngx.src.rpm 

 

 

Congifuration

#sed -i "s|--with-http_ssl_module|--with-http_ssl_module \

--with-openssl=/usr/local/src/openssl-1.1.1h \

--with-openssl-opt=enable-tls1_3 |g" \

/root/rpmbuild/SPECS/nginx.spec

 

빌드

#rpmbuild -ba /root/rpmbuild/SPECS/nginx/spec

 

빌드된 패키지 설치

#cd /root/rpmbuild/RPMS/x86_64

#rpm -ivh nginx-1.19.6-1.el7.ngx.x86_64.rpm

 

 

#nginx -V 을 통해 버전 맞춰진 것 확인

 


이제 버전을 다 맞추었으니 

 

#systemctl start nginx 로 웹 서버 구동,

#curl localhost 로 정상 구동을 확인한다.

 

이제 chrome 에서 퍼블릭 DNS 아이피에 접근해보면,

nginx 서버 정상 구동 확인 !


 

다음은 각종 설정이다.

 

#curl -i http://localhost

#chmod 644 /var/log/nginx ; 다른 nginx 로그 쌓이는 곳, 로그 수집기 등이 접근할 수 있도록 권한 부여

#chown -R ec2-user:ec2-user /usr/share/nginx/html ; nginx 가 사용하는 홈 디렉, ec2 유저가 사용할 수 있도록 권한 부여

#echo "<h1>Hello World</h1>" > /usr/share/nginx/html/hello.html

확인

 

 

 

 

그리고 서버를 껐다 킬때마다 nginx가 자동으로 올라가도록 하는 명령어 입력

#chkconfig nginx on

심볼릭 링크가 걸리며 성공

 

 

nginx.conf 기본 설정 파일이 있는데 이곳에서 server 부분만 복사해서

/etc/nginx/conf.d 하위에 2020.conf 로 커스텀 config 파일을 만들어 진행한다.

 

#cd /etc/nginx/ && vim nginx.conf ; server 부분 복사 및 삭제 (server 커서 d : $ / server 부터 마지막까지 선택)

** 삭제하는 이유 : 이후 만들 커스텀 config 파일과 server 구문에서 충돌이 발생하기 때문에

server {

        listen       80 default_server;

        listen       [::]:80 default_server;

        server_name  _;

        root         /usr/share/nginx/html;

 

        # Load configuration files for the default server block.

        include /etc/nginx/default.d/*.conf;

 

        location / {

        }

 

        error_page 404 /404.html;

            location = /40x.html {

        }

 

        error_page 500 502 503 504 /50x.html;

            location = /50x.html {

        }

    }

 

 

#mkdir conf.d

#cd conf.d

#vi 2020.conf ; 이 파일에 붙여넣기

 

#nginx -t 로 확인 ; conf 파일을 수정했을 시에는 반드시 nginx -t 명령어로 정상 확인해주는 것이 좋음

그리고 #systemctl restart nginx 로 서버 재구동

 

 

 

 

이 후  nodejs 와 도메인 연결 부분도 양이 꽤 되어 다음 포스팅에서 이어서 하도록 하겠다.

 

 

 

 

 

 

 

 

참고

: https://www.youtube.com/watch?v=u-leHy-l2a8

: https://www.youtube.com/watch?v=SjOEeW6gQlY

: hoing.io/archives/7796