Skip to content. Skip to navigation

mix1009.net

Sections
Personal tools
You are here: Home 블로그
Document Actions

lighttpd 1.4.12 bug

by mix1009 posted at 2006-10-08 19:25 last modified 2007-05-03 21:39

1.4.12로 업그레이드한 후 서버가 가끔씩 죽었었는데 버그 찾아보니 해결되었다. 1.4.11로 다운그레이드했었는데 소스 패치해서 다시 올려야겠다. 1.4.11은 POST할때 가끔 먹통되는 버그가 있었는데...

http://trac.lighttpd.net/trac/changeset/1352

FreeBSD 4.10에서 컴파일 안되는 버그도 있는데, 아래 URL을 참조:

http://trac.lighttpd.net/trac/ticket/875

Category(s)

Ubuntu Linux & Mark Shuttleworth

by mix1009 posted at 2006-10-08 19:25 last modified 2007-05-03 20:20


얼마전에 Ubuntu Linux를 호기심에 깔아봤다. 서버는 대부분 FreeBSD로 쓰고, 데스크톱은 Win32 프로그래밍을 해야하기 때문에 리눅스를 쓴지 꽤 오래됐다. 전에 다니던 회사(5년이 지났네..)에서 FreeBSD용 방화벽을 개발했었는데, 그때 데스크톱을 Mandrake 썼었고, 그 위에서 vmware에서 개발했었다. 하여튼 간만에 깔아보니 많이 좋아지긴 했다.

얼마전에 구글 비디오를 통해서 Mark Shuttleworth의 발표를 봤는데 참 멋진 사람인거 같다. 남아프리카 출신으로 Thawte라는 인증서 발급 회사를 VeriSign에 $575,000,000 (대충 6000억원)에 팔았다. ㅎㅎ. 러시아로 가서 1년여간 우주비행 훈련을 받고 세계 두번째 민간인 우주인이 되어 몇일간 우주여행을 했고, Ubuntu 재단을 세우고 100억을 기부했으며, Canonical Ltd.를 세우고 우분투 리눅스 개발에 투자하고 있다.

난.. 돈을 많이 벌면 무엇을 할까? 무엇을 할수 있을까? 잠깐 고민해본다.

Category(s)
기타

XP에서 (좀더) 안전하게 인터넷 서핑하기

by mix1009 posted at 2006-10-08 10:30 last modified 2007-05-03 21:37


얼마전 발생한 VGXvgx.dll exploitXSS 데모를 보면 인터넷 서핑하기 무서워진다. IE도 문제지만 FireFox도 보안버그가 많이 발견되고 있다. FireFox가 안전하다고 하고, 여러가지 추가 기능들을 모듈(addon)을 통하여 설치할수 있지만... 아직 한국 사이트에서는 제약이 많다. IE 외의 브라우저에서는 정상적으로 보이지 않는 사이트들이 아직 많다. FireFox에 IE Tab을 설치하여 정상적으로 보이지 않는 페이지를 볼수는 있지만, IE로 볼때 마우스 제스처등이 안되는등 불편한 점이 많다. 또한 발표되는 FireFox 버그들을 보면 소스가 공개되서 그런건지 모르지만, 보안 버그들이 자주 발견된다.

buffer overflow에 대한 해결책으로 최근 나오는 프로세서들에서 지원하는 데이타 실행 방지(Data Execution Prevention) 기능을 사용하는 방법이 있다. 자세한 것은 모르겠지만, 스택 영역을 실행하려고 할때 CPU에서 이에 대한 예외(exception)을 발생시켜주는 것이다. 많은 버퍼 오버플로우 공격이 이 기능을 통해서 막아지며 이번 dll 공격도 이 기능을 활성화 되어 있다면 영향을 받지 않았다고 한다. DEP 기능은 XP SP2와 최신 CPU에서만 동작하며, 디폴트는 시스템과 서비스 내에서만 활성화 되어 있다. 모든 프로그램에서 실행되도록 변경하기 위해서는 "시스템 등록 정보-고급 탭-성능 설정-데이타 실행 방지(DEP) 탭" 에서 "데이타 실행 방지(DEP)를 .... 모든 프로그램 및 서비스에서 사용"을 선택하면된다. 프로그램에 따라서 예외를 등록할수 있다.

VMware, Parallels, Virtual PC등의 Virtualization 기술을 이용하여, Sandbox 안에서 좀더 안전하게 서핑할수 있는 방법도 있지만, 세팅하기도 힘들고 무겁다. 비록 쉐어웨어지만 Sandboxie라는 프로그램을 통하여 IE나 필요한 임의의 프로그램을 Sandbox 내에서 실행할수 있다. 라이센스는 30일간 사용 가능하며 등록비도 그리 비싸지는 않다. Sandbox에서 실행될때는 원래 하드디스크에 쓸수 없기때문에, 악의적인 코드가 실행되더라도 Sandbox 내의 드라이브만 영향을 줄수있다.

위에 설명한 방법으로 어느정도 공격은 막을수 있다. "IE 대신 XX 브라우저를 쓰면 안전하다"라는건 그냥 선전일 뿐이고, 실질적으로 안전한 서핑을 하기 위해서는 좀더 근본적인 접근 방법이 필요할것 같다. 위에서 언급한 XSS 공격 데모는 정말 충격적이었다. 데모에서 보여진 공격들은 위에서 얘기한 공격방지 방법으로는 모두 해결되지 않는다.

웹 클라이언트쪽의 보안 분야가 현재까지보다 앞으로 훨씬 더 많은 이슈가 발생할 것이고, 많은 공격이 시도될것이라 생각한다. 앞으로 어떤 해결책이 나올지 지켜봐야겠다. 지금으로서는 보안 전문가들 보다 크래커들이 한발 앞서있는 느낌이다.

Category(s)
보안

Varnish HTTP Cache Project & 웹서버 최적화

by mix1009 posted at 2006-10-02 21:55 last modified 2007-05-03 21:25


웹 프로그래밍을 전문적으로 하고 있지는 않으나, 서비스에 사용자가 많이 늘면서 여러가지 기술들을 찾고 있는데, 아직 본격적으로 적용은 못했으나 관심을 갖아볼 만한 프로젝트다. Varnish는 웹캐시로 웹속도를 줄이기위한 방법중 하나로 Reverse Proxy 역할을 위주로 설계됐다. 많이 쓰이는 Squid라는 프록시는 클라이언트 단에서 서버에서 오는 정보를 캐싱하여 클라이언트단에서의 접속 속도를 향상시키는 역할이 주인 (Forward) Proxy로 주로 쓰인다. 반면 Reverse Proxy는 서버단에 가까운곳에 위치하여 서버에서 나오는 데이타를 캐싱하여 서버의 부하를 줄이는 역할을 하며, 주로 동적으로 생성되는 페이지가 많을 경우 효과를 볼수 있다.

Varnish는 효율성을 위해서 C로 짜여져 있으며, VCL이라는 언어로 설정이 가능하다. VCL은 간단한 언어로 오브젝트 파일로 컴파일되어 데몬에서 호출되는 등 빠르게 동작할수 있도록 최적화에 신경을 많이 썼다. 주 개발자는 FreeBSD 커널 여러부분에서 작업해서 OS에 대한 이해도가 높고, 기존에 있던 캐싱 시스템들이 옛날 하드웨어 맞게 최적화되어 개발되어 있기 때문에 오히려 요즘 처럼 여러단계로 메모리가 캐싱되는 하드웨어 상황에서는 적합하지 않다고 얘기한다.

홈페이지는 http://varnish-cache.org/ 이며, FreeBSD에서는 /usr/ports/www/varnish 에서 설치할수 있다.

회사 서비스 중 웹서버에 많은 부하가 집중되어 있었는데 많은 부분 해결이 되었다. 해결을 위해 동원된 방법은...

  • SQL 쿼리 최적화
  • PHP에서 필요한 부분만 include (main include 파일이 커져서)
  • 랜더링 오래 걸리는 페이지 memcache에 캐싱
  • 잘 변하지 않는 페이지 html로 저장
  • 웹서버 Apache에서 lighttpd로 변경
  • xcache 적용 (코드 캐시만 사용)

동시 연결된 클라이언트가 급속히 늘다보니 아파치 1.3에서는 mod_php는 메모리가 너무 많이 차지하여 한계가 생겼었다. 당시 php 처리도 느렸었지만, lighttpd에 fastcgi로 바꾸고 나서는 메모리 사용량이 현저히 줄었다. xcache는 php 컴파일된 코드를 메모리에 캐싱하는 모듈로 적용후 php의 부하를 많이 줄일수 있었다. xcache에서 memcache와 동일한 기능도 제공한다. 그외에 pen이나 plb등의 S/W load balancer 도입도 생각하고 있으며, lighttpd의 fastcgi load balancing도 고려하고 있다.

Category(s)

CoreBlog에서 달력 한글 문제 해결~

by mix1009 posted at 2006-10-02 21:55 last modified 2007-05-03 21:03

블로그 달력에서 달이 영어로 나오고, 요일도 영어로 나와서 이유를 파악해서 고쳤습니다. Plone하고 CoreBlog 모두 처음이라 익숙해지는데 시간이 좀 걸렸네요. Plone에 포함된 portlet_calendar는 한글로 잘 나오기 때문에 이 소스를 보고, portlet_coreblogcalndar를 고쳤습니다.

/portal_skins/plone_portlets에 보면 portlet_calendar 소스를 볼수 있고,

/portal_skins/CoreBlog2에 보면 portet_coreblogcalendar 소스가 있습니다. 소스를 고치기 위해서는 먼저 커스터마이즈 버튼을 누르고, custom(또는 지정한 폴더)로 이동하여 편집하면 됩니다.

변경된 소스는 아래와 같습니다:

<html xmlns:tal="http://xml.zope.org/namespaces/tal"
xmlns:metal="http://xml.zope.org/namespaces/metal"
i18n:domain="plone">

<body>

<div metal:define-macro="portlet"
tal:omit-tag=""
tal:define="DateTime python:modules['DateTime'].DateTime;
current python:DateTime();
yearmonth here/getYearAndMonthToDisplay;
year options/year | python:yearmonth[0];
month options/month | python:yearmonth[1];
prevMonthTime python:here.getPreviousMonth(month, year);
nextMonthTime python:here.getNextMonth(month, year);
translation_service nocall:here/translation_service;
utranslate nocall:here/utranslate;
weekday_english nocall:translation_service/weekday_english;
day_msgid nocall:translation_service/day_msgid;
weeks python:here.portal_calendar.getEntryForCalendar(month=month, year=year);">
<!-- The calendar, rendered as a table -->

<table cellspacing="0" class="ploneCalendar" id="portlet-coreblog2calendar" summary="Calendar" i18n:attributes="summary">
<thead>
<tr>
<th id="calendar-previous">
<a href="#" tal:attributes="href python:'%s/archives/%d/%d' % (here.blog_url(),prevMonthTime.year(),prevMonthTime.month())">&laquo;</a>
</th>
<th colspan="5"
tal:define="date python:DateTime(year, month, 1);">
<a href="#"
tal:attributes="href python:'%s/archives/%d/%d' % (here.blog_url(),year,month)">
<span i18n:translate="" tal:omit-tag="">

<span i18n:name="monthname"
tal:define="month_english python:translation_service.month_english(month);"
tal:attributes="id string:calendar-month-$month_english"
tal:content="python: utranslate(translation_service.month_msgid(month), default=month_english)"
tal:omit-tag=""
id="calendar-month-month">monthname</span>

<span i18n:name="year"
tal:define="year python:date.year()"
tal:content="string:$year"
tal:attributes="id string:calendar-year-$year;"
id="calendar-year">&nbsp;</span>
</span>
</a>
</th>
<th id="calendar-next">
<a href="#" tal:attributes="href python:'%s/archives/%d/%d' % (here.blog_url(),nextMonthTime.year(), nextMonthTime.month())">&raquo;</a>
</th>
</tr>
<tr tal:define="weekdaynumbers here/portal_calendar/getDayNumbers" class="weekdays">
<tal:data tal:repeat="daynumber weekdaynumbers">
<td tal:define="weekday_english python:weekday_english(daynumber,format='a');"
tal:content="python: utranslate(day_msgid(daynumber, format='s'), default=weekday_english)">Su</td>
</tal:data>
</tr>

</thead>
<tbody>
<tr tal:repeat="week weeks">
<tal:block repeat="day week">
<tal:block define="daynumber day/day;
datestring python: '%d%0.2d%0.2d' % (year, month, daynumber);
javascriptstring string:javascript:%sDay('%s');">
<td class="event" tal:condition="day/entry"
tal:attributes="class python:test(current.year()==year and current.month()==month and current.day()==int(daynumber), 'todayevent', 'event')">
<a href="" tal:attributes="href python:'%s/archives/%d/%d/%d' % (here.blog_url(),year,month,daynumber)">
<span tal:replace="python: daynumber or default">&nbsp;</span>
</a>
</td>
<tal:notdayevent tal:condition="not:day/entry">
<td tal:condition="python: current.year()==year and current.month()==month and current.day()==int(daynumber)"
tal:content="python: daynumber or default" class="todaynoevent">
&nbsp;
</td>
<td tal:condition="not: python: current.year()==year and current.month()==month and current.day()==int(daynumber)"
tal:content="python: daynumber or default">
&nbsp;
</td>
</tal:notdayevent>
</tal:block>
</tal:block>
</tr>
</tbody>
</table>


</div>

</body>

</html>


FreeMind라는 오픈소스 Mind Mapping 프로그램

by mix1009 posted at 2006-10-02 01:45 last modified 2007-05-03 20:57


Mind Mapping이라는 종류의 프로그램에 항상 관심을 가져왔었는데... 얼마전부터 FreeMind라는 오픈소스 프로그램을 활용하기 시작했다.

해야할일은 많아지고 기억력은 안좋아져서, 관리가 안되서 원래는 바탕화면에 TODO.txt 파일을 하나 만들고 관리를 했었는데, 텍스트 문서의 특성상 뭔가 좀 정리가 안된 느낌이었다. 마인드매핑 프로그램을 처음에는 어렵게 생각하고, 어떻게 활용해야하나? 뭐라도 배워야 사용할수 있을거라 느꼈었는데 막상 사용을 시작하니 몇가지 단축키 정도만 익히고 나니 너무 빨리 익숙해졌다.

그냥 생각나는걸 연습장에 끄적인다고 생각하고, 생각나는데로 할일이나 어떤 주제에 대해 적기만 하면된다. 좀 정리가 안되면 트리구조를 좀 변경해서 정리하고, 참조하는 부분이 있으면 화살표를 만들어주고... 그리고 좀 주의할것들은 잘보이게 앞에 아이콘도 붙이고...

FreeMind라는 프로그램이 자바로 짜여져있어서 여러 OS에 잘 돌아가고, 생각보다 그렇게 느리지도 않다.

현재 내가 그냥 생각나는 걸 적는 파일 하나, 회사의 내 스케줄 관리, 프로젝트 관리등 몇개 파일을 CVS에 등록하여 관리하고 있다. 저장을 XML로 하기 때문에 CVS에서도 별 문제 없이 처리하는 듯하다. (아직은 혼자 사용해서 여러명이 사용할때 conflict가 자주 날지는 모르겠다.) 다만, 암호화한 파일은 조금만 바꿔도 파일 전체가 바뀌기 때문에 CVS에 등록하여 사용하기는 적당하지 않다. CVS에 등록해서 사용하는건 회사와 집에서 모두 쉽게 접근해서 파일을 편집하기 위한 용도이다.

freemind-mix1009

Category(s)
기타
« January 2009 »
Su Mo Tu We Th Fr Sa
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Recent comments
sandboxie 좀더 써보고... mix1009 2006-10-07
Re:Varnish HTTP Cache Project & 웹서버 최적화 mix1009 2006-10-07