Pytorch

Pytorch를 해보는 중이에요.

Windows는 원래는 안되지만 어떤 사람이 되게 해줬어요. 아직까지는 기본만 보고 있지만 tensorflow보다 훨신 간편한 것 같아요.

강좌는 우리 학교 교수님의 강좌로 해보고 있어요

https://github.com/hunkim/PyTorchZeroToAll

나쁘지 않네요.

펀치 드렁크 러브

아담 샌들러 주연의 영화는 어느정도 예상이 가능하다. 어느정도 가벼운 코미디 영화 위주로 만들어진 영화로 딱히 내 취향은 아니다. 꽤 오랫동안 흥행보증 수표로 통했지만, 안좋은 영화들을 맡는 바람에 영화에 아담 샌들러가 나온다면 거르는 것이 좋다.

그 와중에도 펀치 드렁크 러브는 그런 고정관념을 깨고 잔잔한 로맨스 영화다. 폴 토마스 앤더슨이 감독해 천재적인 영상미를 보여준다. 1시간 33분의 짧은 영화지만 매 순간의 카메라의 움직임과 구도는 아름답고 긴장해야되는 씬에는 긴장되는 관객과의 줄다리기가 뛰어난 영화로 느껴진다.

폴토마스 앤더슨의 다른 영화도 보자.

네이버 포스트는 왜 아이디를 가리지 않을까.

아이디란 인터넷 사이트에서 단순히 로그인을 위해 사용하는 identification이지만 대부분의 사람들은 모든 사이트에서 아이디를 동일하게 사용한다. 그래서 누군가의 아이디를 알게 된다면 그 사람이 인터넷에 올렸던 수 많은 글들을 확인하고 그 사람의 사고방식이나 생활 습관을 쉽게 알아낼 수 있다.

요즘들어서 SNS 때문에 인터넷으로 얼마나 쉽게 사람을 추적할 수 있는 지에 대해서 말이 많지만 사실 아이디로 추적하는 거는 내가 중학교 때였던 8년 전에도 충분히 가능했다. 옆 짝꿍이 초등학생 때 작성했던 인터넷 소설도 발견하고, 고등학교 때 친구가 사실은 거대한 커뮤니티의 네임드 였다는 것도 발견할 수 있었다.

우리나라 사람들이 가장 많이 사용하는 사이트는 단연컨데 네이버이다. 그 어떤 커뮤니티보다도 예전 부터 재미 있었던 건 네이버 뉴스 댓글창이다.

이제와서 예전 네이버 댓글을 찾기 힘들어서 그런지 이런 것 밖에 나오진 않지만 예전에는 이랬다. 글쓴이의 아이디도 번부 나오고 예전 글 보기를 통해서 재치있는 사람들의 댓글들을 많이 확인 할 수 있었다.

다만 문제점은 아이디라는게 이제는 개인 정보로 직접 연결이 되다 보니까 개인정보 보호를 위해 이제는 아이디의 일부만 보여주는 것으로 바뀌게 되었다. 위에 보면 알 수 있듯이 사실 이때는 IP주소마저 공개로 표시됐다.

그리고 이게 현재 모습이다. 각각 네이버 뉴스, 웹툰, 포스트다. 전부 아이디를 가려서 신상 보호에 도움을 준다. 즉 아무리 댓글로 자기가 백만장자라고 떠들어도 아이디를 검색해 사실은 거지였다~라는 건 밝힐 수 가 없는 것이다. 아마 이런 목적으로 네이버는 아이디를 가린 것 같다.

문제는 포스트다. 네이버 포스트는 약간 블로그 같은 느낌으로 사람들이 직접 글을 올릴 수 가 있다. 그리고 아이디 대신 닉네임을 사용 할 수 도 있는데, 많은 사람들은 포스트에 글도 올리지 않고 그냥 나두고 있다. 문제는 네이버 포스트의 기본 닉네임은 아이디고, 댓글의 아이디 부분만 클릭하면 바로 그 사람의 포스트를 들어 갈 수가 있다는 것이다.

보다 싶이 만약 내가 첫번째 댓글의 닉네임을 누른다면 그사람의 포스트로 들어가지며 그사람의 아이디는 그대로 노출 된다. 이 아이디를 내가 인스타그램에 검색한다던지해서 개인 정보까지 파악을 할 수 있다.

물론 아이디를 가리는 것은 의무가 아니다. 하지만 이왕가릴거면 제대로 가리자 네이버야.

이발사 딜레마와 대각선 논법

[su_quote]The barber is the “one who shaves all those, and those only, who do not shave themselves.” The question is, does the barber shave himself?[/su_quote]

이발사의 역설은 누구나 한번 쯤은 들어본 유명한 역설입니다. 수학자 러셀이 누군가한테서 들었다고 자신에 책에 처음 적었다고 하네요. 워낙 유명해서 왠만한 사람들은 다 한번 씩 들어보았고 초등학교 수학관련 만화책에서도 왠만하면 나옵니다. 저는 메이플스토리 논리문제 만화책에서 처음 본 것 같네요.

한 마을의 이발사는 자신의 머리를 자르지 않는 모든 사람의 머리만 잘라줄 때, 이발사는 자기 자신의 머리를 자를 수 있을까, 라는 내용이 이발사의 역설입니다.

만약 이발사가 자신의 머리를 자른다고 생각해 봅시다. 그럼 이발사는 자신의 머리를 자르는 사람이기 때문에 자신의 머리를 잘라주면 안돼겠네요. 만약 자신의 머리를 자르지 않는다면 이발사는 자신의 머리를 자르지 않는 사람이니까, 자신의 머리를 잘라야 겠네요.

어느 선택을 해도 모순에 도달하는 ‘이 명제는 거짓이다’와 같은 역설처럼 보입니다.

오늘 계산이론 (Theory of Computation)이라는 수업을 들었는 데, 교수님이 이 역설을 대각선 논법으로 설명 해주신것이 인상 깊어서 이 글을 써봅니다. 대각선 논법은 실수가 비가산 집합임을 보여주는데도 사용하지만 이 글에서는 그정도 까지는 가지 않을 것 같네요. 그럼 대각선 논법을 간단히 설명해드리도록 하겠습니다.

O X O O O
X O X X O
X O X X O
O X O O X
O O X X X

다음과 같은 5X5 테이블을 있다고 할때 가로열을 각각

[latex]R_1 = \{1,3,4,5\} [/latex]

[latex]R_2 = \{2,5\} [/latex]

[latex]R_3 = \{2,5\} [/latex]

[latex]R_4 = \{1,3,4\} [/latex]

[latex]R_5 = \{1,2\} [/latex]

라고 봅시다. 즉 [latex] R_1 [/latex]는 첫번째 가로열에서 동그라미의 위치를 표현하는 집합입니다.

이제 이 테이블에서 대각선만 보면 순서대로 [latex] \{1,2,4\} [/latex] 가 됩니다 이것을 반전 시킨 것을 [latex] D = \{3,5\} [/latex] 라고 볼 때, 대각선 논법이란 것은 그 어느 가로열도 이것과 동일하지 않다는 것입니다. 즉 [latex] R_1, R_2, R_3, R_4, R_4 [/latex] 그 어느 것을 보아도 D와 동일하지 않다는 것을 확인 할 수 있습니다. 즉 이는

[latex] R_a \neq   D \forall a \in \{1,2,3,4,5\} [/latex]

로 볼 수 있고 이는 모든 가능한 [latex] N \times N [/latex]에 적용됩니다.

 

이제 다시 이발사 문제로 되돌아가 봅시다. 한번 이렇게 생각해 봅시다. [latex] R_a [/latex]란 a라는 사람이 머리를 잘라줄 수 있는 사람들의 집합으로 본다면, 1번 주민은 자기자신과, 3번, 4번, 5번 사람의 머리를 잘라줄 수 있겠네요.

어떤 마을 이라도 마을사람 수 x 마을 사람 수의 크기의 테이블을 만들 수 있고 이런 머리잘라주는 관계를 표현할 수 있습니다.

그렇다면 자기자신의 머리를 자를 수 없는 사람들의 집합은 D가 됩니다. D는 대각선의 반전이고 대각선에 동그라미가 표시된 사람들은 자기자신의 머리를 자를 수 있는 사람이기 때문입니다.

이발사가 머리를 잘라 줄 수 있는 사람은 [latex] R_{barber} [/latex]가 되겠고, 이발사가 마을 안에 있는 이상 이발사 역시 저 테이블 안에 들어있을 테니 대각선 논법에 의해 [latex] R_{barber} \neq D [/latex]가 될 수 밖에 없습니다.

즉 자기 자신의 머리를 자를 수 없는 사람만 잘라주는 이발사는 존재할 수 없는 것입니다.

 

USTmap

USTmap을 예전에 안드로이드 어플로 만들었다. 이 어플의 주된 목적은 인터넷을 사용하지 않고도 캠퍼스 지도를 볼 수 있게 하기 위해서 만든 것이다.

그러나 문제점은 요즘 사람들은 앱을 전혀 다운받지 않는다는 것이다. [참고] 나 역시도 어플 다운로드를 별로 좋아하지 않는데, 그 이유는 아무래도 어플리케이션을 설치한다는 것이 약간의 부담감이 드는 행위이기 때문이다. 간단한 기능들은 요즘에는 충분히 웹앱으로 기능이 구현 가능하다. 그래서 똑같은 기능을 가진 웹앱을 개발해보기로 했다.

처음으로 자바스크립트를 제대로 사용해본 프로젝트였고 좀 야심차게 했지만 출시 2주가 약간 안 되어가는데 사용량을 보니 참 의미 없었던 것 같다. 아무래도 학교 지도라는게 초반에 몇번 강의실을 확인하는 데 사용한 다음부터는 필요가 없어지기 때문에 사용량이 극격하게 줄어든 것 같다.

처음에는 따로 지도 데이터베이스를 뽑아서 사용했었는데 매번 업데이트 해줘야 된다는 문제점이 보여서, 학교 공식 지도 사이트의 서버의 결과물을 맘대로 뽑아서 사용하고 있다. 다만 학교 공식 지도 사이트는 외부 사이트에서 뽑아서 쓸 수 없기 때문에 내 페이지에서 프록시 php파일을 만들어서 그걸로 받아서 쓰고 있다.
이제 학교 공식 지도가 업데이트 되면 내 지도도 따로 만질필요 없이 알아서 업데이트가 된다. 히히

사실은 github.io에 올리려고 했는데 학교 공식 서버 php 파일이 HTTP이고, github.io는 HTTPS이기 떄문에 mix-content 문제로 브라우저가 허용을 하지 않는다. github.io는 강제로 http로 만들수 없고 pathadvisor.ust.hk는 절대로 https로 바뀔 것 같지는 않으니 일단은 학교에서 제공하는 개인 사이트 호스팅에 올려두었다. 평생 도메인 돈내고 쓸 것도 아니고 하니까 때 되면 github.io로 옮기고 싶다.

웹앱 코드

어린이용 치약의 우월성

  1. TCG에서 상위호환이란 하나의 카드가 모든 면에서 다른 카드보다 우월할 때 쓰는 용어이다. 어느 하나가 모든 면에서 다른 것보다 우월하면 열등한 것은 도태 되는 것이 당연하다.
Image result for 하스스톤 상위호환
상위호환의 예시
  1. 예를 들어서 SSD는 처음 나왔을 때 HDD보다 월등하게 빨랐지만, 가격면에서 더 안 좋았기 때문에 현재 SSD와 HDD는 서로 공존하는 상태이다. 만약 SSD가 속도, 물리적 크기, 가격면에서 전부 더 나았다면 HDD는 빠르게 도태되어 사라졌을 것이다. 하지만 서로 서로 장단점이 있기 때문에 SSD는 HDD의 상위호환이라고 부르기는 힘들다.

  2. 이렇듯 한 제품이 다른 제품보다 모든 면에서 가격을 포함한 모든 면에서 낫다면 열등한 제품은 존재의 의미가 없으며 사라져야한다.

어린이용 치약, 귀여운 캐릭터가 있기 때문에 상위호환이다
  1. 어린이용 치약은 일반 치약의 상위호환이다. 어린이용 치약과 일반 치약의 성능은 똑같다. 불소가 포함되어 있다면 어린이용 치약은 일반 치약과 성능면에서 전혀 차이가 없다. 가격 면에서도 동일하다. 가장 큰 차이는 어린이용 치약은 일반 치약처럼 자극적이지 않고 (어린이들은 맵다고 표현한다), 기분좋은 딸기맛과 향이 나는 것이다.

  2. 이렇듯 어린이용 치약은 일반 치약에 비교해서 더 나쁜 점이 없는 상위호환이기 때문에 일반 치약이 아닌 어린이 용 치약이 더 낫다. 가끔씩 일반 치약은 입이 시원한 맛이 난다고 하는데 그런 새끼들은 딸기맛 아이스크림이 아니라 시원한 치약맛 아이스크림을 먹는가 보다.

  3. 같은 이유로 눈에 들어가도 아프지 않은 어린이용 샴푸는 일반 샴푸의 상위 호환이다.

우분투 16.04에 이메일 서버 설치하기.

 

sudo apt-get update

sudo DEBIAN_PRIORITY=low apt-get install postfix

설정은 Internet Site, jihoonjjang.com, jichoong (우분투 계정 이름), No, 기본값 —> 으로 두었다.

sudo postconf -e 'home_mailbox= Maildir/'

sudo postconf -e 'virtual_alias_maps= hash:/etc/postfix/virtual'

sudo nano /etc/postfix/virtual
@jihoonjjang.com jichoong
sudo postmap /etc/postfix/virtual

sudo systemctl restart postfix

sudo ufw allow Postfix

sudo  apt-get install dovecot-common dovecot-pop3d dovecot-imapd

sudo nano /etc/dovecot/conf.d/10-mail.conf

 

## the location of the mailbox is specified in 'mbox' format ##
mail_location = mbox:~/mail:INBOX=/var/mail/%u

## dovecot is granted necessary permission to read/write user mailboxes ##
mail_privileged_group = mail

이거 추가

 

sudo service dovecot restart
sudo postconf -e 'smtpd_tls_cert_file = /etc/letsencrypt/live/jihoonjjang.com/fullchain.pem'
sudo postconf -e 'smtpd_tls_key_file = /etc/letsencrypt/live/jihoonjjang.com/privkey.pem'
 
sudo nano /etc/postfix/master.cf
submission inet n       -       n       -       -       smtpd
  -o smtpd_tls_security_level=encrypt

이거 주석 풀기

sudo nano /etc/dovecot/conf.d/10-ssl.conf
ssl = yes

ssl_cert = </etc/letsencrypt/live/jihoonjjang.com/fullchain.pem

ssl_key = </etc/letsencrypt/live/jihoonjjang.com/privkey.pem
sudo ufw allow 995
sudo ufw allow 993
sudo ufw allow 25
sudo ufw allow 587
sudo nano /etc/dovecot/conf.d/10-master.conf
## The listener is added under the service auth section ##
service auth {
    unix_listener /var/spool/postfix/private/auth {
        mode = 0660
            user = postfix
            group = postfix
    } ##end listener
} ## end service auth

잘 보고 리스너 추가

sudo nano /etc/dovecot/conf.d/10-auth.conf
auth_mechanisms = plain login
sudo service dovecot restart
sudo nano /etc/postfix/main.cf
#### SASL ####
## specify SASL type ##
smtpd_sasl_type = dovecot

## path to the SASL socket relative to postfix spool directory i.e. /var/spool/postfix ##
smtpd_sasl_path = private/auth

## postfix appends the domain name for SASL logins that do not have the domain part ##
smtpd_sasl_local_domain = example.tst

## SASL default policy ##
smtpd_sasl_security_options = noanonymous

## for legacy application compatibility ##
broken_sasl_auth_clients = yes

## enable SMTP auth ##
smtpd_sasl_auth_enable = yes

## smtp checks ##
## these checks are based on first match, so sequence is important ##
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination

#### SSL/TLS parameters ####

## 'encrypt' will enforce SSL. Not recommended for live servers ##
smtpd_tls_security_level = may 
#smtpd_tls_security_level = encrypt 

smtpd_tls_received_header = yes 
smtpd_tls_auth_only = no 

## loglevel 3 or 4 can be used during troubleshooting ##
smtpd_tls_loglevel = 1 

## path to certificate and key file ##
smtpd_use_tls=yes 

## server will announce STARTTLS ##
smtp_tls_note_starttls_offer = yes 

smtpd_tls_session_cache_timeout = 3600s

가장 마지막에 추가

sudo service postfix restart

 

 


참고한곳

https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-postfix-on-ubuntu-16-04#step-4-adjust-the-firewall

https://www.namecheap.com/support/knowledgebase/article.aspx/9795/69/installing-and-configuring-ssl-on-postfixdovecot-mail-server

http://xmodulo.com/mail-server-ubuntu-debian.html

http://xmodulo.com/enable-user-authentication-postfix-smtp-server-sasl.html

우분투 16.04에 워드프레스 설치하기

서버에 문제가 생겨서 완전히 초기화 시키고 처음부터 다시 까는 과정이다. 이 과정에서는 워드프레스 설치, 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주소나 도메인을 입력하면 워드프레스 초기 설치화면이 뜨고 한국어를 선택한 뒤 하라는 대로 하면 된다.

 

서버에 fail2ban 설치

사실 여태까지 귀찮아서 안하고 있었는 데 이제 해본다.

 

아래 두 링크를 따라서 했다.

https://www.linode.com/docs/security/using-fail2ban-for-security

https://scottlinux.com/2011/05/26/prevent-postfix-brute-force/ ( [postfix] 부분에 enabled 만 해줌)

 

나중에 시간 있을때 재대로 ban 되는지와 밴 되는 경우 이메일이 오는지, 이메일 서버도 ban 되는지 등을 확인해야겠다.