Web Hosting

[Amazon Lightsail] 아마존 라이트세일 워드프레스(WordPress) 고정IP 주소(80포트)로 접근하는 것을 차단하자!!

라이이트세일 vps 호스팅을 이용하여 워드프레스 인스턴스를 생성하여 웹사이트를 개설하였습니다.

그리고 난 후 도메인을 연결해주었고, SSL인증서 설치도 완료하였습니다.

고정IP를 할당 받기 때문에 보안적인 측면에서 브라우저에서의 IP주소로의 접근은 막아야할 필요가 있습니다. https가 아닌 80포트(http://)를 타고 들어오기 때문입니다.

#비트나미 설정#, #AWS 보안#

고정IP로 접근 차단을 설정하는 방법에 대해 알아봅니다.

설정에 앞서 리눅스(유닉스) vi에디터 혹은 vim에디터 사용법을 먼저 알고 계셔야 합니다

1. 라이트세일 접속 후 >_아이콘을 클릭하거나 워드프레스 인스턴스를 선택 후 Connect using SSH 버튼을 클릭합니다.


2. 아파치 서버의 httpd.conf파일과 httpd-vhost.conf을 수정해야합니다. 해당파일 경로는 다음과 같아요

/opt/bitnami/apache2/conf/httpd.conf
/opt/bitnami/apache2/conf/extra/httpd-vhost.conf

위 파일을 vi에디터나 vim 에디터로 열어서 설정 변경을 해야합니다. 다음 명령어을 실행해주세요.

vim /opt/bitnami/apache2/conf/httpd.conf

위파일을 열어보면 아래와 같은 정보를 찾을 수 있고, 주석처리 되어있습니다. 즉 실행하지않음을 뜻해요. 주석은 #으로 시작됩니다. Include 앞에 #을 제거한 다음 저장합니다.(shift + 😉 키를 누르면 하단에 명령어 실행창에 나타납니다. 

wq를 타이핑 후 빠져나옵니다.

# Virtual hosts
#Include conf/extra/httpd-vhosts.conf

주석을 제거한 후 ( a키를 누르면 파일을 수정할 수 있는 INSERT 모드가 활성화됩니다.)

# Virtual hosts
Include "conf/extra/httpd-vhosts.conf"

그 다음으로 httpd-vhost.conf파일 설정을 변경해야합니다.

vim /opt/bitnami/apache2/conf/extra/httpd-vhosts.conf

파일을 열어보니 샘플로 2개의 VirtualHost 설정 정보가 있습니다. 다 지워도 됩니다. 말 그대로 샘플이니까요!!

<VirtualHost *:80>
    ServerAdmin webmaster@dummy-host.example.com
    DocumentRoot "/opt/bitnami/apache/docs/dummy-host.example.com"
    ServerName dummy-host.example.com
    ServerAlias www.dummy-host.example.com
    ErrorLog "logs/dummy-host.example.com-error_log"
CustomLog "logs/dummy-host.example.com-access_log" common
</VirtualHost>

<VirtualHost *:80>
ServerAdmin webmaster@dummy-host2.example.com
DocumentRoot "/opt/bitnami/apache/docs/dummy-host2.example.com"
ServerName dummy-host2.example.com
ErrorLog "logs/dummy-host2.example.com-error_log"
CustomLog "logs/dummy-host2.example.com-access_log" common
</VirtualHost>

아래와 같이 #을 추가하여 주석처리합니다. 주석처리하면 서버시작시 실행되지 않아요

#<VirtualHost *:80>
#    ServerAdmin webmaster@dummy-host.example.com
#    DocumentRoot "/opt/bitnami/apache/docs/dummy-host.example.com"
#    ServerName dummy-host.example.com
#    ServerAlias www.dummy-host.example.com
#    ErrorLog "logs/dummy-host.example.com-error_log"
#    CustomLog "logs/dummy-host.example.com-access_log" common
#</VirtualHost>

#<VirtualHost *:80>
#    ServerAdmin webmaster@dummy-host2.example.com
#    DocumentRoot "/opt/bitnami/apache/docs/dummy-host2.example.com"
#    ServerName dummy-host2.example.com
#    ErrorLog "logs/dummy-host2.example.com-error_log"
#    CustomLog "logs/dummy-host2.example.com-access_log" common
#</VirtualHost>

그리고 실제로 필요한 정보를 설정합니다.

<VirtualHost*:80>
  ServerName 본인의 고정IP 주소 입력
  <Location>
    Order deny, allow
    Deny from all
  </Location>
</VirtualHost>



shift + : 키를 눌러 명령어 실행할 수 있는 상태로 변경합니다. 저장(wq)로 저장하고 나옵니다. 

3. 이제 아파치 웹서버를 재시작해야합니다. 재시작 명령어는 다음과 같습니다. 둘 중 아무 명령어나 실행하세요.

apachectl restart
또는 
httpd restart

오류가 발생했네요.

bitnami@ip-:/opt/bitnami/apache2/conf/extra$ apachectl restart
AH00526: Syntax error on line 42 of /opt/bitnami/apache/conf/extra/httpd-vhosts.conf:
<Location> directive requires additional arguments
bitnami@ip-:/opt/bitnami/apache2/conf/extra$ 

확인해보니 <Location> 에서 "/" 누락되어서 구문오류가 발생했어요.

<Location> 을 <Location/>으로 급히 변경 후 다시 아파치 서버를 시작했습니다.

<VirtualHost*:80>
  ServerName 본인의 고정IP 주소 입력
  <Location />
    Order deny, allow
    Deny from all
  </Location>
</VirtualHost>

"httpd-vhosts.conf" 49L, 1609C written
bitnami@ip-:/opt/bitnami/apache2/conf/extra$ apachectl restart
AH00526: Syntax error on line 43 of /opt/bitnami/apache/conf/extra/httpd-vhosts.conf:
order takes one argument, 'allow,deny', 'deny,allow', or 'mutual-failure'

이번엔 또 다른 오류가..... 43번째 라인에서 문제가 발생했어요. Order deny, allow 라인입니다. allow, deny 혹은 deny, allow 또는 mutual-failure 중에 사용할 수 있다고 합니다. 띄어쓰기를 했더니 문제가 발생합니다. 너무 오랜만에 아파치 웹서버 설정을 하니 이런 문제가 발생하네요. 5년전 쯤 했던 것 같아요.

<VirtualHost*:80>
  ServerName 본인의 고정IP 주소 입력
  <Location />
    Order deny,allow
    Deny from all
  </Location>
</VirtualHost>

위와 같이 하시면 이제 정상적으로 동작합니다. 아파치 웹서버의 재시작이 가능합니다.

4. 위 작업을 마무리했다면 이제 마지막으로 워드프레스 인스턴스를 다시 시작해야합니다. Reboot 버튼을 클릭하세요.


재부팅하면 인스턴스의 모든 웹 사이트 또는 서비스를 일시적으로 사용할 수 없습니다. 인스턴스를 재부팅하시겠습니까? 라는 팝업창이 뜨면, Reboot 버튼을 클릭하세요.


서버를 재시작 후 1분 정도 지나면 사이트에 다시 접근 가능합니다. 서버가 재시작 완료가 되지않은 경우 사이트에 접근하면 아래와 같은 메세지가 나타납니다.


이제 IP주소로 접속 시도를 하면 아래와 같이 Forbidden 접근권한 없음 메세지가 노출됩니다.


Forbidden

You don't have permission to access this resource.

https://본인아이피 주소를 치면 여전히 브라우저에서 접근할 수 있어요. SSL인증서를 설치했기 때문에 443포트가 열리는 것인데요. 열어두어야할지 막아둬야할지 고민이 되는 부분입니다. Let's Encrpt SSL인증서가 무료로 제공되고 있는데, 그렇게 신뢰할 수 있는 인증서는 아닌것 같아요. 익스플로어 엣지와 크롬브라우저에서 https가 제대로 동작하지 않고 보안 경고 메세지가 노출되거든요. 파이어폭스 브라우저에서는 https로 정상 접근이 가능합니다.

만약 https:// (443)포트의 아이피 주소 접근을 막고 싶은경우 아래와 같이 더 추가하신 후에 위 절차를 다시 하시면 됩니다.

<VirtualHost*:443>
  ServerName 본인의 고정IP 주소 입력
  <Location />
    Order deny,allow
    Deny from all
  </Location>
</VirtualHost>

따라하시느라 수고하셨습니다. 오늘도 뭔가 유익한 하루가 되고 있어요.

Leave a Reply

error: Content is protected !!