• 방문자가 봇(Bot)인지 확인하는 JS Challenge 구현

    필자가 운영하고 있는 이 블로그의 출발은 cybercafe.tistory.com 이라는 도메인 주소를 가진 티스토리였다. 그 후 2013년에 현재의 도메인(blogger.pe.kr)을 구입하여 티스토리에 2차 도메인으로 연결했다. 그리고 3년 전 티스토리에서 독립한 후 티스토리 도메인은 삭제하였다. 너무도 많은 유해 트래픽 독립 서버에서 블로그를 운영하다 보니 대기업의 블로그 서비스를 이용할 때는 알 수 없던 유해트래픽을 온몸으로 느끼고 있다. 실제 검색엔진을 통해 들어오는 "사람"의 방문 트래픽보다 Bot이나 해킹 시도 트래픽은 …

  • Fail2Ban과 ipset으로 구축한 워드프레스 웹 방화벽 적용 후기

    fail2ban과 ipset 그리고 iptable의 조합으로 워드프레스 블로그의 웹 방화벽을 구축한지 만으로 3일 정도가 지났다. 그런데 예상보다 그 효과는 더욱 극적이었다. 필자의 블로그에는 하루에도 수천번의 sshd 무작위 로그인 시도와 워드프레스 웹 로그인 시도 그리고 수시로 몰려오는 파일 스캔으로 로그 파일의 사이즈는 커져만 갔었다. 그래서 앞의 포스트에서 많은 고민 끝에 fail2ban과 ipset 그리고 iptable의 조합으로 웹 방화벽을 구축하고 가장 공격이 많은 세가지의 filter와 jail을 만들고 iptabl …

  • Fail2Ban과 ipset으로 워드프레스 웹 방화벽 구축하기

    클라우드의 VM 또는 홈서버에 직접 서버를 구축하고 워드프레스와 같은 블로그 또는 웹사이트를 운영하는 사람들은 모든 문제를 직접 해결해야 한다. 검색엔진의 봇이 아닌 불법적인 웹 크롤러와 봇이 무단으로 저작물을 가져가는 것을 막아야 하고 광고 댓글이 달리는 것도 차단해야 한다. 게다가 로그인 페이지를 찾아내 무단으로 접속을 시도하는 것도 막아야 하고 웹서버의 해킹 시도도 차단해야 하며 심지어 운영체제에 직접 로그인하려는 원격접속(SSH) 시도도 방어해야 한다. 필자 또한 많은 고민을 하며 이런 저런 방법으로 공격을 막아내고 있다. …

  • iptable과 ipset을 연동하여 대량 IP 효과적으로 차단하기

    Referer 주소가 없는 방문자의 정체 언제부터 인지는 알 수 없지만 필자가 운영하고 있는 워드프레스 블로그의 방문자 로그에 이상한 로그가 잡히기 시작했었다. 바로 다음과 같은 로그다. 방문자 카운터 로그에 기록된 비정상 방문 이력 구글이나 네이버와 같은 검색엔진을 통해 유입이 되는 경우 95% 이상의 비율로 Referer에 Google이나 Naver, Bing 등 검색엔진의 URL 주소가 기록된다. 하지만 앞 화면에 보이는 것과 같은 접속 이력은 Referer 주소가 없다. 이 방문자 접속 이력은 필자의 워드프레스 블로그에 직 …

  • imgproxy를 사용한 이미지 캐시 서버의 효과

    필자가 운영하고 있는 블로그에 Caddy + Nginx + imgproxy 조합의 이미지 캐시 서버를 구축해서 연동한지 1개월 하고도 10여일이 넘게 지났다. 처음 구축했을 때는 안정성을 훼손하지 않을까 염려했는데 성능이나 안정성 측면에서 성공적이라 생각된다. 필자의 블로그에는 대충 어림잡아도 100~250 KB 크기의 이미지 파일이 적게는 3~5개, 많게는 30~40개의 이미지까지도 첨부되기에 포스트 1개만 해도 제법 큰 트래픽이 발생한다. 필자의 워드프레스 블로그(blogger.pe.kr)에는 포스트를 작성할 때 JPG 포맷의 …

  • 우분투 리눅스에 PostgreSQL 설치하기

    오픈소스 RDBMS의 양대산맥은 MariaDB와 PostgreSQL 이다. 하지만 성능과 기능 그리고 안정성은 PostgreSQL (포스트그레스큐엘이라고 읽는다)이 더 우수하다고 많은 이들이 평가한다. 하지만 개인적으로는 PostgreSQL을 사용해보지는 않았다. 대부분 MySQL이나 MariaDB를 사용했다. 지금 운영하고 있는 워드프레스 블로그를 포함해 많은 오픈소스 CMS나 게시판들이 MySQL을 표준으로 지원해왔기 때문이기도 하다. 하지만 최근들어서는 많은 오픈소스들이 PostgreSQL을 표준으로 지원하고 있으며 북미 지 …

  • Proxmox에 리눅스 컨테이너(LXC)로 우분투 24.10 설치하기

    서버 가상화에는 대표적으로 두 가지 종류의 가상화 기술이 사용되고 있다. 첫 번째는 Hypervisor 기반 가상화다. 인텔의 VT-x 또는 AMD의 AMD-V 등 CPU에서 제공하는 가상화 기능을 활용하는 Hypervisor라는 가상머신모니터(VMM)을 통해 가상서버를 생성하는 방식이다. VMWare ESXi나 MS의 Hyper-V, KVM 등이 바로 Hypervisor 기반 가상화다. 두 번째는 Linux Container (LXC)다. LXC는 리눅스에서 지원하는 Cgroup과 Namespace라는 리눅스 커널에서 제공하는 …

  • 나만의 VPN 서버 구축하기 (wireguard)

    이런 저런 보안 관련 테스트를 하거나 무언가 민감한 글(?)이나 댓글을 작성할 때 내 IP를 노출하고 싶지 않은 경우가 있다. 그 때 노출 되는 IP가 해외의 IP라면 더 좋을 것이다. 그래서 많은 사람들이 해외 업체의 VPN 서비스를 유료로 사용하기도 한다. 나름 IT 밥을 먹고 있다고 자부하는 1인으로서 사람으로서 그런 유료 서비스보다는 직접 해외에 VPN 서버를 구축해 사용하고자 지금까지는 오라클 클라우드의 Free Tier 서비스에서 제공하는 OpenVPN 가상서버를 활용했다. https://blogger.pe.kr/992 …

  • 리눅스의 시간대(TZ)를 한국(KST)로 변경하기

    리눅스와 유닉스는 주로 미국과 유럽의 개발자들이 개발하는 운영체제다. 그래서 언어(character set), locale과 Time 및 Time Zone 역시 유럽과 미국을 기준으로 만들어 배포된다. 그렇다 보니 리눅스를 다운로드 받아 설치하고 나면 설치과정에서 지역과 타임존을 한국을 선택해도 묘하게 지역과 시간이 한국과 맞지 않는 문제가 발생하곤 한다. 이번에도 그런 경험을 할 수 있었다. 테스트 용으로 사용하고 있는 오라클 클라우드의 Rocky 리눅스를 dnf 명령으로 업데이트 한 뒤 갑자기 타임존이 KST에서 UTC로 바뀌 …

  • 우분투 20.04 에 MariaDB 설치하기

    python의 웹 프레임워크인 Flask를 테스트하면서 DB를 연동해야할 일이 생겼다. MySQL을 설치할지 아니면 MariaDB를 설치할지를 고민하다 MariaDB를 설치하기로 했다. [Flask 웹 프레임워크] Blueprint를 이용한 모듈화 이해하기 사실 MySQL과 MariaDB는 같은(?) DBMS다. MySQL을 오픈소스로 개발하던 회사를 선 마이크로시스템즈(Sun Microsystems)가 인수하고 몇 년이 지난 뒤 그 선 마이크로시스템즈를 다시 Oracle이 인수했다. 그리고 이 때 MySQL 개발진이 Oracle …