2022년 3월 15일 화요일

수상한 접근을 하는 IP들 찾아내어 차단하기

엊그제 수상한 IP를 찾아 차단했데, 생각난 김에 다른 IP들은 없는지 access 기록을 찾아 보았다. lightsail bitnami 인스턴스에서 아파치 로그 파일은 /opt/bitnami/apache/logs 에 있다.

현재 로그파일과 지난 압축 파일을 홈 디렉토리에 복사한다.

 cp access* ~/logs/.

filezilla를 이용해서 ftp로 이 파일들을 내려받는다. 방법 : SFTP를 사용하여 Amazon Lightsail에서 Linux 또는 Unix 인스턴스에 연결

내려받은 파일들의 압축을 풀고 텍스트 편집기로 불러온다. textmate로 파일을 하나 불러오고 나머지 파일들도 드래그앤 드랍으로 던져 넣어 전체를 불러왔다. 약 45만줄 정도.

찾기 기능으로 /cgi-bin 을 찾아보았다. 이 블로그가 돌아가는 워드프레스의 디레토리 이름은 물론 서버내에 /cgi-bin 디렉토리는 없는데 이 경로가 포함된 URI를 접근해봤다는건 취약점이 있는 특정 파일들이 있는지 뒤져본 것으로 보인다.

cmd + A 로 전체를 선택하여 새 파일에 붙여넣는다. IP만 남기고 나머지 부분을 삭제했다. 갯수가 많으면 Keyboard Maestro를 이용할 수도 있겠지만 40여개라 수작업으로 정리했다. 나온 IP 목록은 중복을 제거하기 위해 구글 스프래드시트를에 붙여놓고 조건부 서식으로 중복값을 제거했다.

범위 지정 후 =countif(A:A,A:A)>1 맞춤수식 적용

이후 작업은 이전 게시물처럼 iptables -A INPUT -s xxx.xxx.xxx.xxx -j DROP 명령으로 넣어주고 리부팅해서 다시 적용할 수 있게 하려고 파일로 저장하였다.

해당 IP들이 다시 접근해올지 여부는 모르겠으나, 내 호스트에 대해 공격 기록이 있는 IP들은 차곡 차곡 막아줘야겠다.

2022년 3월 14일 월요일

블로그에 가끔 접속 안되는 현상과 특정 IP차단

지난 주 한번에 이어 아까 낮에도 블로그에 접속이 되지 않는 현상이 있었다.

sudo /opt/bitnami/ctlscript.sh status 로 보니 서버 데몬들도 잘 떠 있었고, 일단 sudo /opt/bitnami/ctlscript.sh restart 데몬들을 재시작 시켰더니 정상적으로 잘 접속이 됐다.

혹시 눈에 띄는 점이 있나... access_log와 error_ log를 열어 보니 새벽 1시반 경에 의심스러운 기록이 보였다.

access_log 일부.

xxx.xxx.xxx.xxx - - [14/Mar/2022:01:33:39 +0900] "POST /cgi-bin/.%%32%65%%32%65/%%32%65%%32%

65/%%32%65%%32%65/%%32%65%%32%65/%%32%65%%32%65/%%32%65%%32%65/%%32%65%%32%65/bin/sh HTTP/1.1" 400 226

이번엔 error_log 일부

[Mon Mar 14 01:33:39.964536 2022] [core:error] [pid 5629:tid 140256628164352] [client xxx.xxx.xxx.xxx:35132] AH10244: invalid URI path (/cgi-bin/.%%32%65%%32%65/%%32%65%%32%65/%%32%65%%32%65/%%32%65%%32%65/%%32%65%%32%65/%%32%65%%32%65/%%32%65%%32%65/bin/sh)

아마 취약점을 찾기 위한 시도가 아닐까 싶은데, 이번 접속 장애가 이것 때문인지 다른 이유때문인지는 모르겠지만 일단 이러한 시도를 하는 IP는 차단하기로 하였다.

차단 방법은 Block A Suspicious IP Address 에 설명이 잘 되어 있다. 리부팅 해도 차단이 유지되도록 cron job에 등록해주었고. 인스턴스 이전할 때 기존에는 워드프레스만 백업받고 복원했는데 이젠 차단 아이피 주소 테이블도 같이 관리해줘야겠다.

[업데이트]@2022.3.15 14:30

차단할 아이피 추가하기

sudo su
iptables -A INPUT -s 1.2.3.4 -j DROP

차단한 아이피 목록 보기

iptables --list

차단한 아이피 삭제하기

sudo su
iptables -D INPUT -s 1.2.3.4 -j DROP

차단한 아이피를 파일로 저장하기

sudo su
iptables-save > /opt/bitnami/iptables-rules

부팅될 때마다 차단된 아이피 목록을 불러와서 적용하기

crontab -e

위 명령어로 cron 작업 목록 맨 끝에 아래 행 추가하기

@reboot /sbin/iptables-restore < /opt/bitnami/iptables-rules

2022년 3월 4일 금요일

굿노트용 매일 날짜가 박힌 일간 다이어리 만들기

지난 주부터 아내가 아이패드미니에서 굿노트를 사용하기 시작했고, 아내 업무용으로 적합한 다이어리 속지를 만들기로 하였다. 기존에 쓰던 아날로그 다이어리가 무난했다고 하여 일단 기존 사용하던 다이어리를 참고하여 만들었는데. 크기는 세로형으로 1688*2157 pt (via )로 지정하였다.

맨 처음 만든 것은 월간 달력.

  1. 키노트에 표를 추가하여 월간 달력 모양으로 만든다. 첫번째 행은 요일을 적고 그 아래 5개 행을 추가하여 날짜를 적었다.
  2. 달력의 하단에는 작은 글상자를 두어 그 달의 주요 일정을 메모할 수 있도록 했다.
  3. 미리 날짜를 한번 적어보고 토요일과 일요일은 흐린 회색으로 글자색을 바꾸었다.
  4. 전체 셀을 선택해서 삭제. 숫자 삭제.
  5. Keyboard Maestro 로 1일부터 탭을 누르면서 (=월간 일정의 셀을 한칸씩 이동하면서) 하나씩 증가하는 숫자를 자동으로 입력하도록 하였다.
  6. 공휴일과 기념일등을 추가로 표시하였다.

그 다음에는 일간 속지를 만들어야 했는데, 처음에는 3월부터 12월까지 매일 날짜가 써진 페이지를 만들 자신이 없어서 월,화,수,목,금이 써 있는 5장짜리 1셋트를 만든 후 매주 이 양식을 복사해서 쓰라고 알려주었다. 월과 일은 직접 애플펜슬로 입력하게.

며칠을 이렇게 쓰도록 했는데 사실 마음이 편하진 않았다. 속된 말로 모양 빠지기도 헸고. 매일 날짜와 요일이 기록된 속지를 만들 궁리 시작.

날짜를 순서대로 입력하게 하는데는 역시 스프래드시트가 제격이다. 구글 스프래드시트에 2022-03-07 부터 몇개의 날짜를 입력한 후 서식 → 숫자에서 "연월일 요일" 형식으로 나오도록 지정했다. 2022년 3월 7일 월요일로 나온다. 입력한 영역을 블럭 지정한 후 귀퉁이를 잡아 끌어 12월 31일까지 날짜와 요일의 목록이 완성됐다. 그런데 업무용 다이어리다보니 토요일과 일요일은 쓸 일이 없다. 주말에 해당하는 날짜는 제거하기로 하였다.

Keyboard Maestro로 토요일 문자열을 찾은 후 그 셀이 포함된 행 전체를 삭제하도록 하였다. 다 지운후에는 토요일 문자열을 일요일로 바꿔서 다시 한번 삭제.

이제 주말을 뺀 평일의 날짜와 요일 목록이 됐다. 포맷과 데이타가 완성되면 이걸 텍스트 형식으로 지정하였다.

키노트에서는 기존에 만들었던 요소들을 모두 마스터 슬라이드로 보내고 날짜와 요일 문자열만 깔끔하게 입력하는 방법을 사용했다. 우선 마스터 슬라이드로 기존 요소를 보낸 후 날짜와 요일이 들어갈 부분에 텍스트 요소를 넣고 포맷 → 스타일 → [v] 텍'스트위치 지정자로 정의"를 선택했다. "표시" 항목은 "날짜 입력" 이라고 적어줬고.

대충 슬라이드 레이아웃이 완성됐으면 이걸 복제해서 여러 장을 만든다. 토일을 뺐으니 200여장 쯤 나왔다. 다시 Keyboard Maestro 를 사용할 때다. 스프래드시트에 준비된 날짜 목록을 하나씩 복사해다가 키노트쪽에 붙여넣는 작업을 자동화 하는 것. 붙일 때는 기존에 마스터 슬라이드에 지정된 스타일이 있으니 "붙여넣고 스타일 일치시키기 (opt+shift+cmd+v)"를 해야 한다.

한 화면 안에 스프래드 시트가 펼쳐진 브라우저와 키노트에서 낱장 페이지를 선택한 화면을 양쪽에 준비하여 cmd + tab 으로 왔다갔다 하도록 배치한다. 위에서 말했듯이 스프래드시트에서 날짜와 요일을 복사한 후 한칸 아래로 내려놓고 alt + tab 으로 키노트로 이동한 후 미리 준비해둔 텍스트 입력 영역에 붙여넣기를 한 후 키노트에서도 다음 슬라이드로 이동 시킨다. 이걸 한 셋트로 해서 계속 반복하면 되는데, 두개의 프로그램을 왔다갔다 해야하고 구글 스프래드 시트인 경우는 웹앱이다보니 지연이 있을 수 있다. 지연에 대한 대비로 0.2~3초씩 pause를 넣어주고 반복횟수도 3~5회 정도로 지정했다. 한 셋트씩 잘 진행되는지 보고 다시 매크로를 실행시켰다.

아마 맨손으로 했으면 지루한 작업이었을 뿐 아니라 중간에 날짜와 요일이 어긋나거나 누락이 생겼을 수 있었을 것이다. 스프래드시트와 Keyboard Maestro를 이용해서 빠른 시간 안에 깔끔하게 다이어리 속지를 만들 수 있었다. 올 연말에 미리 30분만 매크로 돌리면 또 다음 해 속지를 만들 수 있을 것이다.