Archive for the 'School' Category

정태영

Imagapp에 냈던 논문은 accept 되었지만 consumer electronics 에 낸 논문은 reject 되었네요.

Imagapp는 컨퍼런스인데도 리뷰가 4개나 달렸고, Consumer Electronics는 저널인데 불구하고 아주 간단한 리뷰만이 달렸습니다. 그래도 생각했던 부분을 집어놓은거라 뭐라 할 말은 없네요. 그냥 그대로 다른 컨퍼런스에 다시 제출하고, 나중에 그 부분을 수정한 뒤 다시 도전해봐야겠습니다.

하여튼 이제 논문 3편이 Accept 되었고, 1편이 심사 중에 있는 상황이네요. Imagapp 는 Vision 쪽이랑 Joint Conference 라 왠지 대게 재밌을 거 같긴 한데, 상황이 좀 묘해서 이거 등록을 해야하나 말아야하나 조금 고민입니다.

정태영

요번 학기에도 웍스테이션 실을 제가 관리하게 되었고, 2학기에는 리눅스 실습 수업이 있는 관계로 지난 일요일에 34대의 PC 에 우분투를 설치했습니다. 우분투 8.04 가 릴리즈될 때 32bit 용 우분투를 18장 신청했는데, 요번엔 군말없이 다 보내준 관계로 시디를 굽는 노가다를 안해도 됐네요. 휴~

우선 우분투 8.04 인스톨러는 7.10 의 인스톨러에 비해 훨씬 좋아진 느낌입니다. 처음에 어떤 언어로 설치를 진행할 지 선택할 수 있기 때문에 한글로도 인스톨을 진행할 수 있습니다. ‘다음’ 버튼만 클릭하다보니 설치가 끝나버리네요. 클릭 6번만으로 깔끔하게 설치 종료!

대부분의 하드웨어를 알아서 잡아주었지만, 보드에 내장된 nvidia 의 geforce6100 의 경우엔 약간의 문제가 있었습니다. 그나마도 ‘시스템/하드웨어 드라이버’ 메뉴를 통해 nvidia 의 바이너리 드라이버를 설치하기만 하면 되네요. 메인보드 시디를 넣고 드라이버를 설치하거나 인터넷에서 드라이버를 받아 설치해야하는 윈도우와 아주 대조적입니다. 조금 더 있으면 설치가 너무 어려워서 윈도우는 못쓰겠다는 말도 나올 거 같아요. 아쉬운 점은 nateon 이 아직도 메인 패키지 트리에 포함되지 않았다는 점 정도?

그런데 아무 말썽 없이 세팅이 끝날 리가 없지요! yellow page 를 설정하다 약간의 문제가 만났습니다. nfs 는 nfs-common 를 설치하는 것으로 간단히 끝났는데, nis 가 말썽! 초기 부팅시에 ypbind 가 실패하는 증상이 발견되었습니다. 아예 안되면 설정을 잘못했다고 생각할텐데, 신기하게도 nis 서비스를 재시작해줄 경우 아주 잘 동작한다는거죠. 타이밍 문제인가 싶어서 nis 서비스를 조금 더 늦게 시작하도록 고쳐봤지만 문제는 해결되지 않았습니다. 비굴하게 rc.local 에서 nis 서비스를 재시작하도록 해두는 것으로 문제는 해결됐지만 야매로 해결한 것이다보니 만족스럽지가 않네요.

2001년 처음 알짜 리눅스를 만나고, 레드햇, 한컴 등등을 거쳐 젠투에 안착해있다가 요근래 우분투도 여기저기 많이 적용해보고 있는데, 다들 각기 장단점이 있는 것 같습니다. 오라클같은 비오픈소스 상용 소프트웨어를 사용하려면 레드햇 혹은 CentOS 등이 좋은 선택일테고, 별 생각없이 간단한 데스크탑으로 사용하려면 우분투가 좋은 선택이 될 수 있을 거라 생각합니다. 물론 개인적인 패치들이라거나 실험적인 기능들(spf/srs 등과 같은)을 적극적으로 활용해보려면 젠투도 좋은 선택일테구요.

하여튼 gtk-2.0 이 발표되던 시점 이후로 리눅스 데스크탑은 정말 굉장한 속도로 발전하고 있네요. gnome-2.0 때만 해도 웹브라우져에선 동영상 하나 제대로 볼 수 없었고, (mplayer plug-in 은 그 당시 존재하지 않았습니다. vlc 의 모질라 플러그인도 마찬가지) 플래쉬 플러그인은 심심하면 브라우져를 폭발시켰었는데 말이죠. 정말 이런 속도로 발전해간다면 앞으로의 리눅스 데스크탑은 얼마나 더 멋져질지 너무나 기대되네요.

p.s) 오랫만에 다시 보는 제 예전 리눅스 데스크탑 스크린샷들~

http://mytears.org/resources/etc/screenshot/linux/

정태영

드디어 이력서 놀이가 시작되었습니다. 얼마 전에 삼성에서 리쿠루잇을 나왔고, 비굴하게 아이디를 받아온 뒤 가볍게 이력서를 등록해봤는데, 성적을 입력하다 보니 약간 아쉬운 점들이 보였습니다.

제 학부 성적은 평점 3.26 으로 그리 좋은 성적이 아닙니다. 뭐 물론 변명일지는 모르겠지만 전자기학 한 과목을 제외하고는 재수강을 전혀 하지 않았습니다. 그러다보니 3학점짜리 D0, D+ 폭탄들이 몇 개 남아있어서 성적을 와장창 깍아먹고 있네요.

D0 를 받았던 전기회로(2)의 경우 전력 쪽으로 전혀 흥미를 느끼지 못했기 때문에 겨우 학점을 메꾸기 위한 용도로 다시 들어야할 필요는 못느꼈으며, D+ 을 받았던 신호와 시스템에서 배우는 내용은 후에 통신이론 수업을 들으면서 깨달음을 얻었기 때문에 이런 과목들을 재수강하기 보다는 좀 더 의미있는 수업을 들어보자란 생각이었던 것 같습니다.

그런데 워낙 이력서에 보여줄 게 없다보니 차라리 재수강을 할 걸 그랬나 하는 생각이 살짝 드네요. D 가 나온 세 과목만 없어지면 나름 평점이 3.5 는 될텐데… 그나마 98년에 따놨던 한자급수 2급 자격증은 인정도 안되는 거 같아요. 내 손에 분명 인증서가 있건만 1회가 2000년대라니 -_-;

하여튼 졸업시험이 3일 뒤로 다가오고, 이력서랑 자기소개서를 작성하고 보니 점점 심난해지네요. 아아악

정태영

어쩌다보니 (돈에 눈이 멀어) 학교 웍스테이션 관리를 맡게 되어버렸다. 학교마다 직책의 이름은 다르지만 값싼 노동력으로 학과 웍스테이션들을 굴리려는 시도는 똑같이 행해지고 있는 것 같다.

하여튼 홍익대학교 정보전산원에서 받던 월급에 비해 더 적은 월급으로 노동력을 착취당하기 시작했고, (홍익대학교에선 대학원 생이 정보전산원에서 일할경우 예전에 내가 받던거에 비해 더 받을 수 있는걸로 알고 있는데, 학부때 받던 것보다 더 적게 주는 한양대학교 완전 나뻐요. ㅠ.ㅠ) 학기가 시작되면서 파일 서버와 실습 머신들 관련해서 작업할 일들이 생겼는데, 실습 머신들을 모두 우분투로 밀어버릴 생각 -_-!

실습에 들어와서 리눅스를 사용해본 사람들이 리눅스에 대한 좋은 인상만 가지도록 이것저것 신경 써서 설치해주고 싶은 마음에 테스트 머신을 하나 만들었고, 거기에 우분투 7.10 (gusty) 를 설치한 뒤 nateon, haansoft-hwp, build-essensial, vlc, mplayer, flashplugin, firefox-vlc-plugin, pidgn-nateon, kopete, konqueror 등을 설치해봤는데, 호오! 사람들이 우분투 우분투 하는 이유를 조금 알 것 같다. 물론 내가 데스크탑을 리눅스로 꾸미며 놀았던 때는 이미 3년 이상 전 이긴 하지만 하여튼! 이 정도면 기본 세팅만으로도 별 아쉬움 없이 잘 쓸 수 있을거 같은 느낌!!

실습 시간에 실습은 안하고 메신져질만 할 학생들을 생각하면 조금 불안하긴 하지만 ㅠ.ㅠ 그래도 리눅스 데스크탑도 충분히 쓸만하다는 것을 알리기 위해!! 내일 저녁엔 캐삽질을 ㅠ.ㅠ

정태영

익숙한 걸 사용하려다보니 procmail 을 이용해서 bogofilter 를 수행하는 방법을 사용해 왔지만, procmail 은 로컬 유져에 한해서 실행되게 되므로, alias 나 .forward 를 사용하게 되는 경우 스팸 필터링을 하지 않게 된다.

하여튼 이게 좀 신경쓰여서 transport 와 router 를 이용해서 bogofilter 를 수행하도록 설정해봤다.

우선 transport 를 다음과 같이 설정해보자.

bogofilter: driver = pipe command = /usr/sbin/exim -oMr bogodone -bS use_bsmtp = true transport_filter = /usr/bin/bogofilter -d /etc/bogofilter/ -e -p log_output = true return_path_add = false temp_errors = * home_directory = "/tmp" current_directory = "/tmp" message_prefix = "" message_suffix = ""

그리고 이 transport 를 이용하는 router 를 만든다. 참고로 router 는 순서에 민감하므로 삽입할 위치를 잘 조절해야 한다. 나같은 경우는 system_alias 다음에 선언해두었다. (alias 를 사용하는 주소들중 로컬 유져에게 전달되지 않는 건 mailman 과 관련된 것들 밖에 없는데 이거야 뭐 어짜피 인증된 사용자가 보낸 메일만 받으니 상관 없겠다는 마음으로…-_-;; )

bogofilter: domains = +local_domains no_verify condition = ${if !eq {$received_protocol}{bogodone} {1}{0}} driver = accept transport = bogofilter

여기까지만 하게 되면 bogofilter 를 수행하기는 하지만 이를 이용해서 메일을 옮긴다거나 하는 동작은 하지 않게 된다. 그러므로 이런 동작을 시키기 위한 transport 와 router 를 또 추가해주자.

역시나 transport 먼저…

spam_delivery: driver = appendfile directory = /home/$local_part/.maildir/.Spam maildir_format delivery_date_add envelope_to_add return_path_add

이렇게 하면 자신의 홈 디렉토리의 .maildir 아래 .Spam 이란 디렉토리를 만들고, 그 디렉토리에 스팸 메일을 저장하게 된다. IMAP 으로 접속하면 Spam 메일들을 확인할 수 있기 때문에 이렇게 했는데, POP3 만 사용하는 거라면 그냥 제목에 [Spam] prefix 를 붙이게 하는 것도 나쁘지 않을 듯…

그 다음엔 이 transport 를 이용하는 router! 역시나 어디다 위치시킬지 잘 생각해야 한다. 나같은 경우엔 bogofilter router 바로 아래에 이걸 위치시켜놓았다.

removingspam: driver = accept check_local_user condition = ${if match {$h_X-Bogosity:} {Spam, tests=bogofilter} {1}{0}} transport = spam_delivery

스팸 메일은 bogofilter 에 의해 X-Bogosity: Spam, test=bogofilter … 식의 헤더가 추가되기 때문에 이렇게 할 경우 스팸을 쉽게 분류해낼 수 있다.

잘 됐는지 확인은 메일로그를 이용해서 확인하면 된다. 나같은 경우는 metalog 를 사용하니 /var/log/mail/current 를 이용해서 확인해야 했는데 대부분의 경우 syslogd 를 사용할테니 /var/log/message 를 확인하면 될 것 같다.

$ # tail -f /var/log/mail/current |grep R=
Feb 26 16:48:31 [exim] 2008-02-26 16:48:31 1JRkT5-0001pz-Nx => 메일주소 R=procmail T=procmail
Feb 26 16:48:35 [exim] 2008-02-26 16:48:35 1JTuY0-00081q-7u => 메일주소 R=removingspam T=spam_delivery
Feb 26 16:48:44 [exim] 2008-02-26 16:48:44 1JQWAs-0002po-CR => 메일주소 R=bogofilter T=bogofilter
Feb 26 16:48:45 [exim] 2008-02-26 16:48:45 1JTuY5-000826-EK => 메일주소 R=removingspam T=spam_delivery

유심해서 봐야할건 R=, T= 다음에 나오는 것들이다. R= 다음에 나오는 것은 사용된 router 를 의미하고, T= 다음에 나오는건 transport 를 의미한다. 위의 로그를 보면 bogofilter 를 수행한 뒤 removingspam router 를 이용해서 spam_delivery trasport 가 수행되기도 하고 혹은 이를 통과해서 procmail transport 가 수행되기도 하는 걸 확인할 수 있다.

기본으로는 procmail transport 가 없으니 원랜 local_delivery 가 나올 수도 있겠고 뭐 하여튼 router 나 transport 이름은 사용자가 맘대로 지으면 되는거라 상황에 따라 다 다를 듯…

스팸 없는 세상이 올 때까지 ㅠ.ㅠ 오늘도 삽질…

정태영

어째 요새 관리해야할 서버가 늘어버렸네요. (전 언픽스 하나로 족한데 ㅠ.ㅠ) 하여튼!! 요 며칠 사이 gentoo + exim + procmail + spf + srs + clamav + bogofilter + dovecot 를 시도해봤습니다.

사실 계속 제가 맡아서 할 게 아니라 길어야 일 년 정도 만져줄 서버기 때문에 젠투가 아닌 다른 배포판을 생각했었는데, spf 와 srs 를 지원할 수 있도록 하면서 기본으로 제공되는 패키지를 이용할 수 있는 조합이 몇 가지 되질 않더군요. exim 에서 spf 와 srs 는 experimental 로 되어 있기 때문에 바이너리 배포판에선 기본으로 적용이 되어 있질 않고, postfix + milter 조합에서는 srs 를 제공할 수 없기 때문에 남은 선택은 sendmail + milter 조합 밖에 없는데 sendmail 을 사용하기는 싫었거든요.

하여튼! exim 에 procmail 을 붙이는 방법은 아래와 같습니다.

procmail: driver = accept transport = procmail domains = +local_domains check_local_user # emulate OR with "if exists"-expansion require_files = /usr/bin/procmail no_verify no_expn

router 파트의 localuser: 룰 앞에 위와 같은 코드를 추가하고

procmail: driver = pipe path = "/bin:/usr/bin:/usr/local/bin" command = "/usr/bin/procmail" return_path_add delivery_date_add envelope_to_add

transpotes 에 router 에서 정의한 procmail transpote 를 정의해 주면 되죠. procmail 을 이용한 스팸 필터야 예전부터 잘 사용해오던 게 있으니 그걸 사용하면 됐구요.

그 다음은 smtp 설정!! 기본으로 /etc/exim/auth_conf.sub 란 파일이 있길래 그냥 자동으로 smtp 인증 설정이 되어있는줄 알았는데 smtp 인증을 사용하려면 저 안에 있는 내용을 /etc/exim/exim.conf 에 추가해줘야합니다.

plain: driver = plaintext public_name = PLAIN server_condition = "${if pam{$2:$3}{1}{0}}"   login: driver = plaintext public_name = LOGIN server_prompts = "Username:: : Password::" server_condition = "${if pam{$1:${sg{$2}{:}{::}}}{1}{0}}"

그 내용은 위와 같았구요. 하지만 여기서 또 문제가 발생! 예전 시스템이 오래 전에 설치된 것이었는지 비밀번호 암호화를 md5 로 사용하질 않고 있었는데, /etc/pam.d/system-auth 에서 md5 를 제거함으로써 다른 데몬들에선 문제가 해결됐지만 exim 의 stmp 에서만 인증 실패가 나오는겁니다. -_-!

참고로 smtp auth 가 어떤 과정으로 이뤄지는지는 아래 인용된 내용을 참고하세요. 테스트할 때 알아두면 편합니다.

$ telnet localhost 25
EHLO localhost
AUTH LOGIN
base64로인코딩한아이디
base64로인코딩한비밀번호

여담이지만 smtps 나 pop3, imaps 를 꼭 사용하세요. 위에서 처럼 비밀번호가 그냥 넘어갑니다. 패킷이 악의적인 라우터를 지날 경우 아이디/비밀번호가 줄줄 셀 수 있습니다.

하여튼 비굴하게 saslauthd 를 사용해서 우회시켜봤지만 요놈도 마찬가지로 인증 실패 -_-! 아예 다 안되면 모르겠는데 우리 사랑스런 dovecot 은 로그인이 아주! 잘 됩니다. exim 만 나쁜 놈이란 거죠.

saslauthd 라거나 pwcheck 같이 다른 곳에서 잘 사용도 안되는 데몬을 띄우는 게 좀 꺼림찍했는데 잘됐다 싶어서 dovecot-auth 를 활용해봤습니다. dovecot-auth 를 활용하려면 아래와 같이 dovecot.conf 파일을 수정해줘야 합니다.

auth default { mechanisms = plain login passdb pam { args = "*" } userdb passwd { } user = root   socket listen { client { path = /var/run/dovecot/auth-client mode = 0666 } } }

그리고 위에 써있는 auth-client 소켓을 이용해서 로그인하도록 exim.conf 를 고쳐줍시다.

login: driver = dovecot public_name = LOGIN server_socket = /var/run/dovecot/auth-client

이제 끝!! 드디어 smtp 인증이 정상적으로 되기 시작합니다. 휴;;

뭐 대강 다 됐는데, 한 가지 아쉬운 점이라면 .forward 나 alias 를 이용할 경우 procmail 을 거치지 않기 떄문에 스팸 필터링이 안되는 것 정도? 이건 어떻게 해야할 지 별로 답이 안나오네요.

그렇다고 bogofilter, clamav 등이 다 procmail 에서 호출되는데 이걸 spamassassin + clamd 조합으로 새로 설정하긴 완전 귀찮고 (사실 어떻게 하는지도 모르고) 약간 쀍입니다.

그 외에 mailman 과 관련된 삽질이 조금 더 있었고, seliunx 가 적용되어 있는 CentOS 랑 관련된 것도 있었는데 또 언제 시간날 때 관련된 것들을 포스팅해봐야겠습니다.

사실 요새 포스팅 하고 싶은 내용은 많은데 내용이 길어져서 귀차니즘이 발동해버렸네요.

정태영

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