개요
본가에 있는 MySQL 서버를 사용할 일이 있어서 서울에서 외부 접속을 시도하였는데 접속이 거부당했다.
본가에서 라즈베리파이를 확인하였더니 전원이 꺼져 있었다.
마지막으로 접속했을 때 poweroff 명령을 사용한 적도 없었고 무언가 문제가 발생하였다고 생각하여 ssh 접속 로그를 확인하였다.
로그를 보니 엄청나게 많은 brute force 공격 흔적이 있었다.
포트번호를 바꿔가며 접속을 시도하는 것을 보아하니 일단 외부 접속을 열어둔 IP라면 좀비 PC를 활용하여 무차별적으로 접속을 시도하는 것 같았다.
로그에 찍힌 IP 주소는 모두 해외였기에 이참에 해외 공격을 원천봉쇄해야겠다고 생각이 들었다.
한국 IP 대역 다운로드
우선 한국 IP만 허용해야 하기 때문에 한국의 IP 주소들을 다음 명령어를 통해 다운받는다.
COUNTRY="kr"
wget -O ${COUNTRY}.zone \
https://www.ipdeny.com/ipblocks/data/aggregated/${COUNTRY}-aggregated.zone
ipdeny.com은 국가 IP를 무료로 다운받을 수 있는 사이트이다.
IPdeny IP country blocks
IPdeny offers country GEO IP address block downloads free of charge. Our country based IP zone files can be easily used in your applications and web sites to minimize on-line fraud, SPAM, floods and sometimes brute force attacks. IPdeny country IP block
www.ipdeny.com
ufw 방화벽 현재 보안설정 확인
해외 IP 접속 차단을 설정하기 전, 현재 설정해둔 방화벽 내용이 있을 수 있기에 확인이 필요하다.
다음 명령어를 사용하여 확인할 수 있다.
sudo ufw status verbose
해외 IP 차단하기
이제 다음 스크립트를 실행하여 해외 IP를 차단한다.
#!/bin/bash
COUNTRY="kr"
ZONE_FILE="${COUNTRY}.zone"
while read -r ipblock; do
[[ -z "$ipblock" ]] && continue
[[ "$ipblock" =~ ^# ]] && continue
sudo ufw allow from "$ipblock" to any
done < "$ZONE_FILE"
sudo ufw reload
만약 기존에 설정해둔 ufw 규칙이 없거나, 기존 ufw 규칙을 초기화하고 진행하고 싶다면 다음 명령을 사용한다.
#!/bin/bash
COUNTRY="kr"
ZONE_FILE="${COUNTRY}.zone"
sudo ufw reset
sudo ufw default deny incoming
sudo ufw default allow outgoing
while read -r ipblock; do
[ -z "$ipblock" ] && continue
sudo ufw allow from "$ipblock" to any
done < "$ZONE_FILE"
sudo ufw enable
한국 IP 대역의 종류가 많기에 작업이 1~3분정도 소요된다.
해당 작업을 통하여 한국 IP로만 공격이 가능한? 환경을 만들 수 있다.
또 다시 외부 공격으로 인해 파이가 꺼져버린다면 다른 방법으로 문제해결을 해봐야겠다.
'기타' 카테고리의 다른 글
Typescript 경로 모듈화, 경로 정규화 과정과 5.8.0 버전에서의 최적화 (2) | 2025.03.03 |
---|---|
Typescript 5.8.0의 조건부 반환 타입 검사 기능 (4) | 2025.02.24 |
라즈베리파이 외부 ssh 접속을 위한 포트포워딩 (0) | 2025.02.01 |