: 졸업프로젝트를 진행하던 중 aws lightsail에 만들어둔 ec2에 php를 통한 해킹시도가 들어왔었다. github에 코드를 올릴 때 ec2의 고정ip도 같이 올려서 해킹시도를 당한 것 같아서 일단 github의 프로젝트들을 비공개 처리하고
스냅샷(백업본)을 이용해 새로운 ec2를 만들어 고정 ip를 새로 발급받았다.
이것으로 해결된 줄 알았으나 계속해서 해킹 시도가 들어왔다...
계속 404 not found로 response가 보내지고 있고, 졸프를 위한 개인적 공간이라서 크게 문제될 것은 없었지만 냅두기에는 또 찝찝해서 어떻게는 이를 해결하고자 고민하였다.
그래서 생각한 것이 아래의 방법이다.
1. aws cloudfront의 waf
2. aws ec2
3. 흥선대원군의 척화비
aws cloudfront의 waf
이 방법의 경우에는 내가 현재 사용하고 있는 것이 aws 'lightsail'이기에 스냅샷을 기반으로 aws ec2를 생성하거나 새로 만들어야했다.
나 같은 경우에는 이미 aws lightsail에서 진행하고 있었기에 스냅샷을 기반으로 aws ec2를 생성하기로 하였다.
여기까지는 괜찮았는데 aws lightsail의 스냅샷을 cloudfront와 연결하거나 도메인을 구입하는데 추가비용이 또 들고 cloudfront와 waf도 돈이 많이 들어서.. 이 방법은 경제적으로 불가능하다고 생각했다.
이틀인가 틀어두었을 때 나온 비용이다. 적용도 안시키고 생성만 해두었는데도 많은 돈이 나갔다. 이틀에 5천원..이면 한달이면 7만원 정도가 나간다. lightsail의 한달비용이 6달러인 것을 생각하면 배보다 배꼽이 더 큰 실정이다;
aws ec2
이 방법은 그냥 단순히 환경을 lightsail이 아닌 기본 aws ec2를 생성하는 것이다. 졸업프로젝트를 진행하는 다른 동기한테 해킹에 대해 여쭤봤을 때 그 동기는 그런 일이 전혀 없었고, 본인은 aws ec2의 프리티어를 사용하고 있다고 답했다. 이를 보고 혹시 lightsail이라서 해킹시도가 들어오는 것인가? 싶어서 환경을 aws ec2로 옮겨봐겠다 생각한 것이다.
사실 이 방법도 확실한 해결책이 아니고 그저 옮기면 해킹시도가 없어지지 않을까? 하는 생각으로 나온 방안이라서 채택하기에는 어려움이 있었다.
흥선대원군의 척화비
이 방법은 방화벽 설정을 바꿔서 허용된 ip가 아니면 접속할 수 없게 하는 방법인데 이 방법이 가장 확실할테지만 이 방법은 .. 알다싶이 좋은 방법이 아니다.
결국에는 aws내에서 해결하는 것이 아닌 web server로 사용하고 있던 nginx에서 해결하는 방법을 찾았다.
ec2 안에서
nginx -v
명령어를 통해 버전이 1.18 이상이라면 따로 모듈을 설치해야한다.
(1) nginx 설정
cd /etc/nginx/nginx.conf
: nginx의 설정파일에서 GeoIP라이브러리를 설정한다.
→ http 탭 안에 라이브러리 설정코드를 넣어주면 된다.
http {
geoip_country /usr/share/GeoIP/GeoIP.dat;
map $geoip_country_code $allowed_country {
default no;
KR yes;
}
}
: 이 코드는 전체를 차단하고 한국 서버만 열어주는데
만약 전체를 열어주고 한국 서버만 차단하고 싶다면 default yes; KR no;
설정을 주면 된다.
(2) 서버 설정
: 각자 사용하고 있는 서버의 설정파일에 코드를 넣어주면 된다.
FastAPI의 경우 /etc/systemd/system/api.service
안에 넣어준다.
server{
location / {
if ($allowed_country = no) {
return 403;
}
}
}
: 이 코드는 allowed_country, 즉 위에서 설정한 허용된 지역의 서버가 아니라면 403에러를 return하는 설정이다.
후에 sudo restart nginx
를 통해 nginx와 서버를 재시작하면 된다.
(3) 확인
해외서버 테스트사이트 https://www.websitepulse.com/tools/
이 사이트에서 해외서버에서 진입하는 환경으로 테스트할 수 있다.