뭘 이런걸..

Posted
Filed under Tech/Tip & Trick
노트북도 하나 사고, 덩달아 Windows 7 Machine이 하나 생기게 되었습니다. OS를 64bit로 신청했는데 32bit로 온것 빼고는 그리 나쁘지 않더군요. 연말까지 휴가고 해서 회사 notebook을 과감히 Windows 7 64bit로 설치를 해 버렸습니다.

그런데 난리가 나 버렸군요.

제가 사용하는 환경은 Windows 기반에 cygwin + hanterm-xf 또는 portable ubuntu 환경을 사용합니다. 그런데 일단 Cygwin + hanterm-xf환경에서.. Windows 7에서 run.exe를 실행 할 때 cmd 창이 hidden 처리가 되어야 하는데, 되지를 않는 문제가 있더군요. 즉, hanterm 창 하나에 cmd 창이 하나씩 따라 열립니다. --; (엄격히 말하면 cmd 창이 열려서 hanterm-xf.exe를 실행하고 닫혀야 하는데 - 이게 run.exe가 하는 일이죠.) 그래서 이젠 오랫동안 사용한 cygwin + hanter-xf 환경은 버리고, portable ubuntu에 정착을 하자고 마음을 먹고 있었는데.. Windows 7 64bit 에서 colinux가 동작하지 않는다는 것을 까먹고 있었습니다. 그래서 어떡하든 cygwin을 해결해야 하는 상황이 되었습니다.

일단 cygwin homepage를 보니 cygwin 1.7 부터 Windows 7을 지원한다고 하고, 11월 말이나 12월 초에 릴리즈 할 거라고 적어 놓고선.. 왜 안하고 있지 하고 열심히 기다리고 있는데, 어제부로 cygwin 1.7이 릴리즈 되어 얼씨구나 하고 업데이트를 했지만 동일한 증상이 나타나더군요.

열심히 googling을 하다 보니.. 이미 메일링 리스트(http://www.cygwin.com/ml/cygwin-apps/2009-08/msg00018.html)에 이슈가 되어 있었으나, 개발자는 해당 패치를 거부한 모양 입니다. 혹시나 싶어서 이 패치를 적용해 보니.. ㅎㅎ 잘 되더군요.

혹시 비슷한 문제를 겪으시는 분들을 위해서.. 포스팅 합니다. 해당 패치가 된 run package는 ftp://mirror.oops.org/pub/Cygwin/pcakages/run/ 에서 받으실 수 있습니다. (웹 브라우저로 접근이 잘 안될 겁니다. ftp client를 이용하세요.) Windows 7 이 아닌 경우에는 받으실 필요 없습니다.

받으신 후에

shell> tar xvfpj run-1.1.12-11.tar.bz2 -C /


명령으로 설치가 가능 합니다. (한마디로 덮어 씌우는 거죠 ^^)
2009/12/24 03:01 2009/12/24 03:01
Posted
Filed under Tech/Tip & Trick
저번달에 비해 KRNIC (정확하게는 kisa.or.kr 이죠) data를 가져오려다 보니, access 제한을 걸어 놓았더군요. 처음 접속했을 때 특정 쿠키가 없으면 쿠키를 set하고 reload 하도록 되어 있는데, 문제는 이걸 javascript 로 처리해 놓았다는 것 입니다. 즉 java script를 지원하지 않는 w3m, wget, links, lynx 같은 브라우저들은 접근 조차 할 수 없다는 얘기이죠.

libkrisp가 KRNIC data를 이용해서 parsing 하는 것이라서 script 화를 해 놓았는데, 이 스크립트가 작동하지 않아서 보니.. 이런 변경 사항이 있었습니다. 그래서.. 뚫을 수 있는 스크립트를 다시 만들어 보았습니다.

Class KRNIC_data { static public $useragent = 'Mozilla/4.0 ' . '(compatible; MSIE 6.0; Windows NT 5.1; ' . '.NET CLR 1.1.4322; .NET CLR 2.0.50727)'; function get ($url) { if ( false === ($cookie = self::getCookie ($url)) ) return false; if ( false === ($data = self::getPage ($url, $cookie)) ) return false; return $data; } function getPage ($url, $cookie = '') { $c = curl_init ($url); curl_setopt ($c, CURLOPT_URL, $url); curl_setopt ($c, CURLOPT_TIMEOUT, 60); curl_setopt ($c, CURLOPT_NOPROGRESS, 1); curl_setopt ($c, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($c, CURLOPT_USERAGENT, self::$useragent); $src = array ('!http[s]?://!', '!/.*!'); $dst = array ('', ''); $host = preg_replace ($src, $dst, $url); $header[] = 'Host: ' . $host; #$header[] = 'Excpet:'; curl_setopt ($c, CURLOPT_HEADER, 0); curl_setopt ($c, CURLOPT_NOBODY, 0); curl_setopt ($c, CURLOPT_HTTPHEADER, $header); curl_setopt ($c, CURL_FAILONERROR, 1); curl_setopt ($c, CURLOPT_SSL_VERIFYPEER, false); if ( $cookie ) curl_setopt ($c, CURLOPT_COOKIE, $cookie); $data = curl_exec($c); if ( empty ($data) ) { error_log ('Error: ' . curl_error ($c), 0); return false; } curl_close ($c); return $data; } function getCookie ($url) { $data = self::getPage ($url); preg_match ('/(_accessKey2=[^\']+)\'/', $data, $m); if ( ! trim ($m[1]) ) { error_log ('Error: Can\'t get krnic cookies => ' . $m[1], 0); return false; } return $m[1]; } } $site = 'https://ip.kisa.or.kr/ip_cate_stat/stat_05_04_toexcel.act'; echo KRNIC_data::get ($site); exit (0);


이 스크립트를 작동 하시기 위해서는 curl extension 이 필요 합니다.
2009/12/04 18:52 2009/12/04 18:52
이혜원

안녕하세요. 저도 비슷한 문제에 봉착해서 어떻게 해결하셨는지 조언 듣고 싶어서 연락드립니다.

서버 최초 접속 시
<html><script lang=javascript>
document.cookie = '_accessKey2=4K0vhJlSdVkvJXFyslMRDa8MH1-L9cIG'
window.location.reload();
</script></html>
코드로 리로드 시키는데, 문제는 OCX단에서 보내는 요청도 이 코드가 응답으로 와서 문제입니다.

해당 웹서버를 우리가 관리하는게 아닌터라 어떤 단(?)에서 어떤 녀석(?)이 위 코드를 뿌려주는건지 알 수 있을까요?

김정균

처리는 간단합니다. 해당 코드가 쿠키를 구어서 보내라는 의미이기 때문에 쿠키 데이터를 넣어서 query를 다시 보낸 것 입니다. :-)

위 코드는 해당 웹서버가 보내주는 것일 겁니다..

김정균

ㅎㅎ 쓸데 없는 행동을 한 것을 안 것인지, 이번달에 보니 풀어 버렸네요. :-)

redjade

오오오오 +_+

Posted
Filed under Tech/Tip & Trick
CVS 에서 주석에 "$Id: $" 와 같이 기록을 해 놓으면, commiter, revision, date 등의 정보가 자동으로 입력이 됩니다. 그래서 현재 내가 checkout 해 놓은 파일의 revision이 어떻게 되는지, 누가 commit 을 했는지 등의 정보를 알 수가 있는데 SVN에서는 어떻게 하는지 궁금했었는데, googling 을 하니 금방 나오는 군요.

home directory 의 ~/.subversion/config 파일에서 다음의 설정을 추가해 줍니다.

[miscellany]
enable-auto-props = yes

[auto-props]
*.java = svn:keywords=Author Date Id Revision;svn:eol-style=native


키워드의 리스트는 다음과 같습니다.


Author, Date, Header, Id, Log, Locker, Name, RCSFile, Revision, Source, State


이 설정을 마치면, commit 을 할 때 id tag 가 자동으로 갱신이 됩니다. 이미 repository에 추가 되어 있는 파일들의 tag 내용을 갱신 시키려면 다음과 같이 하시면 됩니다.

shell> svn up
shell> svn propset svn:keywords "Author Date Id Rev" file_name
shell> svn commit -m "Adding Id and Rev property to all files"


출처: http://ajmoore.blogspot.com/2007/12/enabling-cvs-id-tag-for-svn.html
2009/06/04 18:00 2009/06/04 18:00
Posted
Filed under Tech/Tip & Trick
PXE 시스템을 운영할 때 DHCP 의 Mac Address binding 은 매우 중요합니다. 특히 설치 자동화를 위해서는 Mac Aaddress 와 IP address 를 매치해 놓는 것이 중요한데, 이 경우 등록되지 않는 Mac Address 를 거부해야 할 일들이 가끔 존재합니다.

ISC 의 Dhcpd 의 경우에는 이를 기본으로 지원을 하는데, MS 의 Dhcpd 는 이를 지원하지를 않습니다. 우리 회사에서 ISC Dhcpd 와 MS Dhcpd 가 동시에 운영을 하고 있어서 항상 PXE 설치시에는 MS Dhcpd 를 내리고 설치하는 불편함이 있었는데, MS 의 DHCP Team Blog 에서 Mac Address 기반 filtering dll 을 비 공식적으로 제공하고 있습니다.

현재는, mackere2 라는 thrid party dll 을 이용하고 있었는데, 이걸 한번 이용해 봐야 겠군요.

DHCP Team Blog:
http://blogs.technet.com/teamdhcp/archive/2007/10/03/dhcp-server-callout-dll-for-mac-address-based-filtering.aspx
설치 파일 및 문서:
http://blogs.technet.com/teamdhcp/attachment/2098336.ashx
2008/01/09 19:12 2008/01/09 19:12
Posted
Filed under Tech/Tip & Trick
Mindterm 에 대해서 아시는 분들도 꽤 있을 거라 생각됩니다. google 검색에서 검색을 해 봐도 한글 문서가 꽤 나오니까요. 대부분의 문서가 2.1에 대한 것이기는 하지만요.

저도 mindterm을 요긴하게 사용하곤 합니다. Mindterm 을 유용하게 사용할 수 있는 방법으로 다음의 경우가 있습니다.

1. PC 에 ssh client 가 설치되어 있지 않고, 새로 설치할 수 없는 경우나 귀찮을 경우 2. X11 forwarding 을 사용해야 하는데, 내가 사용하는 ssh client 가 X11 forwarding 을 지원하지 않을 경우 3. SSH Tunnel 을 사용하고 싶을 경우


보통은 1번의 이유로 많이 사용을 하게 될텐데.. 기존의 2.1 환경에서는 한글이 제대로 지원이 되지 않던 문제가 있습니다. 일단 출력은 되는데, 겹쳐서 출력되는 문제나, 한글 입력이 되지 않는 문제가 있었습니다. 그래서 아주 비상 사항이 아니면 사용을 하지 않았는데, 올해 초 3.1.2가 나와서 테스트를 해 보려고 하다가 까먹고 지금에야 와서 만지게 되었는데, 한글 입출력이 아주 훌륭하게 되더군요. 이젠 client 로 사용을 해도 무방할 정도로 Xterm mode 와 Ansi mode 를 잘 지원을 합니다.

다음은 Mindterm 3.1.2 를 설치해서 사용하는 방법을 기술합니다.

1. 라이센스 Mindterm 의 라이센스는 개인 사용자에 한하여 무료입니다. 이 무료 버전은 설치된 서버로만 SSH 연결을 할 수 있습니다. 유료 버전은 아마도 다른 서버로 직접 연결이 가능한 것으로 기억이 납니다. 2. 다운로드 http://www.appgate.com/products/80_MindTerm/110_MindTerm_Download/index.php 위 URL 에서 binary 와 source code, 문서를 다운로드 받을 수 있습니다. 빌드할 일은 없으니 바이너리 버전을 다운로드 받습니다. Mindterm 은 Java Applet 으로 작동하기 때문에 Client 에 설치하는 것이 아니기 때문에 웹서비스를 할 수 있는 곳에서 받도록 합니다. 3. 압축을 해제하도록 합니다. Linux 에서는 unzip 명령을 이용하면 됩니다. shell> unzip mindterm_3.1.2-bin.zip inflating: mindterm-3.1.2/LICENSE.txt inflating: mindterm-3.1.2/README.txt inflating: mindterm-3.1.2/THIRD_PARTY_SW.txt inflating: mindterm-3.1.2/Applet.txt inflating: mindterm-3.1.2/Settings.txt inflating: mindterm-3.1.2/RELEASE_NOTES.txt inflating: mindterm-3.1.2/mindterm.jar 4. 압축을 푼 후에 필요한 파일은 mindterm.jar 1개만 있으면 됩니다. 이 파일을 웹상의 경로에 잘 위치 시킨 후에, applet 을 호출할 수 있는 웹 문서를 다음과 같이 생성해 주도록 합니다. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"> <head> <title>Mindterm WEB SSH Gate</title> <style type="text/css"> h1 { font-size: 25px; font-family: tahoma, sans-serif; font-weight: bold; text-align: center; margin-top: 50px; } </style> </head> <body> <h1>Mindterm WEB SSH Gate</h1> <applet archive="mindterm312.jar" code="com.mindbright.application.MindTerm.class" width="0" height="0"> <param name="cabinets" value="mindterm312.cab" /> <param name="protocol" value="ssh2" /> <param name="sepframe" value="true" /> <param name="debug" value="true" /> <param name="bg-color" value="black" /> <param name="fg-color" value="white" /> <param name="cursor-color" value="yellow" /> <param name="encoding" value="euc-kr" / > <param name="font-name" value="Monospaced" / > <param name="exit-on-logout" value="true" / > </applet> </body> </html> 5. 브라우저로 방금 생성한 웹문서로 접근을 해 봅니다. 주의할 것은 웹브라우징을 하는 PC 에 Java JRE 나 JVM 이 설치가 되어 있어야 합니다. JRE 6 에서는 잘 작동하는 것을 확인했습니다.

2007/12/13 18:28 2007/12/13 18:28
Posted
Filed under Tech/Tip & Trick
GeoIP 를 커널에서 사용하기 위하여 커널을 다시 빌드하는 경우가 많은 듯 싶어, 기존의 커널에 geoip module 만 빌드하는 스크립트를 공개합니다. 모듈만 빌드하는 방법에 대해서는

BuildingKernelModules

의 문서를 참고하면 됩니다. 굳이 커널을 모두 빌드할 필요는 없지요. 이 과정도 귀찮거나.. 또는 영어가 어려우신 분들은 첨부된 파일을 받아서 다음의 과정을 거치면 간단하게 해결이 될 수 있을 겁니다.

1. build script download RHEL/CentOS 4/5 용이 구분이 되어 있으니 구분하여 받으시기 바랍니다. 2. 압축 해제 임의의 디렉토리에서 압축을 해제합니다. 압축을 해제하면 geoip 라는 디렉토리가 생성됩니다. shell> tar xvfpz geoip-patch-o-matic-cent5.tar.gz 3. 커널 빌드 shell> cd geoip shell> ./geoip-check


와 같이 하면 빌드가 되고 등록까지 됩니다. 커널 업데이트에 대비하여 geoip-check 를 다음과 같이 이용할 수도 있습니다. rc.local 에 다음과 같이 등록을 해 놓으면 커널이 변경이 되어 geoip 모듈이 없을 경우 빌드를 하고 올리도록 할 수 있습니다.

/YOUR_PATH/geoip-check >& /dev/null [ $? -eq 0 ] && iptables -A INPUT -m geoip --src-cc CN -j REJECT


파일 받기



RHEL 6 또는 CentOS 6의 경우에는 RPM으로 아예 묶어 놓았으니 이를 이용하시면 되겠습니다.

1. http://mirror.oops.org/pub/AnNyung/2/AnNyung.repo 를 /etc/yum.repos.d 에 다운로드
2. yum clean all
3. yum install kmod-geoip
4. yum update iptables
5. yum install GeoIP
6. geoip-csv2bin

이렇게까지 하시면 사용을 하실 수 있습니다. 6번의 경우 매달 한번씩 실행해 주시면 geoip data가 갱신이 됩니다.
2007/11/22 15:56 2007/11/22 15:56

작성자: 주인장 디지문(http://www.digimoon.net/) 일전에 커널과 iptables 소스를 새로 받아다가 완전히 새로 컴파일하여 geoip 모듈을 탑재하는 걸 포스팅한 적이 있는데 이번엔 기존 커널 & iptables rpm 패키지를 그대로 유지한 채 geoip 모듈만 리빌드하는 방법을 포스팅합니다. rpm으로 기본 탑재된 커널도 충분히 재구실을 하는지라... 사실 커널 소스를 받아 컴파일해서 설치하는 건 요즘 들어선 불필요...

김정균

안녕 리눅스 2에서는 kmod-geoip 로 커널 모듈을 지원합니다. yum install kmod-geoip 하시면 되겠습니다.

움트트움트

저도 so파일이 안생기네요...흠...
CentOS 4, CentOS 5 둘다 테스트 해보는데
똑같은 증상입니다.
왜그런걸까요...?
iptables v1.3.5: Couldn't load match `geoip':/lib/iptables/libipt_geoip.so: cannot open shared object file: No such file or directory

김정균

이 에러는 iptables의 geoip extension이 없어서 발생하는 문제 입니다. 이 글을 iptables의 geoip extension을 알아서 준비하셨거나 하실 거라고 가정을 하고, geoip kernel netfilter module을 빌드하기 위한 방법을 적은 것입니다.

즉, iptables 를 geoip extension을 넣어서 새로 빌드 하셔야 한다는 얘기 입니다. geoip extension은 patch-o-matics 에서 찾으실 수 있는데, 요즘 geoip extension이 있는 사이트가 죽은 모양인지 연결이 안되서, 인터넷을 뒤져야 할 수도 있을 것 같습니다. ^^;

즉, iptables에서 geoip를 사용하기 위해서는 ipbltales geoip extension과 kernel netfilter iptables module 이 필요하고, 이 글은 후자(kernel module)을 빌드하기 위한 글 입니다. (즉, iptblaes에서 geoip를 사용하기 위한 전반적인 내용을 담고 있는 것이 아닙니다.)

http://zosel.idtail.com/

안녕하세요. 오랫만에 찾아 뵙습니다. ^^;;
그동안 잘 지내셨죠.
예전에 얼핏 말씀드린 VPN 서비스는 잘 런칭이 되었습니다.
qos부분 역시 브릿지 방식의 cbq로 약간의 python과 radius server db 연동으로
잘 해결 되었어요. ^^ (oops님의 글이 많은 도움이 되었습니다. [_ _] )


오늘은 최근에 또다른 이슈가 생겨서 방문하게 되었습니다.
DDOS 존을 구축하는 임무를 수행하고 있는데요.
syn_proxy서버 구축 + iptables connlimit를 이용한 세션 제어까지는 마무리 하였습니다.(모두 브리지방식 입니다. ^^)

추가로 해외망 차단 부분을 목적지 아이피 별로 제어를 하고 싶은데요.
바로 적용 되지는 않는듯합니다.
일단 램이 사양이 높아 PAE로 DKMS방식으로 yum 업그레이드 한 상태입니다.
이상태에서 스크립트 내용을 분석해서 필요한 부분만 적용을 해도 .so 파일이 생성되지 않습니다.;;

어떤 부분이 문제가 될까요?

drawhan

iptables -L로 리스트를 확인해봐도 안나오던데.... 어떻게 확인해봐야 할까요?

김정균

GeoIP CentOS 5 용을 업데이트 했습니다. CentOS 5.2 에서 모듈 체크 제대로 못하는 문제와 GeoIP kernel module 의 버그를 fix해서 다시 올립니다.

단풍

geoip 제대로 동작을 하나요?

저 같은 경우는 geoip 데이터베이스에 해당 ip 가 있음에도 불구하고
제대로 동작 하지 않더군요.

예를 들어서 중국 IP 대역을 차단 했는데 국내 몇 IP 도 차단되어서
이 기능을 꺼 놓고 사용 하는대요
(geoip 데이터베이스는 업데이트 해줬습니다.)

김정균

GeoIP Lite 의 경우 국가 database 의 정확성은 90% 라고 나옵니다. 실제 상용을 사용해 본적이 없어서 근거는 없고요 ^^;

그래서 저는 libkrisp 를 만들어서 국내 IP는 이걸 이용하고, libkrisp 가 GeoIP 연동을 하도록 하여, 국외의 IP는 GeoIP database를 사용하도록 해서 사용합니다.

GeoIP 의 정확성에 대해서는 저도 장담을 할 수는 없지요. 국내 IP가 geoiplookup 에서 중국 IP로 나온다면.. GeoIP의 문제가 아니라 GeoIP database 의 문제인 것이겠죠. ^^;

Posted
Filed under Tech/Tip & Trick
요 몇년간, 웹 표준이라는 단어에 대하여 관심이 높아지고 있습니다. 저 역시 2년전 부타 웹 표준에 관심을 가지기 시작했고, 새로 제작하는 페이지들은 꼭 validator 를 통과 시키고 있기는 합니다만.. 아무래도 브라우저별 또는 OS마다 렌더링의 차이에 의한 부분에 대하여서는 어떻게 할 방법이 없었죠. 모든 OS 와 모든 브라우저를 모두 확인하지 않는 한은 말이죠.

그러다 보니, 제가 사용하는 OS와 브라우저만을 고려를 하게 되다보니, Any Browser 를 지향하면서도 제한된 Any Browser 이기가 일수였습니다.

이런 현실 속에서 서핑 중에 Screen Shot 이라는 일본의 OS/브라우저별 출력 이미지를 보여주는 사이트를 발견하게 되었습니다. 유료 회원을 위한 제약이 있기는 하지만, 대략적으로 확인을 하는데는 크게 지장이 없군요.

모르시는 분들은 애용해 보시기 바랍니다.
2007/11/19 04:22 2007/11/19 04:22
Posted
Filed under Tech/Tip & Trick
Redhat 8 이후부터 route 명령을 실행해 보면 다음과 같이 이상한 routing path 를 발견할 수 있습니다.

[root@db ~]# route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 211.115.85.0 * 255.255.255.224 U 0 0 0 eth0 172.16.0.0 * 255.255.0.0 U 0 0 0 eth1 169.254.0.0 * 255.255.0.0 U 0 0 0 eth1 default gw.kldp.org 0.0.0.0 UG 0 0 0 eth0


"어라.. 169.254.0.0는 내가 설정한 적이 없는데 어디서 튀어 나온거야?" 와 같은 의문을 가진 적이 없으신지요?

169.254.0.0/16은 Zero Configuration Networking 을 위하여 예약된 subnet 입니다. Zero Configuration Networking 이라는 것은.. DHCP 환경이 없는 네트워크에서 Peer to Peer 연결이나 Wireless 환경에서 관리자의 수동적인 설정이 없이 네트워킹을 할 수 있는 환경을 만들기 위한 규약입니다. (영어로 되어 있어서 대충 봐서 정확하지는 않습니다. 궁금하신 분들은 http://www.zeroconf.org/ 를 참고 하시기 바랍니다. 영어입니다!)

일반적인 IDC 환경에서는 별 의미가 없을 수 있지요. 그렇다면 이런글을 적는 이유는 무엇일까요? 바로 이 설정이 필요도 없고 보기도 싫으신 분들이 있을 것입니다. 부팅시나 네트워킹을 재시작 하여 이 정보가 올라오지 않게 하려면 /etc/sysconfig/network에 다음의 라인을 넣어주면 네트워킹이 재시작 된 이후부터는 나오지 않게 됩니다.

[root@db ~]# cat /etc/sysconfig/network NETWORKING=YES HOSTNAME=db.kldp.org NOZEROCONF=yes
2007/10/22 23:47 2007/10/22 23:47