무한로그인 공격 막기(fail2ban)

 라즈베리파이를 이용해서 서버를 구축 중이다. 원격접속을 위해서 ssh 포트를 열어 두었는데, 접속로그를 보니 여러 특정IP에서 계속 로그인을 시도하고 있었다. 
접속 로그 확인
$ sudo tail -f /var/log/auth.log
...
Aug 17 22:49:21 raspberrypi sshd[24869]: Failed password for root from 116.31.116.46 port 23122 ssh2
Aug 17 22:49:23 raspberrypi sshd[24869]: Failed password for root from 116.31.116.46 port 23122 ssh2
Aug 17 22:49:26 raspberrypi sshd[24869]: Failed password for root from 116.31.116.46 port 23122 ssh2
...
 whois 명령을 통해서 116.31.116.46 IP를 검색해보니, 중국발IP이다.
$ whois 116.31.116.46
 비밀번호를 계속 입력하는 방식으로 로그인을 시도하는것 같다. 우연히라도 비밀번호가 맞게되면 큰일이므로 무한로그인을 시도하는 IP를 자동으로 차단해 보자.

 fail2ban 이라는 프로그램을 설치해서 [지정한 시간내]에 [지정한 횟수]만큼 실패하면, [지정한 시간만큼 접속을 차단]해 보자.
$ sudo apt-get install fail2ban
 fail2ban 이 정상적으로 방화벽에 등록이 되었는지 확인해보자.
$ sudo iptables -L
 fail2ban이 위와 같이 설치가 되어 있다면, ssh로그인을 제어 할 수 있다.

 환경설정 파일을 조작하여 원하는 형태로 만들어보자. 기본적으로 10분간 3회 비밀번호가 틀리면, 그 이후부터 10분간 ssh접속이 차단된다.
$ sudo vi /etc/fail2ban/jail.conf
ignoreip 차단하지 않는 IP. 기본적으로 로컬 IP는 차단하지 않는다.
bantime 차단할 초단위 시간. 600 (10분)이 기본값. 86400(1일)
findtime 오류 횟수를 셀 시간.
maxretry 허용할 차단 횟수
 findtime 600, maxretry 6 라고 가정하면 10분동안 6번 로그인 실패가 일어나면 bantime 만큼 로그인을 차단한다.

 설정 파일을 모두 고쳤으면, fail2ban을 재시작한다.
$ sudo service fail2ban restart
 iptables 를 통해서 차단된 IP리스트를 확인할 수 있다. 아까부터 무차별적으로 로그인하던 ip(116.31.116.46)가 차된됨을 확인 할 수 있다.
 fail2ban이 재시작되면, 차단된 목록도 초기화가 된다. 실수로 자신의 IP가 차단되면, 서버를 재부팅하면된다. 또는 iptable 명령을 통해서 차단된 ip를 해제 할 수도 있다.

젠가를 이용해서 수납함 만들기

 이 글의 원래 제목은 '젠가를 이용해서 화분만들기' 였다. 만들고 보니, 수납함으로 사용하는게 더 나은것 같아서 수납함으로 바꾸었다.

 이제 시작해보자.

 요즘 다육식물을 키우고 있다. 좁은 공간에서 식물을 키우다 보니 공간이 부족하다는 생각을 계속하게 되었다. 하나의 화분에 하나의 식물이 아닌, 하나의 화분에 여러개의 식물을 키워야 겠다는 생각을 많이 하게 되었다.

 둥근 화분은 화분 자체를 만들기 쉽고, 하나의 식물에는 가장 효율적인 구조이다. 하지만, 화분을 배치하는 관점에서 보면다면 직사각형 모양의 화분이 좀더 효율적인 구조이다.

 집에 여분의 젠가가 여러개 있었다. 그래서 이 젠가를 이용해서 화분을 만들어 보기로 했다.
 대충 이런 모양으로 만들면 될 것 같다. 가로 30cm 정도 되어서 작은 크기의 식물은 3~4개 정도 심을 수 있을 것 같다.
 공목본드를 이용해서 젠가를 붙였다. 
 젠가를 펼치면 이렇게 된다.
 이렇게 하나씩 젠가를 이어 붙였다. 2개, 2개, 4개, 4개 이렇게 작은 형태를 이어 붙이면 좀더 정교하게 붙일수 있다.
 상판 작업이 끝났을 때의 모습이다. 
  바닥이 물에 의해서 썩는 것을 방지하게 위해서 다리를 하나 붙였다. 완성품의 모습이다.
 화분으로 사용하기 위해서 안쪽에 페인트칠을 하려고 했는데, 그냥 이대로 사용해도 괜찮을 것 같다는 생각이 들었다. 그래서 수납함으로 사용하기로 했다.
 젠가의 특성상 조금 크기가 맞지 않는 부분이 있다. 하지만, 블럭형태이고 목공풀을 이용해 자신이 원하는 다양한 모양으로 만들 수 있다는 장점이 있다. 모양이 살짝은 삐뚤삐둘하지만 그걸 고려하더라도 괜찮은 모양의 수납함이 나온것 같다.

다육식물 화분만들기, 2017

 식물 키우는 것을 좋아한다. 시골에서 태어나서 그런지 식물을 심고 가꾸는 것에 대한 거부감이나 부담감이 없다. 어렸을 때 뒷마당에서 딸기를 키워 수확해 먹는 재미가 쏠쏠했다. 보모님의 밭일도 종종 도와 드렸다.

 4년 전, 다육실물 화분을 만든적이 있다.
다육식물 화분만들기 : http://www.withover.com/2012/05/blog-post.html
 잘 키우다가 작년 겨울에 온도 관리를 잘못해 상당수의 식물을 죽이고 말았다. 그래서 봄도 오고 해서 다육식물을 좀 샀다. 다육식물을 고른 이유는 싸고 관리하기 편하기 때문이다.

 3개 정도는 고양에서 열렸던 국제꽃박람회에서 구입을 했고, 대부분은 인터넷으로 구입을 했다. 배송을 걱정했지만, 정말로 뽁뽁이를 이용해서 완벽하게 포장을 해서 보내주셨다. 포장의 기술이 놀라울 따름이었다.

 아래에 나오는 식물의 이름은 다음과 같다.
 작업 사진을 몇장 올려본다. 작업시간은 총 2시간 정도 걸렸다.






 집에 보관해두었던 화분과 다육식물을 한자리에 두고 화분크기에 맞게 다육이를 배치하였다. 거실에서 작업할 때는 신문지를 바닦에 깔고, 분무기를 이용해 물을 뿌리면 먼지가 날리는 것을 막을 수 있다.

 큰 화분에는 여러 다육식물을 배치하였다. 가운데 우뚝 서있는 녀석이 스투키라는 다육실물이다. 
 미리 조립해둔 3단 받침대에 화분을 재배치하였다.


 다육식물은 상대적으로 다른 식물에 비해서 키우기가 편하다고 한다. 자주 통풍을 시켜주고, 햇볕을 하루 4시간 정도 받을수 있는 공간에서 키워야 한다. 물은 성장기에는 1~2주에 한번, 휴면기에는 한달에 한번 정도 주면 된다. 여름에는 저녁에 물을 주고, 겨울에는 따뜻한 낮에 주는것이 좋다고 한다. 자세한 내용은 아래의 링크를 참고한다.
다육식물 키우기 팁 : http://tip.daum.net/question/74960219
 기존 화분을 재활용하고 작은 다육이를 구입한다면 적은 비용으로도 다양한 다육식물을 키워볼수 있다. 

 다육식물 화분 만들기는 여기까지.

사이트 접근 제한, One More Step Please complete the security check to access

 어느날 갑자기, 아래의 문구가 나오면서 인터넷 사이트에 접속이 바로 되지 않는다.
One more step
Please complete the security check to access 
 나는 로봇이 아닙니다 라는 체크를 하거나 그림 맞추기를 성공해야지만 내가 원하는 사이트에 접속할 수 있다.
 며칠 동안 인터넷을 이용할 때마다, "나는 로봇이 아닙니다"라고 체크를 했지만, 위 경고는 사라지지 않았다. 인터넷을 통해 검색을 해보았지만, 특별히 도움될 만한 것을 찾지 못했다. 해당 사이트에 나오는 도움말도 도움이 되진 못했다.
도움말
https://support.cloudflare.com/hc/en-us/articles/200171816-Why-do-I-see-an-Access-Restricted-CloudFlare-Challenge-Page-from-anti-virus-cloudflare-com-
 원인으로 추정하는 것은 라즈베리파이에 설치된 프록시 서버이다. PC와 같은 네트워크를 사용하는 라즈베리파이의 프록시 서버를 이용해 몇몇 사이트를 접속한 적이 있었다. 크롬은 일반 IP로 접속을 하고 파이어폭스는 프록시 서버를 이용해서 사이트를 접속 했는데, 이때, 집에서 사용하는 IP(프록시 서버 IP)가 블랙리스트에 등록이 된게 아닌가하는 생각이 든다.

 좀더 인터넷을 통해서 해결 방법을 찾아봐야겠다. IP를 강제로 바꾸면 해결이 될것 같기도 한데 될지는 모르겠다.

 혹시, 해결방법을 아시는 분은 댓글 부탁드립니다.

Proxy Server, Squid3 인증 구현하기

 라즈베리파이를 홈서버 용도로 구축하여 사용중이다. 라즈베리파이에서 구동중인 프로그램중 하나가 프록시 서버를 만들어주는 Squid3 이다.
Ubuntu Proxy Server, Squid3 간단 설치 : http://www.withover.com/2012/02/ubuntu-proxy-server-squid3.html
 라즈베리파이를 개인적으로 사용하기 때문에 트래픽과 서버부하를 크게 걱정않았다. 그런데 조금씩 라즈베리파이가 느려지는것이 보여 원인을 찾아보았다. "top" 명령을 통해 찾아보니, 상당한 자원을 Squid3 가 차지 하고 있었다. Squid3의 로그파일도 엄청 쌓이고 있었다. 로그파일에 찍힌 주소를 보니 중국쪽에서의 접근이 많았다.
/var/log/squid3 $ sudo tail -f access.log
 그래서 Squid3에 ID와 패스워드 인증을 도입하기로 했다.

 라즈베리파이의 기본 계정을 이용하는것이 아니라, 별도의 ID와 패스워드를 입력해야 프록시 서버에 접근 할 수 있게끔 설정을 바꾸어보자. 별도의 계정을 이용하기 위해 digest 방식을 사용하기로 했다. digest를 이용하기 위해서는 apache2-utils를 설치해야한다. apache2-utils는 apache 라는 웹서버와는 무관한 프로그램으로 알고 있다.
$ sudo apt-get install apache2-utils
 Squid3 설정 파일을 수정한다.
$ sudo vi /etc/squid3/squid.conf
 설정 파일의 550 라인 정도 쯤에 아래와 같은 코드를 추가하자.
auth_param digest program /usr/lib/squid3/digest_file_auth -c /etc/squid3/passwords
auth_param digest realm proxy
acl authenticated proxy_auth REQUIRED
http_access allow authenticated
 digest의 ID와 패스워드를 생성한다.
$ sudo htdigest -c /etc/squid3/passwords proxy user_id
 Squid3를 다시 시작한다.
$ sudo service squid3 restart
 이제 브라우져에 프록시 접근을 설정해 보자. 파이어폭스 기준으로 "설정 > 고급 > 네트워크 탭 > 설정" 을 눌러 다음과 같이 설정한다.
 그런 다음, 주소창에 주소를 입력하면 ID와 패스워드를 묻는 창이 뜬다. 이때, htdigest 를통해 만들었던 ID와 패스워드를 입력한다.
 ID와 패스워드를 아는 사람만이 해당 프록시 서버를 이용할 수 있다.

 정말로 그러한지 squid3 로그를 보자.
$ cd /var/log/squid3
$ sudo tail -f access.log 
1460360248.725      3 185.70.185.61 TCP_DENIED/407 3682 GET http://havadar.mobi/ - HIER_NONE/- text/html
1460360248.744      2 61.160.223.66 TCP_DENIED/407 3594 CONNECT login.sina.com.cn:443 - HIER_NONE/- text/html
1460360248.765      3 114.238.163.134 TCP_DENIED/407 3580 CONNECT www.baidu.com:443 - HIER_NONE/- text/html
1460360248.888      3 140.205.144.227 TCP_DENIED/407 3822 POST http://loc.map.baidu.com/sdk.php? - HIER_NONE/- text/html
 위 주로로 접근한 기록들이 모두 TCP_DENIED 된 것을 확인 할 수 있다. 내가 접근했을 때의 로그를 보고 싶으면, 거부난 로그를 제외하면 자신의 로그를 볼 수 있다. grep -Ev '제외단어1|제외단어2' 명령을 이용하면 가능하다.
$ sudo tail -f access.log | grep -Ev 'TCP_DENIED|TCP_MISS'
 Squid3 의 로그 파일에 대한 정보는 다음 페이지에서 확인가능하다.
Squid3 로그파일 정보: http://wiki.squid-cache.org/SquidFaq/SquidLogs
 이상으로 인증을 통해 프록시 서버를 이용하는 방법을 알아보았다.

블로거 댓글창이 안보일 때 & 구글+ 댓글 연동하기

 블로거 플랫폼을 이용해서 블로그를 운영중이다. 얼마전 블로그의 템블릿 레이아웃을 교체 하였다. 그 동안 기본 템플릿을 조금 변형해 사용하다 처음으로 사용자 정의 템플릿을 이용하게 되었다. 다양한 형태의 레이아웃 중에서 깔끔한 형태의 Blue Blogger Template 을 적용하기로 했다.
Blue Blogger Template : 데모사이트, 다운로드

 템플릿은 관리자 페이지에서 적용가능하다.
템플릿 -> 백업 및 복원 -> xml 파일 업로드
 해당 템플릿을 적용하던 중 댓글이 표시되지 않는 문제가 발생했다. 원인을 찾아보니, 구글+ 댓글 연동기능을 사용할 경우, 문제가 생길수 있다고 한다.
Google+ -> 이 블로그에서 Google+ 댓글 사용 체크 해지
  구글+ 댓글 기능을 사용하려면 어떻게 해야할까? 아래의 링크를 타고 들어가서 해결 할 수 있다.
Blogger용 Google+ 관리 https://support.google.com/blogger/answer/1752748?hl=ko
 먼저, 템플릿을 백업한다. 템플릿 -> HTML편집에서 다음의 코드를 찾는다. Ctrl + f 기능을 이용해서 찾을 수 있다.
<b:if cond='data:post.includeAd'>
 위 코드가 발견된 곳의 바로 위에 다음의 코드가 있을 것이다.
<b:if cond='data:blog.pageType == &quot;item&quot;'>
 위 코드가 있는 부분을 다음과 같이 수정한다. 파란색 코드는 구글+ 댓글을 표시해주는 코드로써 추가할 코드이다. 붉은색 코드는 블로거 댓글을 표시해주는 코드로써 삭제할 코드이다.
<b:if cond='data:blog.pageType == &quot;static_page&quot;'>
  <div class='cmt_iframe_holder' expr:data-href='data:post.canonicalUrl' expr:data-viewtype='data:post.viewType'/>
  <b:if cond='data:post.showThreadedComments'>
    <b:include data='post' name='comments'/>
  <b:else/>
    <b:include data='post' name='comments'/>
  </b:if>
</b:if>
<b:if cond='data:blog.pageType == &quot;item&quot;'>
  <div class='cmt_iframe_holder' expr:data-href='data:post.canonicalUrl' expr:data-viewtype='data:post.viewType'/>
  <b:if cond='data:post.showThreadedComments'>
    <b:include data='post' name='comments'/>
  <b:else/>
    <b:include data='post' name='comments'/>
  </b:if>
</b:if>
 블로거 관리 페이지에서 Google+ -> '이 블로그에서 Google+ 댓글 사용'을 체크 한다. 붉은색과 파란색 코드가 모두 존재할 경우 문제가 발생 할 수 있다. 블로거 댓글 기능을 다시 사용하기 위해선 붉은 색 코드를 원복하면 된다.