elmitash의 모든 글

일본에서 일하고 있는 자바 웹 어플리케이션 개발자.

무차별 대입 공격? 아파치 에러 메시지

아파치 웹서버의 에러 로그에 아래와 같은 에러가 다발하고 있었다.

아파치에서 디폴트로 잡혀있는 DocumentRoot 디렉토리(/var/www/html)에 공격 할만한 php 스크립트가 있는지 알아보려고 이런저런 이름의 php 파일명으로 대입해 보고 있는 로그이다.

아래 명령으로 디폴트 사이트 설정을 꺼버리면 워드프레스를 사용하고 있기 때문에 워드프레스의 루트에서 검색 되어지므로 일단 에러 메시지는 사라진다.

fail2ban을 쓰라는 글도 있던데 굳이 거기까지 할 필요성은 못 느껴서… 좀 생각해보고 적용하게 된다면 방법을 공유해 보겠다.

우분투 14.04->18.04 워드프레스 이행

워드프레스가 PHP 5.3을 더이상 지원하지 않아서 워드프레스 업데이트가 되지 않았다.
이전에 워드프레스 버전업을 하지 않아서 워드프레스가 해킹 당한적이 있기 때문에 바로 PHP 버전을 올려서 워드프레스를 업데이트 하려 했지만, 우분투 14.04에서는 PHP 5.3 이상을 공식적으로 지원하지 않고, PHP 7.x대에 저장소도 14.04 버전은 없어져 버려서 업데이트 불가. 결국 우분투 버전을 올리기로 결정.

가상 서버를 하나 더 생성해서 우분투 18.04 설치 후, 이행하기로 했다.

할일.
0. 서버 설치 후 설정
1. 아파치, PHP, DB를 설치
2. 워드프레스 이행
3. DB 이행
4. 워드프레스 접속 확인
5. 기타 서버 이행 작업

0. 서버 설치 후 설정

서버 설치하면 항상 하는 서버 IP 고정 설정과 SSH 포트 변경부터 했다.

IP 설정하는 파일이 바뀌었다.

50-cloud-init.yaml 파일 내용

변경내용 적용, 확인, 구글에 접속 테스트.

SSH 포트 변경
포트 부분만 바꿔주고 저장 후, 서비스 재시작.

1. 아파치, PHP, DB를 설치

우분투 18.04에 APM 설치하는건 apt install 만 하면 되니까 생략.은 아니고…
일단 아파치는 설치 되어 있다.
이전 우분투 서버에서 conf 파일을 옮겨 온다.

SCP로 복사하면 간단.

사이트 설정 파일을 enable로 심링크.

아파치 리로드 후에 문제가 생기는 경우에 확인.
주로 모듈이 설치 되지 않아서 생기는 경우가 많은데 해당 모듈을 설치해 주면 된다.

내 경우는 proxy_ajp가 활성화 되지 않아서 에러가 났으므로 proxy_ajp를 활성화.

이후, 아파치 리로드 해 보니 문제 없이 기동 되었다.

2. 워드프레스 이행

기존 서버에 워드프레스에 테마라든지 이런저런 이유로 파일을 수정해서 사용하고 있었기 때문에 새 서버에 워드프레스를 설치해서 데이터를 옮기지 않고, 기존 서버에 워드프레스 파일들을 그대로 가져 와서 사용하기로 했다.

기억하고 있던 tar로 압축하려 했으나 실패하고 요즘 주로 쓰고 있던 zip로 압축.(하려 했으나 zip이 없어서 설치)

winscp로 파일 전송 후에, 압축 해제.(하려 했으나 unzip이 없어서 설치)

아파치가 워드프레스 디렉토리를 사용 할 수 있도로 권한을 변경해준다.

3. DB 이행

mariadb(이후 mysql로 부름)를 설치했다.

루트 아이디가 패스워드가 없이 설치 되기 때문에 패스워드 없이 mysql에 접속 된다. mysql_secure_installation을 실행해서 루트 패스워드를 설정. 루트 패스워드를 넣고 mysql에 접속 확인.

데이터베이스 단위로 덤프를 떠서 bzip으로 압축.

새 서버로 압축한 파일을 옮긴 후에 bzip으로 압축 해제한다.

임포트하기 전에 mysql 에서 데이터베이스를 생성하고, 덤프 파일을 임포트.

4. 워드프레스 접속 확인

브라우저로 서버IP로 접속해 보고, 아파치에서 내보내는 에러라면 일단 아파치에 접속은 되는 것이니 에러 로그를 확인하고, 접속 조차 안되는 것 같으면 억세스 로그도 확인해 본다.

에러 로그에 뜬 플러그인에서 발생하는 에러를 구글에서 검색, curl, php7.3-curl가 없어서 그러는 것 같으니 설치. 아파치 재기동 후 다시 에러 로그를 확인.

에러 로그에 PHP 함수 preg_replace() 에서 에러 발생.
PHP 7.3에서는 -문자 앞에 \으로 이스케이프 시켜야 한단다.

워드프레스에서 DB 접속이 안된다. info.php로 확인해 보니 mysql 모듈이 없어서 설치 후 아파치 재기동.

워드프레스 첫 화면은 잘 보이는데 다른 페이지로 이동하면 404 에러 발생. 아파치 rewrite 모듈이 활성화 되어 있지 않아서 생기는 문제라 모듈 활성화 후 재기동.

5. 기타 서버 이행 작업

cron 으로 하던 작업 이행 할 것.
fail2ban 설치해서 ssh 로 계속 접속 시도하는 경우에 밴.

서버 타임존 설정

키보드 레이아웃 설정

마무리

이 정도 작업을 하면 서버 이행 작업이 끝난다.
여러 날에 걸쳐서 해서 정확하지는 않지만, 6시간쯤 정도 걸린듯.

수고 했다.

hyper-v 부팅시 블루스크린 vmswitch.sys 문제해결

윈도우10에서 hyper-v로 가상서버를 사용하고 있는데, 오늘 갑자기 부팅시 블루스크린으로 부한 재부팅이 되는 경우가 있었다.

블루스크린에는 SYSTEM_SERVICE_EXCEPTION, vmswitch.sys 라고 표시된다.

원인은 아마 윈도우즈 업데이트(creator’s update)에 있는 것 같은데
구글에서 “hyper-v bsod vmswitch.sys” 로 검색해서 나온
아래 링크에 글을 보고 해결 했다.

BSOD when starting Hyper-V, after Windows 10 Creators update (1709)

hyper-v 관리화면을 열어서 가상환경에 설정으로 들어가, 새로운 하드웨어 추가로 Legacy Network Adapter를 추가해서 기존에 Network Adapter 대신 사용하면 된다.
사용하던 Network Adapter는 삭제할 것.

마소에서 뭘 건드렸는지 모르겠는데, 일단 이 방법으로 해결이 되어서 급한대로 포스팅한다.

BSOD: Bluescreen of Death

관리자 권한이 없는 윈도우 PC에서 JDK 8.0 무설치 버전으로 설치하고 이클립스 실행

인스톨러가 작동하지 않는 관리자 권한이 없는 윈도우 PC에서 JDK 8.0을 설치하고 이클립스를 실행해 보자.

개요

  • JDK 8.0 다운로드
  • 7-zip 설치와 JDK 인스톨러 압축 해제
  • 자바 환경변수 등록
  • 이클립스 실행
  • JDK 8.0 다운로드

    다운로드 사이트 – http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
    이 글에서는 32비트용 jdk-8u121-windows-i586.exe 을 다운로드한다.
    c:\dev 폴더에 넣는다.

    7-zip 설치와 압축 해제

    다운로드 사이트 – http://www.7-zip.org/download.html
    타입이 .exe로 된 32비트나 64비트 버전을 다운로드한다.
    다운로드한 파일을 실행해서 적당한 폴더에 압축을 푼다.
    이 글에서는 c:\dev\7-Zip 폴더에 풀었다.

    아래 명령으로 jdk 인스톨 팩키지의 압축을 푼다.

    tools.zip 파일이 생성된다.
    c:\dev\jdk8 폴더에 압축을 푼다.

    .pack 파일을 .jar 파일로 변환

    출처:http://stackoverflow.com/questions/1619662/how-can-i-get-the-latest-jre-jdk-as-a-zip-file-rather-than-exe-or-msi-installe

    자바 환경변수 등록

    환경변수 JAVA_HOME 이 필요한 프로그램을 실행할 때를 위해서 환경변수를 등록한다.

    윈도우즈키+R 키를 눌러 파일명을 지정해서 실행창을 연다.
    cmd 를 입력해서 명령창을 연다.
    아래 명령어를 실행해서 환경변수 JAVA_HOME 등록

    이클립스 실행

    이클립스는 JAVA_HOME 환경변수를 보지 않기 때문에 javaw.exe 파일을 찾지 못해서 실행되지 않는다.
    eclipse.ini 파일을 수정하자. 아래 줄을 -vmargs
    이전 줄에 적어 넣는다. (javaw.exe 파일의 위치를 각자 PC 환경에 맞춰서 넣을것)

    -vm 다음에 꼭 개행할 것.

    Codenvy Eclipse Che에서 Node.js Express Sample 프로젝트 실행하기

    Node.js 워크스페이스 작성

    Codenvy 접속
    왼쪽 사이드 메뉴 Create Workspace
    탭 Runtime – Ready-to-go Stacks(선택 되어 있음)
    NODE 선택
    최하단 SAVE 버튼을 눌러서 워크스페이스 작성

    Express 프로젝트 작성

    왼쪽 사이드 메뉴에서 작성한 워크스페이스 선택해서 기동
    Alt + X 키로 프로젝트 작성
    SAMPLES 하단에 express 선택후 프로젝트 이름(ProjectName)을 입력하고 Create 버튼 누름
    Express 프로젝트 디렉토리는 작성 되는데 Express 디렉토리 구조등은 없다.
    상단 명령 중 ExpressTest: 1. Create and run project 실행해도 에러가 난다.

    해결방법

    먼저 Express 설치
    하단 Terminal 에서 커맨드 입력

    프로젝트 디렉토리에 express 구조를 생성해 주는 커맨드 입력

    의존관계 설치 커맨드 입력

    프로젝트 디렉토리 루트에 있는 package.json 에 기재 되어있는 의존관계에 있는 팩키지들을 설치해 준다.

    실행

    화면 상단 CMD 리스트박스에서 Edit Commands… 선택
    CUSTOM 옆에 + 버튼을 클릭해서 새 명령 추가
    이름은 적당히 넣고 Command line 에 아래 명령을 입력

    ProjectName에는 프로젝트 디렉토리명을 넣는다.
    Preview URL 에 입력

    샘플 프로젝트에서는 서버 포트를 3000번으로 사용하고 있으므로 3000을 입력한다. 만약 포트 번호를 바꿀 때에는 여기 포트 번호도 바꿀것.
    하단 Save 버튼을 눌러서 저장 후, 저장한 명령을 실행한다.
    하단에 실행 결과가 나오는데 Preview 에 URL 을 클릭하면 서버에 접속 된다.(안열릴시에는 브라우저에서 F5 로 새로고침)

    터미널에서 복사/붙여넣기 방법
    Ctrl + Insert : 복사
    Shift + Insert : 붙여넣기
    Shift + Delete : 잘라내기