몇달 전부터 시놀로지의 admin 계정으로 무작위 접근이 발생하고
빈번하게 찌르면 시놀로지에서 기본 세팅으로 막아주는데 천천히 오랫동안 거슬리게 접근 해당 계정은 비활성 상태이지만 거슬려서 작업 진행했음.
리눅스 fail2ban 가 있는데 python 공부도 할겸, 말끔하게 시놀로지 차단 디비에 넣고 싶어서 작업 진행.
기본 프로세스
- 허용되지 않는 아이디로 실패 로그 검색
- 내부 아이피 및 지정된 아이피 제외
- 지정된 기간동안 차단
작업 히스토리
- 시놀로지 내부에 들어가는 거라 모듈 설치하기도 그렇고 해서 필요한건 만들거나 기본 내장 함수 선에서 처리함
- ipv4 를 ipv6 로 변환하는 로직에서 좀 어려웠음. 시놀로지에서 사용하는 ipv6 패턴과 구글이 알려준 패턴에 차이 때문에 검색에 다소 시간이 소요됨
- 시놀로지 IP 차단 목록은 sqlite 로 만들어져 있음
- 만료 시간이 되면 어디선가 해당 아이피를 삭제함
- 접근 로그에 정규 표현식 만드는게 좀 걸림. 그냥 split 사용할껄 싶었음.
- date 함수 자잘하게 많이 사용함. php 를 주력으로 하다 보니 python 에서 날짜 함수 사용하는게 좀 어색
- 문법 규칙이 강하다 보니 만들고 나면 소스가 깔끔해서 좋긴함.
소스코드
자세한 건 아래 소스코드를 보시면 됩니다. 내용이 거창하지 않아서...
https://github.com/quenyatic/synology_ip_block
반응형