exim 에 spf, srs 적용하기

unfix 서버를 구축할 땐 postfix 를 사용했지만 postfix 에선 srs 를 사용할 수가 없었기 때문에 새로 설치하게 된 서버들에선 exim 을 시도 중이다.
그런데 exim 을 사용하려고 하니 문제가 하나 있는데, 구글에서 검색을 해도 원하는 결과가 잘 나오질 않는다는 점이 바로 그것! exim 에는 spf 와 srs 등을 사용하기 위해서는 따로 패치가 필요 없이 그저 EXPERIMENTAL_SPF=yes EXPERIMENTAL_SRS=yes 이 두 가지 환경변수를 세팅한 채로 빌드를 진행하면 된다.
그 이후 어떻게 해야하는 지에 대한 설명이 없어서 한참 헤맸는데 exim 과 함께 설치되는 문서를 확인해야하는 것이었다. -_-; 보면 domain key 등도 위에서와 같이 환경변수만 세팅해주면 사용이 가능해진다.
doc/exim-4.68/experimental-spec.txt.bz2
문서를 확인해보니 이제 해야할 일은 spf 와 srs 설정을 추가해주는 것 뿐 후훗!
SPF 는 global 섹션에서 acl_smtp_rcpt 로 등록되어 있는 것에 다음과 같은 설정을 넣어주면 된다.
# Query the SPF information for the sender address domain, if any,
# to see if the sending host is authorized to deliver its mail.
# If not, reject the mail.
#
deny
message = [SPF] $sender_host_address is not allowed to send mail \
from $sender_address_domain
log_message = SPF check failed.
spf = fail
 
# Add a SPF-Received: header to the message
warn
message = $spf_received

젠투에선 acl_smtp_rcpt = acl_check_rcpt 와 같이 되어 있기 떄문에 acl_check_rcpt 에 위와같은 설정을 추가해줬다. 만약 아래 warn message = $spf_received 를 넣어주지 않으면 spf 결과를 헤더에 추가해주지 않게된다. 생색을 내기 위해선 뭔가 출력될 필요가 있으므로 -_-! 난 헤더를 추가하도록 설정해줬다.
하지만 위에 대로만 할 경우 내가 메일을 보낼 경우에도 SPF-Received 헤더가 붙는 문제가 생긴다. smtp auth 를 설정해놓은 상황에서 이 서버를 통해 메일을 보낼려면 인증이 되어있어야 할테니 아래와 같이 수정해서 이런 문제를 피해주자.

# Add a SPF-Received: header to the message
warn
message = $spf_received
!authenticated = *

그리고 그 담은 SRS 복잡하게 하려면 복잡하겠지만 다 귀찮아서 hash 용 secretkey 하나만 넣어서 설정해버렸다. 아래 설정은 global 섹션에 들어가면 된다. (domainlist 같은게 들어가는 곳) 실제로 somesecretkey 를 적어주는건아니고 그냥 원하는 단어 하나를 적어주면 된다.
srs_config = somesecretkey
그 다음엔 userforward 트랜스포트에 srs 를 적용하도록 해주자 srs = forward 만이 내가 추가해준 부분;;
userforward:
driver = redirect
srs = forward
check_local_user
# local_part_suffix = +* : -*
# local_part_suffix_optional
file = $home/.forward
# allow_filter
no_verify
no_expn
check_ancestor
file_transport = address_file
pipe_transport = address_pipe
reply_transport = address_reply

이제 끝!!!
얼마 받지도 못하는 웍스테이션 조굔지 뭔지 때문에 지난 며칠간 고생한걸 생각하면 흑흑 ㅠ.ㅠ
p.s) exim 에 spf 적용하기와 관련해서 따라하기 편한 문서가 있는데 페이지 랭크가 낮은거 같아서 링크
http://slett.net/spam-filtering-for-mx/exim-spf.html

Sender Rewrite Scheme

spf 는 예전에 써놨던 글에서 충분히 설명해놨듯이 메일의 도메인값과 발송지 값을 이용해 스팸을 필터링해내기 위한 기술입니다. 예를 들어 From address 에 nospam@mytears.org 가 있을 경우 mytears.org 도메인의 txt 정보를 읽어오고, 거기에 적혀있는 61.109.245.78 에서 온 메일만을 정상적인 메일로 판단하게 되는데, 이렇게 spf 가 적용되어 있는 경우 .forward 나 alias 등을 이용해서 메일을 포워딩 시킬 경우 문제가 있을 수 있습니다.
.forwards 를 통해 nospam@mytears.org 를 nospam@gmail.com 으로 리다이렉션을 시킨 경우를 생각해봅시다.

  1. sender@somedomain 에서 nospam@mytears.org 로 메일을 보냄
  2. mytears 메일 서버에서 nospam@mytears.org 사용자에 대한 .forward 파일을 읽어서 거기 적혀있는 nospam@gmail.com 으로 메일을 포워딩 시킴
  3. gmail 메일 서버에서 from address 인 somedomain 의 txt 에서 spf 정보를 읽어옴
  4. spf 로 지정된 아이피와 메일을 포워딩시킨 서버의 아이피가 동일하지 않으므로 spf 정보가 맞지 않다고 판단함
  5. spf 정책에 따라 다르겠지만 대부분 스팸이라고 판단하게 됨
  6. 결국 제대로 메일이 전해지지 않음

이걸 해결하기 위한 방법으로 srs 라는 게 있습니다. 이걸 적극적으로 적용한 예로는 구글이 있습니다.
exim 의 경우 기본적으로 spf, srs 를 지원하기 때문에 빌드할 때 옵션을 잘 조절해주면 쉽게 적용할 수 있습니다. sendmail 의 경우 milter 를 이용하면 srs 를 적용할 수 있구요. 하지만 postfix 에서는 이를 사용할 수 없는 방법이 없습니다. (구버젼의 postfix 라면 패치를 통해 사용할 수 있지만 이 패치가 계속 유지되질 않고 있습니다.)
참고
spf: http://www.openspf.org/
srs: http://www.openspf.org/SRS
p.s) 그나저나 spf 가 나온지 꽤 오랜 시간이 흘렀음에도 대학 메일 서버들 중에 spf 를 지원하는 곳은 별로 없군요.

소스 공개: yuvplayer

예전 포스트에서 얘기한 적이 있던 제 yuvplayer 를 svn repository 에 추가했습니다. 관심이 있으신 분은 아래 링크를 따라가보시면 되겠네요.
http://trac.unfix.net/browser/yuvplayer
사실 한 달쯤 전에 올려뒀는데, 제 svn repository 는 저조차 잘 가보질 않기 때문에 아무도 몰랐을거라 생각합니다;; 흐흣~ Mac 용 버젼도 있는데, 이건 아직 넣고 싶은 기능들 중 구현을 안한 것들이 많아서 추가해두지 않았습니다.
visual studio 2005 기반으로 작업하다보니 프로젝트 파일등이 모두 vs2005 용이네요. 하여튼 uyuv, yuv444, yuv422, yuv420 등으로 된 파일을 플레이할 수 있고, 마우스 오른쪽 버튼을 누른 후 현재 프레임을 다른 포멧으로 저장하는 것도 가능합니다.
관련 포스트:
mac 버젼 – http://b.mytears.org/2007/06/541
windows 버젼 – http://b.mytears.org/2007/06/544

YUVplayer for MS Windows

지난 이틀간 작업한 내 YUVPlayer for windows~! MFC + OpenGL 기반으로 작성되었고, 정말 아무 문제 없이 사용할 수 있을만큼 완성도 높게 작업해보기는 처음이 아닐까 싶다. (CUI 기반으로는 공개를 하고 있지는 않았지만 혼자 유용하게 쓰는게 몇 가지 있는데… GUI 기반으로는 정말 처음인 것 같다.)
단축키를 통해 모든 액션을 취할 수 있고, 드래그앤 드롭을 통한 파일 오픈 또한 가능하다. 게다가 _lseeki64 같이 64bit offset 을 사용하는 시스템 콜을 사용하고 있기 때문에 2GB 를 넘어가는 파일들도 문제 없이 플레이가 가능하다. (31GB 짜리 파일도 문제 없이 플레이가 가능한 것을 확인했음.)

위 스크린 샷은 기본적인 플레이 화면! CBitmapButton 을 통해 이쁜 플레이어 버튼을 만들었고, 여러가지 편법을 통해 –;; 사이즈가 조절되더라도 저 레이아웃이 그대로 유지되도록 만들었다.
Continue reading YUVplayer for MS Windows

Domain key

Domain key 는 MS 의 Sender ID 와 비슷한 기술로써 메일의 위변조를 막기 위해 야후에서 개발한 기술입니다. 현재 dreamwiz, yahoo, gmail 등에서 사용되고 있습니다.
http://kr.antispam.yahoo.com/domainkeys
공개키, 비밀키를 이용하는 방식으로 dns 의 text 영역에 공개키를 넣어두고, 메일 본문과 헤더는 비밀키를 이용해서 디지털 사이닝 하는 방식으로 동작하기 때문에 dns 와 smtp server 에서 모두 지원을 해야 사용이 가능합니다.
Continue reading Domain key

내가 참여했던 오픈소스

세이군님이 자신이 참여했던 오픈소스 활동을 정리하신 걸 보고 저도 따라해 봅니다.

YUV player

대학원에 들어가서 비디오 코덱 관련 연구를 하다보니 raw YUV 데이터 파일을 자주 사용하게 되었는데, 맘에 드는 뷰어가 없어서 만들고 공개했던 프로젝트…

나름 github에서 별도 많이 받고, 포크도 많이 받고 있는 프로젝트!

X-Chat 2

거의 제일 처음으로 해본 패치이자 가장 의미 있었던 패치가 아니었나 싶다.

딩딩 바이러스 라고 불리던 멀티바이트 닉 컴플리션 관련된 버그와 노틸러스에서 한글 파일을 드래그 앤 드롭했을 때 생기는 문제를 해결하기 위한 패치들을 작성했었다. 하지만 원인을 해결한다기보다 약간의 추가코드로 버그를 피해갈 수 방법만을 제공한 것 같아 조금 아쉬움이 든다. -_-;; (패치 리포트는 류창우님이 하셨지만 제가 만든 패치입니다 -_-v)

딩딩 바이러스의 경우 utf-8 로 표현된 한글에서 앞의 첫 혹은 두 바이트만이 매칭되는 경우에 생기는 문제로 for ( i = 0 ; i < strlen(str) ; i++ ) ... 식으로 된 코드를 while( utf8_get_next_char(str, &pos) ) ... 정도로 수정하는 게 훨씬 훌륭한 방법이었다고 생각하나 그러기엔 손델 곳이 너무 많았다. 현재는 관련된 부분이 재작성되서 내 패치가 필요없게 되어 버렸다. (그래도 한동안 X-chat 메인 스트림에 포함되어 있던 패치 -_-v) 그리고 nautilus 에서 drag and drop 을 할 때 문제가 생기는 것은 file 의 경로가 file:///home/aqua/%EA%B0%80 식으로 url_quote 되서 오기 때문이었는데, 이를 해결하기 위해선 fopen/fread/fwrite 등의 stdio 계열 api 대신 gnome_vfs api 를 사용하면 되는 것이겠지만! 당시 X-chat 은 gnome lib 와 링크되고 싶어하지 않았기 때문에 어쩔 수 없었다고 생각한다.

gimageview

정확히는 기억나지 않지만 gtkmmviewer 라고도 불리는 gimageview 는 xinerama 에서 최대창 모드를 했을 때 약간의 문제가 있었던 것 같다. 이건 문제를 정말 깔끔하게 해결하는 패치였는데, 아직도 받아들여지지 않고 있다.

이 패치를 적용해본 다른 분이 ‘완전 최고에요. 얼렁 적용해주세요!’ (내가 보기에만 저렇게 보인 걸지는 모르겠다.) 정도의 메시지를 남겼는데, 메인테이너가 확인을 안하는 것 같다. 흑흑…

mod_autoindex hack

아파치의 기본 모듈인 mod_autoindex 의 프레젠테이션 관련해서 약간의 수정을 가했던 작업! 내가 제일 유용하게 사용하고 있는 기능 중 하나!

처음에는 테이블 기반이었고, Quick and Dirty 가 무엇인지를 보여주는 코드였다. 하지만 백업 하드를 날리면서 패치를 잃어버리게 된 후, kukie 씨의 도움을 받아 css/xhtml 로 변경했고 사용자가 cssfile, encoding 등을 설정할 수 있도록 기능을 확장했다.

proftpd: mod_codeconv patch

서버에 파일이름이 모두 utf-8 로 저장되기를 바라면서 mod_codeconv 를 적용해 보았지만, mod_codeconv 는 global 영역에서 밖에 설정을 할 수가 없길래 scope 관련해서 했던 작업. 패치를 원 저작자에게 보내주려 했지만, 메일주소가 변경되었는지 메일이 전부 반송되서 피드백을 하는데는 실패!

mytrz-dviewer

주위 사람들이 내 mod_autoindex 를 보고 자신도 쓸 수 없는지 물어보길래… 비슷한 역할을 하는 스크립트를 작성해서 BSD License 로 공개를 했다. 나름 구현하고자 했던 기능을 전부 구현했고, 사용자들의 피드백도 더 이상 없어서 버젼업이 멈춰있다. -_-;

mod_rewrite 를 사용가능한 경우를 위한 패치를 할까 말까 고민 중…

wordpress: korean trackback plugin

까나리 옹이 이글루스에서 날려준 euc-kr 트랙백을 제대로 받기 위해 만든 hack! 관련 논의가 wordpress trac 에서 이루어지고 있지만, 이틀정도 반짝 관심을 가지고 있다가 요새 좀 정신이 없는 관계로 관심을 가지지 못하고 있다. -_-;;

wordpress 에는 trackback 을 다 받고나서 저장하기 전까지 plugin 이 간섭할 수 있는 포인트가 전혀 존재하지 않으므로, 이미 저장된 포스트를 update 하는 방식으로 구현해야만 했다.

gentoo ebuild

간간히 gentoo bugzilla 에서 한글 관련 문제라거나, 새로운 패키지 등을 리포트 하는 작업을 하고 있다. (나름 대게 많이 참여했던 거 같은데 검색해보니 별로 많이 안나오네요 -_-;; )

websvn

websvn 의 템플릿 파일을 svn repository 에 저장하고 websvn 을 통해 보게 되면, 무한 룹에 빠지게 되버리는 버그가 있었습니다. 버그를 리포트하고 해결책까지 제시했지만, 뒷북이었다는 걸 나중에 알게 되었습니다.

저런 중요한 버그는 정식 릴리즈 버젼에 패치를 백포트 한 뒤 얼른 새 버젼을 릴리즈 해줘야 했었다고 생각하는데… 뭐 하튼 지금 생각해보면 그런 얘기를 전혀 하지 않았던 게 약간은 아쉽네요.

  • http://websvn.tigris.org/issues/show_bug.cgi?id=97

그 외에도 gd 의 gdImageCopyResampled 에서 x, y offset 을 제대로 적용하지 못하는 버그, unalz 파일이름 인코딩 변경 관련해서 패치를 보냈었지만… 이미 기록은 찾을 수가 없다. 그리고 막상 이것저것 많이 했었던 거 같은데 정리하려고 보니까 생각이 안납니다. ㅠ_ㅠ

대게 정식 i18n 패치라거나, 범용성 있는 그런 패치를 만들기보다는 현재의 문제를 해결하려한다거나 나만이 필요한 기능을 hack 으로 구현해버리는 작업을 많이 해서 더 보여줄 게 없는지도 모르겠네요 ㅠ_ㅠ

wordpress: 최근 추가한 플러그인들…

여기저기 돌아다니다 보니 멋진 플러그인들이 많길래 이것저것 추가해보았습니다.
1. Korean Trackback
이글루스에서 오는 트랙백이 euc-kr 로 인코딩되어 있기 때문에, utf-8 기반의 워드프레스에선 이글루스에서 보내는 트랙백을 제대로 받을 수 없기에… 직접 플러그인을 작성해서 추가해줬습니다. -_-v
url: http://b.mytears.org/2006/09/396
2. iG:Syntax Hiliter
혹시나 포스트에 프로그램 코드를 삽입할 일이 있을 경우를 대비해서, 코드 하일라이팅을 위한 플러그인을 추가했습니다. 상당히 많은 언어를 지원합니다만 sh (쉘스크립트) 는 지원하지 않아서 약간 아쉽네요. 사용 예는 아래와 같습니다.

url: http://blog.igeek.info/wp-plugins/igsyntax-hiliter/
3. wp-scripts, ajax-spoiler
wp-scripts 는 prototype.js 등을 헤더에 삽입해주는 역할을 하고, ajax-spoiler 는 tt 에서와 같이 텍스트를 숨겼다가 보여줬다 하는 기능을 사용할 수 있도록 해줍니다.
tt 처럼 그냥 단순히 보였다 감췄다 정도가 아니라 애니메이션 효과까지 줄 수 있어서 상당히 멋드러집니다. 😉
url: http://082net.com/tag/wp-scripts/
url: http://082net.com/tag/aj-spoiler/
4. bad behavior
request 를 분석해서 봇이라고 생각되면 차단합니다. 적용 후 확실히 스팸이 줄었습니다. (하루 120 통 쯤에서 10통 이하.. 그나마 akismet 에 나머지는 걸립니다.)
url: http://www.homelandstupidity.us/software/bad-behavior/
조금만 부지런하면 이래저래 편리해지는 아름다운 워드프레스 세상입니다. 혹시 또 멋진 플러그인들을 알고 계신 분들은 트랙백 부탁드리겠습니다. 😉

wordpress: korean trackback!

어제 까날옹이 egloos 에서 가볍게 트랙백을 날려주셨는데, egloos 에선 trackback 인코딩을 euc-kr 을 사용하는지 트랙백이 깨져서 와버렸네요. 혹시나 관련된 plugin 을 찾아봤지만 plugin 으로는 아직 존재하지 않는 듯 하고, 관련해서 wind-like 님이 문제를 해결한 버젼의 wp-trackback.php 파일을 배포하시더군요.
하지만 wordpress 기본 파일을 수정할 경우 업데이트를 할 때마다 다시 수정해줘야 하는 번거로움이 있기 때문에 그냥 plugin 을 작성해버렸습니다. 막상 plugin 을 작성하려고 보니 trackback_post 에 대한 action 은 글이 삽입된 이후에 실행되도록 되어 있더군요. 역시 그냥 wp-trackback.php 를 수정해서 사용해야 하는건가 하는 생각이 들었지만, 뭐 정도가 아니면 돌아가면 되는 법!! 이미 데이타베이스에 입력완료된 trackback 을 update 하도록 하는 hack 에 가까운 플러그인이 만들어져버렸습니다. -_-v
혹시나 필요한 분은 아래 url 에서 받아서 사용하시면 되겠습니다.
http://mytears.org/resources/distfiles/wp_korean_trrackback-1.0.zip
p.s) wind-like 님이 수정하신 버젼과는 다르게 ‘트랙백을 받는 경우’ 하고만 관련이 있습니다.

php: mytrz-Gallery

개인적인 스크린샷을 올려놓거나 정모 사진등을 쉽게 업데이트 하기 위해 만들어 놓았던 갤러리를 공개해볼까 합니다 🙂 워낙 simple 하기 때문에 이름을 Simple Gallery 라고 지을까 하는데 가져다가 쓰는 사람이 있을지는 모르겠군요 –;
사용법도 정말 심플합니다. 이미지 디렉토리에 ftp 등을 이용해서 파일을 올려놓기만 하면 자동으로 thumbnail 이 생성되고 리스트가 갱신됩니다. 라이센스는 예전 Directory Viewer 와 마찬가지로 BSD License 가 될 듯 싶네요

데모:
http://mytears.org/resources/etc/screenshot/linux/
개발버젼:
http://trac.unfix.net/browser/mytrz-gallery
라이센스: BSD License 예정

아직은 제대로 동작하지 않습니다. 현재 계획 중인 것들은

  1. smary 를 이용한 템플릿 지원
  2. image resizer 를 gd 와 ImageMagick 등 중에 선택가능

뭐 대강 저 정도입니다. 혹시나 쓰는 사람들이 하나 둘 생기고… 개선 요구가 있음 반영하도록 노력할 계획입니다 😉
덧: 이상하게 이건 손이 안가네요.
Change Log:
2006/08/30
1. 개인 repository 를 통합하면서 svn 경로가 변경됨
2. 웹에서 svn 을 구경하기 위한 툴을 trac 으로 변경
3. 프로젝트 이름은 mytrz-gallery 로 변경
2006/01/06
1. 개인적으로 사용하던 걸 코드를 조금 정리하고 svn 에 import