1. Oracle Cloud 가입(신용카드 정보 입력)

2. Oracle VM 생성 및 Start

- VM 명칭 원하는 명칭으로 수정

- OS의 경우, Oracle Linux가 아닌 Ubuntu 20.04로 변경

- SSH private.key 다운로드 (추후 ssh 방식으로 접속)

- 생성 버튼 클릭(생성시간 2분)

- Start 버튼 클릭을 통한 기동

3. 도메인 연결을 위한 고정 IP 설정해두기

인스턴스는 프리티어 기간이 끝나도 총 2개, 2개 합 용량 100GB까지는 얼마든지 삭제하고 다시 만들수 있으나 고정 IP(예약 IP)를 1개만 만들 수 있으므로, 하나만 고정된 IP를 사용할 수 있다.

 

- 오라클 클라우드에 로그인 및 접속 후에 네트워킹 > Reserved IPs 에 접속하시면 됩니다.
① 메뉴바 클릭
② 네트워킹 링크 클릭
③ Reserved IPs 링크 클릭

- 네트워킹 > IP관리 > 공용IP 에 접속하셨다면 예약된 공용 IP 주소 등록해주시면 됩니다.
① 공용 IP Link 클릭
② 예약된 공용 IP주소 버튼 클릭
③ 예약된 공용 IP주소 이름 입력
④ 예약된 공용 IP주소 버튼 클릭 후 등록하기

- 컴퓨트> 인스턴스 > 인스턴스 세부정보 > 연결된 VNIC에 접속하시면 됩니다.
① 리소스항목에 연결된 VNIC Link 클릭
② 만들어져 있는 기본 VNIC Link 클릭 후 접속

- 고정아이피를 적용하기 위해 컴퓨트> 인스턴스 > 인스턴스 세부정보 > 연결된 VNIC > IPv4주소에 접속하시면 됩니다.
① ... 버튼 클릭
② 편집 버튼 클릭
③ 공용 IP 없음으로 변경
④ 업데이트 버튼 클릭
⑤ ... 버튼 클릭
⑥ 편집 버튼 클릭
⑦ 예약된 공용IP 선택
⑧ 값 선택 선택
⑨ 업데이트 버튼 선택

4. SSH 접속 테스트

- Instance access 영역의 Public IP address 복사
- local terminal에서 아래와 같이 접속(ssh 명령어 없을 경우, 설치 요망)

```

sudo ssh -i '다운받은 Private KEY' ubuntu@IP주소

```

- linux 명령어를 통한 리소스 확인

```

# 메모리 사용량 확인(1G)

free -h 

# 하드 가용량 확인(50G) : /dev/sda1 내 저장되는 듯?

df

```

5. 메모리 부족사태 방지를 위한, Swap(디스크를 메모리 같이 사용) 적용하기

- 아래 명령어로 Swap 적용 여부 확인하기(swap 영역이 0으로 있으면 적용하지 않은 것)

```

sudo free -m

sudo swapon -s

```

- 생성/수정/삭제 하기는 아래 글 참조

더보기

스왑 파일 생성
스왑 파일 및 파티션이 존재하지 않는 것을 확인한 뒤 아래 명령어로 스왑 용도로 사용할 파일을 생성합니다.

아래 명령어는 루트 디렉터리에 4GB의 파일을 생성한다는 뜻입니다.

sudo fallocate -l 4G /swapfile
아래와 같이 4GB의 swapfile이 생성된 것을 확인할 수 있습니다.

NY@RPI:~$ ls -al /
total 4194532
...
drwxr-xr-x   9 root root       4096 Jul  3 20:24 snap
drwxr-xr-x   2 root root       4096 Feb  1 20:02 srv
-rw-------   1 root root 4294967296 Jun  2 17:55 swapfile
dr-xr-xr-x  12 root root          0 Jan  1  1970 sys
...


스왑 활성화
이제 생성한 파일을 스왑으로 동작하도록 설정해 줘야 합니다.

생성된 파일의 권한을 수정합니다.

sudo chmod 600 /swapfile
해당 파일이 스왑으로 동작하도록 설정합니다.

sudo mkswap /swapfile
마지막으로 아래 명령어를 입력해서 스왑을 활성화 해줍니다.

sudo swapon /swapfile
라즈베리파이를 재부팅 해도 계속 사용하기 위해서 /etc/fstab를 수정해 줍시다.

sudo nano /etc/fstab
그리고 제일 하단에 아래와 같이 한 줄을 추가합니다.

/swapfile swap swap defaults 0 0

 

  • Ctrl + O → 저장할 파일 이름 확인 후 Enter
  • Ctrl + X → nano 종료

 

 

스왑 파일 삭제
스왑 파일은 삭제하려면, 아래 명령어로 먼저 스왑을 비활성화 합니다.

sudo swapoff -v /swapfile
스왑 파일을 생성할때 /etc/fstab에 추가한 내용을 삭제합니다.

sudo nano /etc/fstab
아래의 라인을 삭제해줍니다.

/swapfile swap swap defaults 0 0
마지막으로 생성했던 swapfile을 삭제해주면 됩니다.

sudo rm /swapfile

6. Nginx 웹서버 설치하기

- 아래 명령어로, nginx 설치

```

sudo apt-get update
sudo apt-get install nginx -y

```

- 서비스 확인 명령어를 통해 nginx 정상 동작 여부 확인

```

systemctl status nginx

```

- 자동시작 안되었을 경우, 아래 명령어를 통해 nginx 서비스 기동

```

sudo systemctl enable nginx
sudo systemctl start nginx

```

7. 방화벽 설정

- Oracle VM은 기본적으로 80번 포트가 열려있지 않으므로, 웹서버에 접속 불가

- 오라클 클라우드에 접속 후, 컴퓨트 > 인스턴트 > 자신의 인스턴트 상세페이지로 이동한 다음 서브넷을 클릭합니다.

- 보안 목록을 클릭

- 수신규칙 추가

80번 포트에 대한 수신 규칙을 추가합니다.
소스 유형: CIDR

소스 CIDR: 0.0.0.0/0
IP 프로토콜: TCP
소스 포트 범위: 빈값(ALL)
대상 포트 범위: 80, 443

- SSH 접속 터미널에서, 아래 명령어로 80번 포트(Http)를 열어줍니다.

```

sudo iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT

```

- SSH 접속 터미널에서, 아래 명령어로 443번 포트(Https)를 열어줍니다.

```

sudo iptables -I INPUT 1 -p tcp --dport 443 -j ACCEPT

```

- 방화벽 설정 업데이트

```

sudo netfilter-persistent save

```

- 정상적으로 reject 목록에서 80과 443이 제거되었는지 확인

```

sudo iptables -L --line

```

- VM 퍼블릭 IP 주소로 웹사이트에서 접근 시, 표시되면 성공

안된다면 밑의 고정IP를 연결해주어야 한다.

고정 Public IP가 아닌 경우, 임시로 publicIP가 부여되지만, 80,443 연결은 되지 않고 재부팅시 아이피가 바뀔 수 있다고 한다.

 

8. fail2ban으로  SSH 보안 강화하기

- 서버가 외부와 연결되어 있기 때문에, 아래 명령어로 누가 SSH 접속하는지 파악 가능

```

journalctl -f

```

Failed password for XXX from X.X.X.X port XXX 이러한 식으로 무차별 대입 공격 시도가 수없이 들어오는 것을 확인할 수 있습니다.
Fail2ban이 이러한 SSH 로그인 시도를 필터를 통해 걸러주고, 자동으로 차단 해주는 역할을 합니다.

- 설치

```

# 패키지 목록 업데이트

sudo apt-get update

# fail2ban 설치

sudo apt-get install fail2ban

```

- 자동 시작된 fail2ban 프로세스 실행 중인지 확인

```

sudo service fail2ban status

```

- fail2ban 세부 설정

더보기

아래 명령어를 통해 새로운 파일을 생성합니다

sudo nano /etc/fail2ban/jail.local
아래 내용을 보고 원하는 데로 수정한 후 저장합니다.

만약 SSH에서 22번이 아닌 다른 포트로 변경하였다면 마지막 부분에 port도 변경해 줘야 합니다.

[DEFAULT]
# findtime동안 maxretry의 로그인 시도가 있는 IP를 bantime만큼 차단
findtime = 1d

# 로그인 시도 허용 횟수
maxretry = 5

# 차단 기간 (-1은 영구차단)
bantime = 1w

 

# 로깅 강화
loglevel = INFO
logtarget = /var/log/fail2ban.log
syslogsocket = auto


# 데비안/우분투 기본 백엔드
backend = systemd


# 이메일 알림 설정
destemail =
sendername =
mta = sendmail

# IP 화이트리스트 (이 IP 대역은 절대 차단당하지 않음)
ignoreip = 127.0.0.1/8 192.168.0.0/24 10.0.0.0/8

[sshd]
enabled = true
port = 22
filter = sshd
logpath = /var/log/fail2ban-ssh.log

 

적용 (또는 재부팅)

라즈베리파이를 재부팅 하거나, 

sudo service fail2ban restart 명령어를 통해 변경 사항을 적용해 줍니다.

사용법
이 포스트에서는 간단한 사용법만 소개하니, 더 자세한 사용법을 알고 싶으신 분들은 여기를 참고해 주시길 바랍니다.

차단된 IP 목록 보기
아래 명령어를 통해 sshd 필터에 차단된 IP들을 확인할 수 있습니다.

sudo fail2ban-client status sshd
IP 차단 해제
아래 명령어로 차단된 IP를 수동으로 차단 해제할 수 있습니다.

sudo fail2ban-client set sshd unbanip <IP>
IP 차단
아래 명령어를 통해 수동으로 IP를 차단할 수 있습니다.

sudo fail2ban-client set sshd banip <IP>
이렇게 SSH 보안을 강화하는 fail2ban을 설치해 보았습니다.

이제 공격에 완벽히 안전한 것은 아니지만 전세계에서 들어오는 브루투포스 공격을 어느 정도 막아낼 수 있게 되었습니다.

- couchdb(db), nginx(웹서버)를 위한 추가 fail2ban 설정

더보기

웹서버 보안을 위한 추가 구문

[nginx-http-auth]
enabled = true
filter = nginx-http-auth
port = http,https
logpath = /var/log/nginx/error.log
maxretry = 3

[nginx-botsearch]
enabled = true
filter = nginx-botsearch
port = http,https
logpath = /var/log/nginx/access.log
maxretry = 2
findtime = 300
bantime = 1w

[nginx-badbots]
enabled = true
filter = nginx-badbots
port = http,https
logpath = /var/log/nginx/access.log
maxretry = 2

 

Couchdb를 위한 추가 보안

[couchdb]
enabled = true
port = 5984
filter = couchdb
logpath = /var/log/couchdb/couch.log
maxretry = 3
findtime = 600
bantime = 1w

 

Couchdb 사용자 정의 필터

nano /etc/fail2ban/filter.d/couchdb.conf

아래 텍스트 추가
[Definition]
failregex = ^\[.+\] \[error\] \[<HOST>\] unauthorized request$
            ^\[.+\] \[error\] \[<HOST>\] authentication failed for user
ignoreregex =

 

참고 자료

- https://blog.ny64.kr/posts/create-your-own-lifetime-free-server-using-oracle-cloud/

 

나만의 '평생' 무료 서버 만들기

오라클 클라우드 무료티어를 사용해 나만의 ‘평생’ 무료 VPS를 만들어보자 [1]

blog.ny64.kr

- https://blog.ny64.kr/posts/oracle-cloud-swap-setup-and-nginx-installation/

 

Swap 설정 및 Nginx서버 설치

오라클 클라우드 무료티어를 사용해 나만의 ‘평생’ 무료 VPS를 만들어보자 [2]

blog.ny64.kr

- https://2vup.com/install-nginx-oracle-cloud/

 

[Oracle Cloud] 오라클 클라우드에 평생 무료 서버 만들기(프리티어 기간 종료 이후 가능)

☁️ 오라클 클라우드 (Oracle Cloud) 아마존 라이트세일(AWS), 구글 클라우드 플랫폼(GCP), 오라클 클라우드(OC) 중 가장 나은 사양의 인스턴스를 평생 무료로 대여해주는 오라클 클라우드에 인스턴스

2vup.com

- https://velog.io/@dm911/Oracle-%EA%B3%A0%EC%A0%95IP-%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0

 

Oracle 고정IP 설정하기

Oracle 고정IP 설정하기 !!

velog.io

- https://blog.ny64.kr/posts/setting-up-fail2ban-on-raspberry-pi/

 

Fail2ban으로 SSH 보안 강화하기

자동 IP 차단으로 SSH 보안을 강화하자 / 리눅스 서버 보안설정 [1]

blog.ny64.kr

- https://blog.ny64.kr/posts/setting-up-swap-on-raspberry-pi/

 

Swap 설정하기

메모리가 부족하다면 디스크를 메모리처럼 사용하자

blog.ny64.kr

 

 

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기