서버에 문제가 생겨서 완전히 초기화 시키고 처음부터 다시 까는 과정이다. 이 과정에서는 워드프레스 설치, SSH로 로그인, https 활성화, 이메일 서버 설치, fail2ban 설치를 할 것이다. 이메일과 fail2ban은 다음 포스트에 올라온다.
현재 서버는 linode에서 한달 10불 짜리를 사용하고 있으며 OS는 우분투 16.04를 사용하고 있다. 도메인은 구입하여 등록했다.
1. 초기 서버 설정
A. 새로운 유저 등록
다음 과정은 이 사이트를 참고하였다.
제일 먼저 서버에 연결한다. 서버 연결은 Putty를 통해서 하는 것이 편하다. 처음 로그인은 root로 하지만 root로 모든 것을 하는 건 위험하기 때문에 새로운 user을 등록 해준다.
adduser jichoong
콘솔에 위 라인을 입력하면 새로운 비밀번호를 입력하라고 하고,
개인 정보를 입력하라고 하는데 개인 입력 정보는 엔터로 넘어가도 괜찮다.
현재 root인 상태에서
usermod -aG sudo sammy
를 해주어서 권한을 준다.
B. SSH로 서버 접속
서버를 접속할 때 비밀번호로 접속하는 것은 불안전하다. 따라서 SSH를 통해서 접속하는 것이 훨신 안전하다. 따라서 public key와 private key를 만든뒤 private key는 내 컴퓨터에 따로 보관하여 나만 로그인 할 수 있도록 하는게 보안 상 좋다.
아래 과정은 이 사이트를 참고 하였다. 일단 이 사이트를 접속하여 Puttygen을 다운 받는다.
Puttygen을 실행시킨뒤
Type of key to generate은 RSA,
Number of bits in a generated key는 4096
을 입력한 뒤 Generate 버튼은 누른다. 그럼 프로그램은 엔트로피를 위해서 프로그램 빈 칸에서 마우스를 와따가따 하기를 부탁하는 데 그래주자.
Passphrase칸에는 원하는 비밀번호를 입력한다. 입력을 안하고 넘어갈 수 도 있지만 입력하는것이 훨신 안전하다.
Save public key, Save private key를 원하는 위치에 한다. 위 칸에 있는 public key를 전부 복사해두자. 이 문자열이 ssh-rsa로 시작하는 것을 확인하자. 그 후 콘솔에 아래 라인을 입력하자.
mkdir ~/.ssh
chmod 0700 ~/.ssh
touch ~/.ssh/authorized_keys
chmod 0644 ~/.ssh/authorized_keys
nano ~/.ssh/authorized_keys
이렇게 하면 authorized_keys라는 파일을 수정하는 메모장으로 들어오는 데 복사한것을 붙혀넣자. Putty에서는 붙혀넣기는 마우스 오른쪽 클릭이다. 붙혀넣은뒤 ctrl+x를 누르고 y키를 누르고 엔터키를 눌러서 저장하고 나간다. (nano 메모장은 위 방법으로 저장하고 나간다)
같은 방법을 새로 만든 계정에다가도 진행해주자.
su - jichoong
mkdir ~/.ssh
chmod 0700 ~/.ssh
touch ~/.ssh/authorized_keys
chmod 0644 ~/.ssh/authorized_keys
nano ~/.ssh/authorized_keys
한뒤 복붙하고 저장하고 나가주자.
이제 Putty 설정을 바꿔서 SSH로 접속이 되게 만들자.
PuTTY를 실행시킨 뒤 가장 처음 화면의 Host Name칸에 VPS의 IP주소나 도메인주소를 입력한다. Port칸에 VPS의 포트번호를 입력한다. (주로 22). Protocol에서 SSH를 선택한다. 프로그램 창 왼쪽 면에 Data 아래에 Connection탭을 들어가서 Auto-login username에 새로 만든 계정 이름(jichoong)을 입력한다.
Connection아래에 SSH 아래에 Auth탭을 들어간뒤 Browse버튼을 눌러서 위 PuTTYGen에서 저장한 private key 파일을 선택해준다. 초기 화면인 Session탭으로 돌아온뒤 Saved Sessions에 적당한 이름을 입력한 뒤(jichoong@my.domain.com) 이 설정을 저장한다.
이제 저장한 설정을 더블 클릭하면 바로 접속이 되며 passphase를 묻는 것을 확인할 수 있다.
아이디/비밀번호 접속 막기
sudo nano /etc/ssh/sshd_config
참고로 이제부터 모든 것은 새로만든 sudo 계정인 jichoong으로 진행을 한다. 위 파일을 nano로 연 뒤, 파일에서 다음 줄을 찾아 수정을 한다.
[...]
PasswordAuthentication no
[...]
UsePAM no
[...]
참고로 nano에서는 ctrl+w를 통해서 검색을 할 수 있으니 화살표 키를 일일히 눌러가며 찾아보지는 말자. yes를 no로 바꾸어주면 된다.
reboot
그리고 재시작하자.
2. LAMP 설치
LAMP란 리눅스, 아파치, MySQL, PHP를 의미한다. 이것이 전부 있어야 워드프레스를 설치할 수 있다. 아래 과정은 위 사이트를 참고하였다.
Apache 설치
sudo apt-get update
sudo apt-get install apache2
apache를 설치하자. 패키지를 설치할때는 확인을 물어보니까 y를 누르고 엔터를 해서 확인을 해주자.
sudo apache2ctl configtest
설치가 완료된 뒤 위 라인을 쳐보면 에러가 뜬다.
sudo nano /etc/apache2/apache2.conf
를 한 뒤 파일 가장 아래에
[...]
ServerName jihoonjjang.com
이 한 줄을 추가해 준다. 여기서 jihoonjjang.com은 자신의 도메인이다.
sudo nano /etc/apache2/apache2.conf
다시 위 라인을 돌려볼 경우 에러가 사라져 있다.
sudo systemctl restart apache2
아파치를 재시작 해 준다.
sudo ufw app list
방화벽에 apache관련 서비스 3개 전부 허용 되어있는지 확인한다. 자동으로 되어 있기때문에 따로 손볼 필요는 없다.
sudo ufw allow in "Apache Full"
를 해준다.
이제 아무 브라우저 주소창에 VPS의 IP를 입력할 경우 apache 초기 창이 보인다.
Mysql 설치
sudo apt-get install mysql-server
설치 도중에 MySQL의 root의 비밀번호를 입력하라고 묻는다. 적당히 좋은 비밀번호를 입력해준다. 설치가 완료 된 뒤에는
mysql_secure_installation
라인을 콘솔에 친다. 설정한 비번을 다시 입력한뒤, y, 1, n순서로 입력해주고 나머지는 y로 넘어가 준다.
php설치
sudo apt-get install php libapache2-mod-php php-mcrypt php-mysql
로 php를 설치해 준다. 그리고 나서
sudo nano /etc/apache2/mods-enabled/dir.conf
에 들어가 안에 내용을
<IfModule mod_dir.c>
DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm
</IfModule>
로 수정해 준다.
https로 바꾸기
이 과정은 도메인이 등록 되었을 경우에만 가능하다. 어짜피 해야되는거 하고 오자. 아래 과정은 이 사이트를 참고 하였다.
sudo apt-get install software-properties-common python-software-properties
sudo add-apt-repository ppa:certbot/certbot
를 한뒤 엔터키를 누르고
sudo apt-get update
sudo apt-get install python-certbot-apache
sudo certbot --apache -d example.com
여기서 example.com은 내 도메인을 입력한다.
이러면 설정이 뜨는데 처음에 내 이메일을 입력하고, a,n,2순서로 완료한다. 이제 내 브라우저로 다시 내 사이트를 들어갈 경우 https가 잘 되는 것을 확인 할 수 있다.
certificate을 자동 갱신 하기 위해서
sudo crontab -e
를 치고 2번을 선택한 뒤, 파일 마지막 줄에
15 3 * * * /usr/bin/certbot renew --quiet
를 추가한다.
워드프레스 설치
이 사이트를 참고하였다.
mysql -u root -p
을 입력하여 MySQL에 접속한다.
CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
GRANT ALL ON wordpress.* TO 'wordpressuser'@'localhost' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;
EXIT;
이 라인을 각각 입력해주고 exit하는데 여기서 2번째 줄의 password는 새로운 비밀번호이다. 8자 이상, 대소문자 혼용, 특수문자 포함으로 새로 만들어 주자.
이제 다시 콘솔창에
sudo apt-get update
sudo apt-get install php-curl php-gd php-mbstring php-mcrypt php-xml php-xmlrpc
sudo systemctl restart apache2
sudo nano /etc/apache2/apache2.conf
를 통해서 몇개 더 설치하고, 재시작한뒤 설정파일을 열어 적당히 중간에
<Directory /var/www/html/>
AllowOverride All
</Directory>
이걸 추가한 뒤 저장하고 나가자.
sudo a2enmod rewrite
sudo apache2ctl configtest
sudo systemctl restart apache2
콘솔에 위라인을 각각 입력한다.
cd /tmp
curl -O https://wordpress.org/latest.tar.gz
tar xzvf latest.tar.gz
touch /tmp/wordpress/.htaccess
cp /tmp/wordpress/wp-config-sample.php /tmp/wordpress/wp-config.php
mkdir /tmp/wordpress/wp-content/upgrade
chmod 660 /tmp/wordpress/.htaccess
sudo cp -a /tmp/wordpress/. /var/www/html
sudo chown -R sammy:www-data /var/www/html
sudo find /var/www/html -type d -exec chmod g+s {} \;
sudo chmod g+w /var/www/html/wp-content
sudo chmod -R g+w /var/www/html/wp-content/themes
sudo chmod -R g+w /var/www/html/wp-content/plugins
위 라인을 각각 실행시켜주자.
curl -s https://api.wordpress.org/secret-key/1.1/salt/
이걸 누를경우 함수형태의 출력값이 뜨는데 이것을 복사해 두었다가
nano /var/www/html/wp-config.php
여기로 들어가서 그 출력값과 비슷하게 생긴 라인을 복사한걸로 대체해주자.
그리고
define('DB_NAME', 'wordpress');
/** MySQL database username */
define('DB_USER', 'wordpressuser');
/** MySQL database password */
define('DB_PASSWORD', 'password');
. . .
define('FS_METHOD', 'direct');
같은 파일에서 DB_NAME은 wordpress로
DB_USER은 wordpressuser로,
DB_PASSWORD는 내가 새로 설정한 password로 바꾸어 넣고
적당한 곳에 FS_METHOD를 direct로 정의해주자.(마지막줄을 적당한 곳에 넣으라는 뜻)
마지막으로
sudo chown -R www-data /var/www/html
를 입력하면 끝이난다. 이제 브라우저에 VPS의 ip주소나 도메인을 입력하면 워드프레스 초기 설치화면이 뜨고 한국어를 선택한 뒤 하라는 대로 하면 된다.