뭘 이런걸..

Posted
Filed under Tech/프로그래밍
openlook.org 의 장혜식님 블러그를 보다보니, blog 의 trackback 의 인코딩때문에 (요즘 utf8 이 대세로 가는 분위기라..) 이런 저런 코드들이 나오고 있습니다.

그래서 저도 잊어 버릴까 만든 코드를 기록해 높습니다. (예전에 만들어 놓았다가 찾느라고 힘들었습니다. T.T)

다른 분들의 코드들이 대부분 iconv 나 언어에서 제공하는 charset encoding/deconding 함수를 이용하는 반면, 제 코드는 직접 까 봐서 이놈이 정말 맞는지 여부를 확인하는 코드 입니다.

<?php // // +----------------------------------------------------------------------+ // | PHP Version 4 | // +----------------------------------------------------------------------+ // | Copyright (c) 1997-2003 The PHP Group | // +----------------------------------------------------------------------+ // | This source file is subject to version 2.02 of the PHP license, | // | that is bundled with this package in the file LICENSE, and is | // | available at through the world-wide-web at | // | http://www.php.net/license/2_02.txt. | // | If you did not receive a copy of the PHP license and are unable to | // | obtain it through the world-wide-web, please send a note to | // | license@php.net so we can mail you a copy immediately. | // +----------------------------------------------------------------------+ // | Author: JoungKyun Kim <http://www.oops.org> | // +----------------------------------------------------------------------+ // // $Id: eSystem.php,v 1.2 2005/07/11 05:58:11 oops Exp $ require_once 'PEAR.php'; /** * PEAR's eSystem:: interface. Defines the php extended system mapping function * and any utility mapping function * * @access public * @version $Revision: 0.1 $ * @package Unicode */ class Unicode extends PEAR { function chr2bin ($c, $shift = '') { $c = ord ($c); if ( $shift && preg_match ('/^([<>]+)[\s]*([0-9]+)/', $shift, $match) ) : switch ($match[1]) : case '>>' : $c = $c >> $match[2]; break; case '<<' : $c = $c << $match[2]; break; case '<' : $c = $c < $match[2]; break; case '>' : $c = $c > $match[2]; break; endswitch; endif; return decbin ($c); } function is_utf8 ($str) { $_l = strlen ($str); $_not = 0; for ( $i=0; $i<$_l; $i++ ) : #$_first = $this->chr2bin ($str[$i]); # if 7bit charactior or numeric, skipped #if ( strlen ($_first) != 8 ) # continue; # if single byte charactors, skipped if ( ! (ord ($str[$i]) & 0x80) ) : continue; endif; $_first = $this->chr2bin ($str[$i], '>>4'); switch ( $_first ) : case 1111 : $b = 3; break; # 4byte case 1110 : $b = 2; break; # 3byte default : return 0; # not utf8 endswitch; for ( $j=1; $j<$b; $j++ ) : if ( substr ($this->chr2bin ($str[$i+$j]), 0, 2) != 10 ) return 0; endfor; break; endfor; return $_not ? 0 : 1; } } /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: noet sw=4 ts=4 fdm=marker * vim<600: noet sw=4 ts=4 */ ?>


코드는 Pear 코드로 작성이 되었으며, 사용법은

<? require_once 'Unicode.php'; $_f = 'usage_200509.html'; $_ff = 'bb.html'; $u = new Unicode; if ( file_exists ($_ff) ) unlink ($_ff); $_t = file ($_f); foreach ( $_t as $_v ) : $_v = trim ($_v); if ( $u->is_utf8 ($_v) ) putfile_lib ($_ff, utf8decode_lib ($_v, 'cp949'), 1); else putfile_lib ($_ff, $_v, 1); endforeach; ?>


와 같이 사용할 수 있습니다.

단, euc-kr 과 utf8 만 구분이 됩니다.
2006/03/31 15:55 2006/03/31 15:55

트랙백은 HTTP GET 으로 간단한 파라미터들을 함께 넘기면 단순히 받아 저장하는 기능에 불과하므로 보내는쪽의 인코딩이 무엇인지 파악하기가 어려운 점이 있습니다. 물론 향상된 트랙백 규약에는 트랙백을 POST로 보내고 인코딩 정보도 함께 전송하도록 확..

문서의 Charset 을 detecting 하는 library 로는 IBM 이 지원하는 International Components for Unicode (ICU Project) 의 ICU library 와 Mozilla Browser 에서 이용하는 Universal Chardet library 가 있습니다. ICU 의 경우에는 charset detect 가 포함된지 꽤 되었음에도 불구하고, php 5.3 부터 기본 포함되는 intl extensi...

이창일

putfile_lib ($_ff, utf8decode_lib ($_v, 'cp949'), 1);
위에서 없는 함수를 사용 했네요;;
앞의 putfile_lib 파일에 쓰는 함수 인것 같고
utf8decode_lib 는 변환 같은데 PEAR.php 에도 엇는 함수네요

김정균

음 깜빡 했군요. 해당 함수들은 http://devel.oops.org 에서 배포하는 korean extension 에 포함되어 있습니다. 그리고 해당 함수들이 사용된 것은, 그냥 예제일 뿐이죠. 해당 부분에 님이 필요하신 코드를 적어 주시면 됩니다.

Posted
Filed under 주절주절
본 내용은 현재의 상태와는 무관하게, 2005년 11월 경 KLDP 의 OS 를 Debian 에서 안녕 리눅스로 교체 하면서, KLDP 관리자 업무를 시작하면서 겪은 사항들 입니다.

소프트웨어적인 tuning 기라고 볼 수도 있습니다.

2005년 11월 경 OS 교체시기 즈음해서 bot 들의 접근 (google ranky 를 높이기 위한 referrer 를 남기는 bot들) 이 많아지고, 때마침 rss feed 를 사용량이 늘어 나면서 kldp service 가 원할하지 못하게 돌아가는 상황이었습니다.

이 시기에 문제는 3가지가 있었습니다. 이 3가지의 처리 사항에 대해서 기록을 남겨 볼까 합니다.

1. phpBB 의 불합리한 검색 구조

phpBB 의 검색은 검색을 하면 search table 에 해당 resource 들 즉, 글 리스트에 대한 정보를 record 에 기록을 하게 됩니다. 그런데 문제는 검색을 할 때, session table 에서 리스트를 가져와서 session table 에 없는 record 들을 삭제를 하고 결과를 보여준다는 것에 문제가 있었습니다. 즉, bot 들의 접근이 많아지면서, session table 에 몇천개에서 몇만개의 record 가 쌓이게 되었는데, phpBB 의 검색 루틴은

DELETE FROM phpbb_search_results
WHERE session_id NOT IN ('da7d5512402628bc6691954af5128fb3',
'783185e8b1e575058b81bffd8ac54c84', ...);


와 같은 식을 IN 안에 몇천개 ~ 몇만개를 한꺼번에 넣어 버리는 불합리한 구조를 가지고 있었습니다. 그러다 보니, 위의 query 가 lock 이 걸리게 되고, 검색이 쌓이다 보면 mysql 이 memory 를 소진하고 swap 까지 다 사용하면서 모든 query 들이 lock 이 걸리는 문제를 발생 시키고 있었습니다.

그리하여, 이 delete 부분을 원 소스에서 comment 처리하고, 이 부분을 cronjob 으로 한꺼번에 IN() 을 하던 것을 하나씩 하게 처리하여 서버 로드및 리소스 사용률을 현저하게 낮추어 접속에 원할함을 제공할 수 있었습니다.

2. rss feed 의 환장하게 강력한 기능들..

KLDP 의 bbs 에서 제공하던 rss feed 는 phpBB 의 original 이 아닌 개량판이었습니다. 문제는 기능을 강화하다 보니, sql query 에서 join 이 남발하게 되었고, 이 feed 를 요청하는 query 가 많아짐에 따라, join 을 하다라 locking 이 되는 현상이 발생하여 mysql 응답 속도가 현저하게 느려지는 문제가 존재했습니다.

이를 해결하기 위하여, mysql 에서 join 을 요청마다 처리하기는 힘들기 때문에, 미리 backend 에서 join을 한 데이터를 sqlite 의 one table 에 넣어두고, feed 요청은 이 sqlite 를 통해서 index 를 탈수 있도록 변경하여 처리를 했습니다.

3. moniwiki 의 fulltext search 의 문제점

위의 2가지 문제가 동시에 발생하고 있어, 원인을 찾기가 어려웠었는데, KLDP 서버에서 여러가지 서비스를 하다 보니, moniwiki 에서도 하나의 문제점을 가지고 있었습니다.

위의 2가지 문제를 처리하고 나서, 계속 죽어나가던 서버들이 어느정도 복구가 되었지만, 그래도 resource 를 과다 사용하는 문제가 있었으며, apache process 1개의 size 가 100M 정도로 커지는 경우를 발견하게 되었습니다. 그래서 strace -p PID 로 열심히 지켜보던 중, wiki 의 fulltext search 에서 이러한 문제가 발생한다는 것을 찾게 되어, moniwki 관리자인 박원규님께 보고하여, 이 문제를 해결했던 부분이 있었습니다.


대략 2005년 하반기의 문제는 위의 3가지 문제가 동시에 원인이 되었고, 이 3가지 문제를 해결하면서 안정화를 이루어 내었었습니다.

이런 기록을 남기는 이유는, 대부분의 SE 들이 system (H/W) 과 O/S 레벨에서의 튜닝 (컴파일을 해야 하고, 정적으로 빌드해야 하고.. 등등) 에 강박관념을 가지고 있는 듯하여, 제 경험을 일부 내 놓아 봅니다. 실제 H/W 나 O/S 레벨의 튜닝보다 application 의 튜닝이 성능을 훨씬 높일 수 있다는 것을 체감할 수 있으며, SE 라고 해서 코드를 볼줄 모르면 도태될 수 밖에 없다는 것을 알려 주고 싶었습니다.

현재, 2006년 3월 현재, drupal 로의 개편이 이루어 지고 있습니다만, 역시 개편 초기의 모습은 상당이 안정적이지 않습니다. 하지만, 제가 어제 새벽에 짬을 내어 잠시 분석해 본 바로는, 엄청난 튜닝의 소지가 존재하고 있다는 것을 발견했습니다. 즉, drupal 이 검증을 받았을지 모르지만, 사용하는 많은 (그것도 널리 사용이 되는) 모듈들의 설계가 엄청나게 부실하다는 것을 발견 하였고.. (index 를 타지 못하게 설계된 table schema, join 을 남발하는 query 등등) 이 것들에 대한 대안을 만들 수 있도록 삽질(?) 을 할 수 있는 즐거움도 가질 수 있을 것 같군요.

모든 일은 재미(?)가 있어야 열심히 할 수 있습니다. 귀찮다고, 누가 알아줄까 하고, 왜 소득도 없는 닥질을 해야 하는지 하고 생각할지 모르겠지만, 이런 일들이 다들 일하시는데 훌륭한 밑천이 될 수 있다는 것을 느끼셨으면 합니다.

왠만한 분들은.. 아르바이트, 프리랜서 생활을 해 보셨을 것이고, 이 경력들을 인정 받지 못하신 적이 많으실 겁니다. 하지만, 이런 생활에서 얻은 노하우를 공개를 함으로서 해서 이 사람이 어느 정도의 능력을 가졌다는 것을 다른 사람들이 인식을 하게 되면, 이 경험들이 모두 경력으로 둔갑을 하게 됩니다.

하지만 가장 중요한 것은.. 위에서 언급을 했듯이 재미(?)를 가지고 해야지 버틸수가 있다는 겁니다.
2006/03/11 04:29 2006/03/11 04:29

모든 일은 재미(?)가 있어야 열심히 할 수 있습니다. 귀찮다고, 누가 알아줄까 하고, 왜 소득도 없는 닥질을 해야 하는지 하고 생각할지 모르겠지만, 이런 일들이 다들 일하시는데 훌륭한 밑천이 될 수 있다는 것을 느끼셨으면 합니다. 왠만한 분들은...

lovian

재미.
절대동감합니다. :)

kss

저는 요즘 회사에서 워낙에 머리가 복잡하다 보니 뭐 하나에 집중하기가 쉽지 않네요. T.T

Simon

SE가 코드를 볼 수 있어야 하고, 아울러 기본적인 건 짤 수 있어야 한다는 데 절대 동감. 그런 SE와 안 그런 SE의 차이가 시간이 갈 수록 벌어지고, 그렇지 못한 경우 올라갈 수 있는 Level의 한계가 보인다고나 할까...
그런 면에서는 전산과 출신이 비전공자보다 나은데(C라도 배우고 오니까), 요새 졸업하는 인재들을 보면 꼭 그렇지만도 않다는 슬픔이 있군요...

wookay

튜닝하시느라 수고하셨습니다.^^

RJ

저도 정균 님의 다음과 같은 말씀에 깊이 공감합니다. 정말 그랬고, 그렇습니다. :)

"H/W 나 O/S 레벨의 튜닝보다 application 의 튜닝이 성능을 훨씬 높일 수 있다는 것을 체감할 수 있으며, SE 라고 해서 코드를 볼줄 모르면 도태될 수 밖에 없다."

함께 일한 시간은 짧았지만, 정균 님의 말씀을 듣고 얻는 바가 많아서 코드 읽기와 작성을 다시 공부하기 시작했습니다. 이렇게 말씀드리기가 머쓱하지만, 아무튼 감사드립니다. :)

Posted
Filed under 주절주절
일본 지사의 서버 구축을 위해서 일본으로 오고야 말았습니다. 어떡하든 한국에서 처리하고 싶었는데.. (경비를 영수증 처리를 해야 하는 것을 보고선 귀차니즘에 외국 출장이 가기 싫었어요 T.T) 구축 일정은 잡혀 있는데 네트워크 개통이 늦어져서 로컬 설치를 해야 한다는 말에 어쩔 수 없이 오게 되었는데, 오기 전날.. 네트워크가 개통이 되었다는.. T.T

리무진 버스 안에서 self shot


어쨌든 김포를 출발해서 2시 50분에 하네다에 도착!

하네다에 도착한 느낌은.. 일단 활주로 밑으로 차들이 다닌 다는 것이 좀 신기하더군요. 착륙 후 주기장으로 이동을 하는 도중 차들이 밑으로 씽씽 다니는 것을 보니 놀러 몇번 와보기는 했지만 또 다른 나라에 온 느낌도 들더군요. (창가 좌석이 아니라서 사진은 못찍고.. T.T)

리무진 표사는 곳을 몰라 헤매다 어설픈 영어로 사서 하네다 공항을 한바퀴 돌고선 신주쿠로 출발.. 하네다 공항의 국제선은 (국제선이라 해도 김포 노선 밖에 없습니다만..) 정말 꾸리하고, domestic 은 화려 하더군요 ^^;

출발하자 마자 정체.. 음 도쿄도 역시 어쩔 수 없군 했는데 좀 가다 보니 고장난 차 한대가 한차선을 막고 있었고.. 그 뒤로는 술술 잘 왔던 것 같습니다. 우리나라랑 또 다른 점은 (일본에서 버스는 처음 타 봤군요. 맨날 지하철만 타다가..) 차들이 정말 얌전하게 가더군요. 차선 변경하는 차가 거의 없다는.. 하지만 역시 일본에도 양아치 처럼 운전하는 차들이 없지는 않다는 것을 확인 하면서.. 사람사는 곳이 다 그렇지 하고 위안.. :-)

신주쿠에 도착하니, 일본지사로 이적(?)하신 주석님이 마중.. 유창한 native japanese 로 checkin 까지.. Thank you!!

하지만, 믿었던 재순옹이 약속이 있다고 어디로 휘익.. 하고 저녁을 혼자 먹어야 하는 말도 안되는 상황이 발생해서.. 어떡하지 하다가 역시 CDNetworks 일본 지사로 옮기신 최 준호님에게 MSN help 요청을 하여 혼자 먹는 저녁은 겨우 피할 수 있게 되었습니다.

중학교 3학년때는 일어 대화를 조금 했었는데, 15년동안 전혀 사용하지 않다 보니.. 완전히 일본어맹이 되어 준호님의 도움을 받아서.. 필요한 몇가지 물품을 구입하고, 마눌님의 명령에 의한 약재(?) 구입까지 마치고 저녁을 먹으로 갔습니다. (이름은 알 수 없음임.. 히라가나나 한자로 적었으면 대충은 읽겠지만, 절대 외어지지 않는 가다가나로 적혀 있었는지라.. ^^)

저녁식사 중..

WDB 에서 같이 근무한 표준영씨와



준호님의 멋진 저녁빵을 아주 잘 얻어먹고, 준영님의 음료수빵으로 아주 거한 대접을 받고 왔습니다.

최준호님

최준호님과 표준영님



거기다가 호텔까지 데려다 주시는 친절함에 사치스러운 대접(?)을 받고 무사히 귀텔(?).. 들어오자 마자 재순옹이 들어왔나 보고, 어떻게 나만 혼자 두고 밥을 먹으로 가다닛 하고 따지러 갔으나, 요즘 업무 악박에 얻은 직업병인 건망증으로 인하여 전혀 엉뚱한 얘기만 하다가 방으로 오고나서야.. 이런..!!!

이렇게 하루가 가고 말았습니다. 앞으로 6일을 더 있어야 하는데.. 암담하군요.
2006/03/03 01:58 2006/03/03 01:58
kss

음... 첫번째 사진... 재미있군요. ㅋㅋ

RJ

정균 님은 평소처럼 '오동통'하신 것 같은데, 어째 준호 형은 부실해 보이는 듯;;; ㅋㅋ

Posted
Filed under Tech/프로그래밍
굴림체가 너무 마음에 들어서 죽 고집을 하고 있었는데, 굴림체를 사용하는 사람들은 공통된 요구사항이 있었나 봅니다.

http://crizin.net/index.php?pl=306&ct1=3&ct2=10

에서 CrizinCode 라는 굴림체 변형 폰트를 발표했는데, 굴림체를 사용하면서 이점은 이랬으면 하는 모든 사항이 반영이 되었습니다. 만들어 주신분 정말 고맙습니다.

내가 원하던 글꼴의 조건은,

1. 고정폭 글꼴일 것
2. I,l,1,O,0의 구분이 명확할 것
3. 굴림체에 버금가는 가독성을 보일 것
4. 역슬래시를 \ 모양으로 표시해줄 것
5. 9pt 에서 Anti-aliasing 없이 출력될 것
6. 한글은 굴림 9pt로 출력될 것


감사히 잘 쓰겠습니다. :-)
2006/02/02 21:35 2006/02/02 21:35
Posted
Filed under Tech/프로그래밍
hanterm-xf 는 utf8 을 지원하지 않습니다. RH 가 utf8 로 default charset 을 변경한 이 후 부터, hanterm-xf 가 utf8 을 지원하지 않는 다는 이유로 꼬박 euc-kr 을 고집해 오고 있었습니다만.. 아무래도 대세에 밀리는 기분이 들어서 utf8 환경으로 변경을 해 보고자 작업을 하게 되었습니다.

처음에는 original hanterm 이 utf8 을 지원하는 까닭에 hanterm 을 cygwin 에서 난관끝에 빌드를 하고, utf8 이 지원됨을 확인하고 뿌듯했으나, 곧, 창을 resize 했을 경우, 원 size 의 화면만 출력이 되는 문제를 해결하지 못해.. 포기하고, termcap 의 문제인가 살펴 보았지만 알수 없는 암호만 가득해서 결국에는 소스를 열어 보고 이리저리 해 보았지만 해결을 못했습니다.

그래서 안되면, xterm 이 utf8 을 지원하니, xterm 의 utf8 기능을 hanterm-xf 에 반영을 하자고 hanterm-xf 의 소스를 열었으나.. 역시 define 의 엄청난 압박에 포기하고, iconv 를 이용해서 출력과 입력에만 처리하기로 하고 patch 를 작성 했습니다.

비록 요즘 gnome 이나 kde 의 library 를 이용한 term 들이 기본으로 한글을 지원하면서 hanterm(-xf) 의 필요성이 점점 없어지면서, 별로 사용을 하고 있지 않지만, cygwin 이나 기타 hanterm 에 대한 애정 때문에 사용하시는 분들은 아래의 패치를 이용하시면 utf8 걱정은 덜 수 있을 듯 싶습니다.



이 패치는 hanterm-xf 2.0.5-177 (현재 cvs version) 에 기반한 패치이며, 2.0.5 에서는 아마 적용이 가능할 것이며, 2.x 의 경우 수작업으로 패치를 하시면 사용이 가능 할 겁니다.

euc-kr mode

utf8 mode



잠깐, hanterm 과 hanterm-xf 는 뭐가 틀리나요?

hanterm 과 hanterm-xf 는 엄연히 뿌리가 다릅니다. hanterm 은 현재 XL 레이싱을 개발하고 있고, 리니지를 개발한 송재경씨가 X11R5 기반의 xterm 을 기반으로 작성을 했으며, 여러 OS 에서 포팅이 가능하다는 장점을 가지고 있는 반면에, hanterm-xf 는 ami, gau 등을 제작한 미지의 황치덕씨가 X11R6 기반의 xterm 에 hanterm 의 패치가 반영하여 작성을 했습니다. 그래서 여러가지 면에서 hanterm 보다 미려하기는 하지만 utf8 이 지원되지 않은 단점등 여러가지가 있습니다. 현재, hanterm 과 hamter-xf 의 개발은 중단된 상태나 다름이 없습니다.
2006/01/04 23:46 2006/01/04 23:46
김정균

utf8 patch 가 hanterm-xf 에 merge 가 되었습니다. hanterm-xf 2.0.6-177 부터 반영이 되었으니, 참고하세요.

badung

오!! 감사드립니다 잘 되는군요 그런데 utf-8모드로 따로 실행하거나 단축키는 없나요? 지금은 [완성]을 마우스로 찍어서 utf-8로 변환하고 있는데요..

김정균

$HOME/.Xdefaults 라는 파일을 생성하고, 이 파일에

Hanterm*hangulCode: 2

라고 지정해 주면 됩니다. 또는, hanterm 의 설정 파일 (여기에 지정해 주는 건데, 설치시에 따라 위치가 달라져서..), 저의 경우에는 /etc/X11/app-defaults/Hanterm 에

*hangulCode: 2

라고 지정을 해 주시면 됩니다. 폰트 설정을 하셨을테니, 폰트 설정을 하는 설정 파일에 해 주시면 됩니다.

badung

방법에 대해서 조금 질문 드릴게요 사용배포판은 젠투이구요 hanterm-xf-2.0.5-173.tar.gz 를 풀었고 그 디렉토리에서 patch -p1 <han...patch 를 했습니다. 그리고 ./configure 후에 make를 했는데


badung hanterm-xf-2.0.5-173 # make
gcc -I. -I. -DHAVE_CONFIG_H -D_GNU_SOURCE -I./composer -D_DEBUG_root_ -DHANTERM_PKGNAME=\"hanterm-xf\" -DHANTERM_VERSION=\"2.0.5\" -DKEYBOARD_DIR=\"/usr/local/share/hangul_keyboard\" -g -O2 -c ./charproc.c
./charproc.c: In function `VTInitialize':
./charproc.c:4997: error: `C_UTF8' undeclared (first use in this function)
./charproc.c:4997: error: (Each undeclared identifier is reported only once
./charproc.c:4997: error: for each function it appears in.)
./charproc.c: In function `from_utf8':
./charproc.c:6926: warning: passing arg 2 of `iconv' from incompatible pointer type
./charproc.c: In function `to_utf8':
./charproc.c:6984: warning: passing arg 2 of `iconv' from incompatible pointer type


이렇게 나오네요. 방법이 틀린건가요? 아니면 더 첨부해야 할 파일이 있을까요?

김정균

한글 관련 옵션을 주셔야 합니다. 그러지 않으면 xterm 과 동일하게 됩니다. 대략적으로

--x-includes=/usr/X11R6/include \
--x-libraries=/usr/X11R6/lib --with-x \
--enable-doublechars --enable-i18n \
--with-libiconv --enable-freetype \
--disable-input-method --enable-wide-chars \
--enable-chat --enable-now-chat \
--enable-boxchar --enable-ansi-color \
--with-own-terminfo=/usr/share/terminfo

정도는 주셔야 할겁니다.

Posted
Filed under 주절주절
어영 부영 한 많았던 2005년이 지나갔습니다. 2005년 대미를 장식하려는 글을 쓰려고 했는데, 코딩 하다가 깜빡 12시를 넘기고 말았습니다. (이런날 코딩하는 놈이 정상이냣!!)

2005년..

월급 밀려서 생활비 못 가져다 줘서 구박 받았던 해..
대 주주 바뀌면서.. 기존 직원 다 나가야 했던 해.. (아.. 물론 남아 달라고 해도 남아서는 안되는 상황이었지만..
네오위즈로 이직해서 색다른 환경에 고전한.. 해..
System Engineering Team 을 몰락과, 팀원들의 퇴직으로 모든 일을 내가 독차지 해야 했던 암울한 시간.
KLDP 를 안녕을 바꾸었다가.. 안녕때문이라는 소리 듣지 않으려고 안보이는데서 닥질을 했던 해..

정말 쉽지 않은 한해 였던 것 같습니다. 계속될 2006년의 액운을 모두 소진한 것이기를 바랄 뿐 입니다.
2006/01/01 01:37 2006/01/01 01:37
coc

좀늦어지만.. 2006 새해 복많이받으세요~

channy

또 있잖아 Firefox, Thunderbird 한국어 버전 닭질 한 해.. ㅎㅎ

cjh

월급에 대해서는 저도 미안한 거 많지요 ^^
블로그가 있는지 저도 몰랐는데... 새해 복 많으시고 건강하시길 바랍니다.

유령

새해는 모든일 잘되시길 기원합니다.
그리고 안녕은 잘 쓰고 있습니다.

Posted
Filed under Tech/안녕리눅스
요즘 ssh dictionary attack 이 심합니다. (정확히 말하자면.. ssh brute force attack 이라고 하더군요 ^^) 일전에 제 blog 에서 geoip 를 이용해서 막는 방법을 소개를 했었습니다.

외국에서의 공격, 특히 중국에서의 공격을 막아서인지 현저하게 시도는 줄었지만.. 그래도 3일에 한번꼴로 국낸 IP (특히 대학이나 초등학교 서버에서..) 에서 5000번 이상의 scan 을 하고 지나가는 꼴을 보니 또 오기가 생기기 시작했습니다.

설마 막는 방법에 없겠느냐는 생각에 iptables 의 extension 을 탐색하던 중 ipt_recent extension 을 발견 했습니다. recent extension 은 iptables 의 기본 extension 이므로 따로 빌드할 필요도 없고, seconds 별 hitcount 를 계산할 수 있는 듯 합니다.

아래의 예제를 보죠. (oops.org 에 기본으로 적용한 rule 입니다.)

# ssh buste attack rule %-A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name SSHSCAN %-A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update \ --seconds 60 --hitcount 8 --rttl --name SSHSCAN -j LOG --log-prefix SSH_Scan: %-A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update \ --seconds 60 --hitcount 8 --rttl --name SSHSCAN -j DROP


1. 처음에 22 번으로 NEW state 의 session 을 SSHSCAN 이라는 이름으로 list 를 만듭니다.
2. 세션당 60 초 동안 7 번의 접속은 통과를 시키고 8번째 접속이 발생하면 60초 동안 이 세션에 대하여 block 합니다.
3. 그리고 SSH_Scan 이라는 prefix 로 logging 을 합니다.

문서들이 영어라서.. 결국에는 습관대로 대충 읽고 반영해서 보자는 식으로 하게 되어서 정확한 정보는 되지 않을 것 같습니다. 정확한 정보를 얻고 싶은 분들은.. 다음의 링크를 참조 하십시오.

http://snowman.net/projects/ipt_recent/
http://users-x.757.org/~joat/wiki/index.php/Slowing_down_SSH_brute_force_attacks
http://la-samhna.de/library/brutessh.html

전 영어가 딸려서 ^^; 정확한 설명을 알려 주시면 고맙겠습니다. (아 이 귀차니즘의 압박이여.. -_-;)

P.S
안녕 리눅스를 사용하시는 분들은 oops-firewall 을 5.0.0 으로 올리시고 위의 rule 을 user.conf 에 반영하시면 됩니다. 5.0.0 부터는 ALLOWALL 이 user pre command 보다 먼저 실행이 되기 때문에 ALLOWALL 에 등록된 site 는 최소한 이 rule 에 영향을 받지 않습니다.
2005/12/23 04:16 2005/12/23 04:16

요즘 ssh dictionary attack 이 심합니다. (정확히 말하자면.. ssh brute force attack 이라고 하더군요 ^^) 일전에 제 blog 에서 geoip 를 이용해서 막는 방법을 소개를 했었습니다. 외국에서의 공격, 특히 중국에서의 공격을 막아서인지 현저하게 시도는 줄었지만.. 그래도 3일에 한번꼴로 국낸 IP (특히 대학이나 초등학교 서버에서..) 에서 5000번 이상의 scan 을 하고 지나가는 꼴을 보니 또 오기가

sizone

포트를 바꾸세요 ㅡ_ㅡ;;;

김정균

사용하기가 불편하죠. 그리고 요즘 변형된 bot 들은 port scan 까지 하는 경우도 있습니다. :-)

suspec

잘 보았습니다. 출처 밝히고 퍼가도 되나요?

김정균

출처를 밝히시면 상관 없습니다.

ai

어떤 경우에는 이 정책을 적용한 상태로 3주 정도가 지나면 정상적인 동작을 하지 않는다는 보고가 있습니다.

http://lists.debian.org/debian-firewall/2006/03/msg00017.html

김정균

kernel 2.6 만 해당되네요. :-)

유령

좋은 팁 감사합니다

Posted
Filed under 주절주절
12월 19일 (월) 에 Neowiz Developer's Day 2005 라는 사내 행사를 가졌습니다. 전 목표 수행 때문에 가고 싶지는 않았는데, 강제 출석이라 어쩔수 없이 가고 말았습니다. (출석 부르지 않더군요 --;)

이쁜척..

전반 section 에서는 "우리 뭐 했다" 라는 자랑식이라서 솔직히 따분했습니다. 졸렸고.. 뭐 획기적인 것도 아니고.. 이건 생각했던 바가 아니다.. 라는 생각이 들더군요. 솔직히 좀 졸기도 하고 사진 찍고 놀고, 휴대폰 게임 하고..

같이 앉았던 하늘이는 다른 사람들 휴대폰을 강탈해서 Game 에 열중하고, 사진 찍을때만 "이쁜척" :-)

coffee break 를 지나고, 후반 section 에서야 드디어 기술적인 부분이 나오기 시작 했습니다. 대충 나왔던 부분이..

1. Neowiz Template system
2. I18N with Unicode
3. AJAX
4. etc.. (아 기억력의 한계.. T.T)

오.. 눈빛이 다르다!



역시 기술적인 부분이 나오니 듣는 것도 한결 편해지고, 눈빛도 초롱초롱 해 지더군요. 시간상의 한계로 그리 썩 좋은 결과를 얻지는 못한 것 같지만.. 그래도 나름대로 찾기 지겨워서 미뤄두고 있던 부분을 낼름 줏어먹은 듯한 기분이 들어 뭔가를 얻었다는 느낌은 들고 있습니다. '줄 때 먹어' 를 잊지 마세요 :-)
2005/12/22 17:22 2005/12/22 17:22
Posted
Filed under 주절주절
지금 회사 입사 하면서.. 어떡하든 IDC 가는 횟수를 최대한 줄이자가 목표였건만.. 12월 들어서 마구 IDC 를 방문 하고 있습니다. 그것도 한번 가면 6시간 이상을 계속 서있게 되는군요. --;

작업 중.. Notebook 은 T43

IDC 에 들어가 보신 분들이야 다들 아시겠지만.. 그 엄청난 소음에 작업 끝나고 나올때면 귀가 멍멍하고 계속 바람이 부는 소리가 귀에서 떠나지 않습니다.

12월만 들어서 벌서 6번을 들어갔고.. 아무래도 내일 또 들어가야 할 듯 싶네요. 어찌 이 바닥에서는 IDC 들어가지 않고 처리 가능한 방법이 없을까요 T.T

IDC 에 모니터링 팀도 상주해 있고.. 처리도 다 해 주건만.. 그래도 들어가야 한다는 일이 생긴다는 것은 아무래도 저주라고 밖에 생각이 들지 않네요.

정말 가기 싫다. --;
2005/12/15 20:02 2005/12/15 20:02
Posted
Filed under Tech/Mozilla


드디어 Firefox 1.5 가 12월 1일자로 출시가 되었습니다. (우리나라 시간으로는 12월 2일 이겠군요.) 지난 7월 부터 1.5 l10n 작업을 시작한지 어언 5개월 만에 드디어 결과물이 나왔습니다.

고생끝의 결과물이기에, 소식을 보자마자 설치를 해 봤는데, 영 찜찜한 구석이 남아 있습니다. 또한, 출시되지마자 수정본 언어팩도 나왔습니다. QA 때 지적을 해 주셨다면, 이런 반복적인 소모 작업은 필요 없을 수도 있을텐데 말이죠.

어쨌든.. 1.5 는 출시 되었고, 이제 2.0 작업전 충분한 휴식(?)기를 가져야 겠습니다.

MozParty 1.5 는 갈까 말까 고려중입니다. :-)
2005/12/02 01:42 2005/12/02 01:42