±¾ÎĽéÉÜÈçºÎÈà qmail Ôö¼Ó smtpd-auth ¹¦ÄÜ£®
Èí¼þÐèÇó ϵͳ°æ±¾£ºRedHat6.2
±ØÐèÈí¼þ£º1¡¢qmail-1.03¡¡(www.qmail.org) qmailµÄÖ÷Òª³ÌÐò°ü
¡¡¡¡ ¡¡2¡¢checkpassword¡¡(cr.yp.to/checkpwd.html)¡¡ÈÃqmailʹÓÃϵͳÓû§ÈÏÖ¤µÄÃÜÂëÈÏÖ¤°ü»òvpopmail¡¡(www.inter7.com/vpopmail) ÈÃqmailÖ§³ÖmysqlºÍÐéÄâÖ÷»úÓû§ÈÏÖ¤µÄÃÜÂëÑéÖ¤°ü
3¡¢qmail-smtpd.c¡¡(www.nimh.org/hacks/qmail-smtpd.c)¡¡qmailÖ§³ÖsmtpÈÏÖ¤µÄ²¹¶¡ »òÕßµ½
http://www.elysium.pl/members/brush/ÏÂÔØ qmail-smptd.patch
ÔÀí½éÉÜ QMailϵͳ°²×°Íê³Éºó£¬ÆäsmtpÊÇÔÊÐíÈκÎÈËÄäÃû·¢ËÍÓʼþµÄ¡£µ«ÊÇ£¬ÕâÒ»µã¾³£»á±»¶ñÒâµÄÀ¬»øÓʼþ·¢ËÍÕßÀûÓá£Òò´Ë£¬ÎªÁ˱ÜÃâÕâÖÖÎÊÌâ·¢Éú£¬ÎÒÃÇΪqmail°²×°²¢ÅäÖÃsmtp·¢ÐÅÃÜÂëÈÏÖ¤¹¦ÄÜ¡£
Ê×ÏÈÎÒÃÇÏÈÀ´ÈÏʶһÏÂʲôÊÇsmtpϵÄrelay¹æÔò¡£
relay¹æÔòÒ²¿ÉÒÔÀí½â³Éת·¢¹æÔò¡£µ±Óû§Ê¹ÓÃtelnetµ½25¶Ë¿Ú£¨smtp¶Ë¿Ú£©£¬»òÕßʹÓÃÀàËÆoutlookÕâÑùµÄMUA£¨Óû§Í¶µÝ´úÀí£©·¢ËÍÓʼþʱ£¬·þÎñÆ÷¶¼»áÔÚºó¶ËÅжÏÊÇ·ñÔÊÐíת·¢£¨·¢ËÍ£©Õâ·ÝÓʼþ£¬ÅжϵÄÒÀ¾ÝÊǽÓÊÕ·½µÄÓòÃûÊÇ·ñÔÚÔÊÐíÖ®ÄÚ¡£
ÔÚQmailÖУ¬ÓÐÒ»¸öÃûΪrcpthosts(¸ÃÎļþÃûÔ´ÓÚRCPT TOÃüÁî)µÄÅäÖÃÎļþ£¬Æä¾ö¶¨ÁËÊÇ·ñ½ÓÊÜÒ»¸öÓʼþ¡£Ö»Óе±Ò»¸öRCPT TOÃüÁîÖеĽÓÊÕÕßµØÖ·µÄÓòÃû´æÔÚÓÚrcpthostsÎļþÖÐʱ£¬²Å½ÓÊܸÃÓʼþ,·ñÔò¾Í¾Ü¾ø¸ÃÓʼþ¡£Èô¸ÃÎļþ²»´æÔÚ£¬ÔòËùÓеÄÓʼþ½«±»½ÓÊÜ¡£µ±Ò»¸öÓʼþ·þÎñÆ÷²»¹ÜÓʼþ½ÓÊÕÕߺÍÓʼþ½ÓÊÕÕßÊÇË£¬¶øÊǶÔËùÓÐÓʼþ½øÐÐת·¢(relay)£¬Ôò¸ÃÓʼþ·þÎñÆ÷¾Í±»³ÆÎª¿ª·Åת·¢(open relay)µÄ¡£µ±qmail·þÎñÆ÷ûÓÐrcpthostsʱ£¬ÆäÊÇ¿ª·Åת·¢µÄ¡£
ÉèÖÃ×Ô¼º·þÎñÆ÷Ϊ·Çopen relayµÄ×î¼òµ¥µÄ°ì·¨¾ÍÊǽ«ÄãµÄÓʼþ·þÎñÆ÷µÄËùÓÐÓòÃû(ÈôDNSµÄMX¼Ç¼ָÏò¸Ã»úÆ÷£¬Ò²Ó¦¸Ã°üÀ¨¸ÃÓòÃû¡££©µ«ÊÇÒªÏëʵÏÖsmtpÓû§ÂþÓι¦ÄÜ£¬Ò²¾ÍÊÇÈκÎÍøÂçµÄºÏ·¨Óû§¶¼ÄÜ·¢ÐÅ£¬½öʹÓÃrcphosts¾ÍºÜÄѲÙ×÷ÁË£¬ÒòΪ²»¿ÉÄÜÿһ¸öÓû§Á¬½Ó½øÀ´¾ÍÐÞ¸ÄÒ»´Îrcphosts£¬Ê¹Ö®°üÀ¨·¢ÐÅÈËÓòÃûºÍip£¬ÔÙÖØÆðqmail¡£ÏÔÈ»£¬ÕâÖÖ·½·¨ºÜ²»ÏÖʵ¡£±ðµ£ÐÄ¡£
qmail-smtpdÖ§³ÖÒ»ÖÖÓÐÑ¡ÔñÐԵĺöÂÔrcpthostsÎļþµÄ·½·¨£ºÈôqmail-smtpdµÄ»·¾³±äÁ¿RELAYCLIENT±»ÉèÖã¬ÔòrcpthostÎļþ½«±»ºöÂÔ£¬relay½«±»ÔÊÐí¡£µ«ÊÇÈçºÎʶ±ðÒ»¸öÓʼþ·¢ËÍÕßÊÇ·ñÊÇ×Ô¼ºµÄ¿Í»§ÄØ£¿qmail²¢Ã»ÓвÉÓÃÃÜÂëÈÏÖ¤µÄ·½·¨£¬¶øÊÇÅжϷ¢ËÍÓʼþÕßµÄÔ´IPµØÖ·£¬Èô¸ÃIPµØÖ·ÊôÓÚ±¾µØÍøÂ磬ÔòÈÏΪ¸Ã·¢ËÍÕßΪ×Ô¼ºµÄ¿Í»§¡£ Èç¹ûҪʵÏÖSMTPÈÏÖ¤ºóµÄrelay £¬²»ÐèÒª¶ÔÈκÎIP½øÐÐÔ¤ÏÈÉ趨£¬ËùÒÔĬÈϹæÔòÉèÖóɡ°Ö»¶Ô±¾·þÎñÆ÷relay¡±¡£
¡¡¡¡ÕâÀïʹÓÃucspi-tcpÈí¼þ°ü¡£¼´¸ÃÈí¼þ°üµÄtcpserver³ÌÐò¡£¸Ã³ÌÐòµÄ¹¦ÄÜÀàËÆÓÚinetd-¼àÌý½øÈëµÄÁ¬½ÓÇëÇó£¬ÎªÒªÆô¶¯µÄ·þÎñÉèÖø÷ÖÖ»·¾³±äÁ¿£¬È»ºóÆô¶¯Ö¸¶¨µÄ·þÎñ¡£
¡¡¡¡tcpserverµÄÅäÖÃÎļþÊÇ/etc/tcp.smtp£¬¸ÃÎļþ¶¨ÒåÁËÊÇ·ñ¶Ôij¸öÍøÂçÉèÖÃRELAYCLIENT»·¾³±äÁ¿¡£ÀýÈ磬±¾µØÍøÂçÊǵØÖ·Îª192.168.10.0/24µÄCÀàµØÖ·£¬Ôòtcp.smtpµÄÄÚÈÝÓ¦¸ÃÉèÖÃÈçÏ£º
127.0.0.1:allow,RELAYCLIENT=""
192.168.10.:allow,RELAYCLIENT=""
:allow
Õ⼸¸ö¹æÔòµÄº¬ÒåÊÇÖ¸ÈôÁ¬½ÓÀ´×Ô127.0.0.1ºÍ192.168.10ÔòÔÊÐí£¬²¢ÇÒΪÆäÉèÖû·¾³±äÁ¿RELAYCLIENT£¬·ñÔòÔÊÐíÆäËûÁ¬½Ó£¬µ«ÊDz»ÉèÖÃRELAYCLIENT»·¾³±äÁ¿¡£Èç¹ûÖ»ÐèÒª¶Ô±¾»úrelay£¬µÚ¶þÐпÉÒÔ²»Òª¡£
ÕâÑùµ±´ÓÆäËûµØ·½µ½±¾µØµÄ25ºÅÁ¬½Ó½«»á±»ÔÊÐí£¬µ«ÊÇÓÉÓÚûÓб»ÉèÖû·¾³±äÁ¿£¬ËùÒÔÆäÁ¬½Ó½«»á±»qmail-smptdËù¾Ü¾ø¡£µ«ÊÇtcopserver²¢²»Ö±½ÓʹÓÃ/etc/tcp.smtpÎļþ£¬¶øÊÇÐèÒªÏȽ«¸ÃÎļþת»¯ÎªcbdÎļþ£º
[lix@mail /etc]$ # tcprules tcp.smtp.cdb tcp.smtp.temp < tcp.smtp
È»ºóÔÙ»ØÍ·¿´ÔÚ
/service/qmail-smtpd Ŀ¼ÏµÄrunÎļþÖÐÓÐ
/usr/local/bin/tcpserver -v -p -x /etc/tcp.smtp.cdb
¿ÉÒÔ¿´µ½£¬tcpserverÀûÓÃÁË/etc/smtp.cbdÎļþ¡£Èô±¾µØÓжà¸öÍøÂ磬ÔòÐèÒªÕâÐ©ÍøÂç¶¼³öÏÖÔÚ/etc/tcp.smtpÎļþÖС£ÕâÑù¾ÍʵÏÖÁËÔÊÐí±¾µØ¿Í»§relayÓʼþ£¬¶ø·ÀÖ¹relay±»ÀÄÓá£
Èí¼þ°²×° 1.°²×°ºÃqmailÒÔ¼°vpopmail»òÕßcheckpasswordÈí¼þ°ü
2.ÔÚ /usr/ports/mail/qmail Ŀ¼ÏÂÃæ£¬ÔËÐÐÃüÁî
patch <qmail-smptd.patch
ÖØÐ±àÒë qmail£¬²¢¿½±´ qmail-smtpd µ½ /var/qmail/binÏÂÃæ
./compile qmail-smtpd.c
./load qmail-smtpd rcpthosts.o commands.o timeoutread.o
timeoutwrite.o ip.o ipme.o ipalloc.o control.o constmap.o
received.o date822fmt.o now.o qmail.o cdb.a fd.a wait.a
datetime.a getln.a open.a sig.a case.a env.a stralloc.a
alloc.a substdio.a error.a str.a fs.a auto_qmail.o `cat
socket.lib`
3. ÔÚ /usr/ports/mail/vpopmail/ÏÂÃæÔö¼Ó files Ŀ¼£¬²¢½¨Á¢ÏÂÃæÁ½¸ö patch Îļþ
Îļþpatch-aa£¬ÄÚÈÝÈçÏ£º
+++ vmysql.h
27c27
< #define MYSQL_PASSWD "gipgap"
---
> #define MYSQL_PASSWD "mypassword"
Îļþ patch-bb£¬ÄÚÈÝÈçÏ£º
+++ vchkpw.c
310a311
>
311a313
>
313a316,317
> #ifdef AUTH_VCHKPW
>
359a364,365
>
> #endif
È»ºómake -D WITHOUT_ROAMING -D WITH_MYSQL DEFAULT_DOMAIN=sczg.net£¬ÖØÐ±àÒ뿽±´ÐµÄvchkpwµ½qmailµÄbinĿ¼¡£
4.ÉèÖà /bin/checkpassword »ò /home/vpopmail/bin/vchkpw ¿ÉÒÔSetUIDºÍSetGID¡£ÕâµãºÜÖØÒª£¬·ñÔòÈÏÖ¤ÎÞ·¨Í¨¹ý¡£ÕâÊÇÒòΪsmtpd µÄ½ø³ÌÊÇÓÉqmaild Ö´Ðеġ£¶øÃÜÂëÑéÖ¤³ÌÐòÔÀ´Ö»Ê¹ÓÃÓÚpop3½ø³Ì£¬·Ö±ðÓÉroot»òvpopmailÖ´ÐУ¬ÎªµÄÊǶÁshadow»òÊý¾Ý¿âÖеÄÃÜÂ룬²¢È¡³öÓû§µÄÓʼþĿ¼¡£ÕâЩ²Ù×÷qmaild ¶¼Ã»ÓÐȨÏÞÈ¥×ö¡£Èç¹ûsmtp½ø³ÌÒªµ÷ÓÃÃÜÂëÑéÖ¤³ÌÐò£¬Ôò±ØÐëҪʹÓà setuid ºÍsetgid ¡£ÆäʵÕâµã´ó¿É·ÅÐÄ£¬ÕâÁ½¸öÃÜÂëÑéÖ¤³ÌÐò¶¼ÊÇ´øÔ´´úÂëµÄ£¬±¾Éí·Ç³£°²È«£¬Ö»ÐèÒª·ÅÔÚ°²È«µÄĿ¼Àï¾Í¿ÉÒÔÁË(ÉèÖÃÆäËûÓû§³ýqmaild ¿ÉÖ´ÐÐÍⶼûÓÐȨÏÞÖ´ÐУ»ÆäʵÈç¹ûûÓÐÆäËûSHELLÕÊ»§£¬Ò²¾Í²»ÓÃÕâôÂé·³ÁË)¡£
chmod 4755 /bin/checkpassword »ò
chmod 4755 /home/vpopmail/bin/vchkpw ʹÓÃvpopmail¡£
5.²âÊÔ.Èç¹ûʹÓõÄÊÇvpopmail£¬Òª°ÑÏÂÃæµÄ /bin/checkpassword »»³É /home/vpopmail/bin/vchkpw ¡£
#su - qmaild -c "/var/qmail/bin/qmail-popup localhost /bin/checkpassword pwd"¡´»Ø³µ>
+OK £¬¡´18789.978689240@localhost>
user realuser¡´»Ø³µ>
+OK
pass password¡´»Ø³µ>
Èç¹û½á¹ûÏÔʾµÄÊÇÓû§Ä¿Â¼£¬ËµÃ÷³É¹¦ÁË£»Èç¹ûÏÔʾ"-ERR authorization failed"£¬³ý¼ì²é ÃÜÂëÍ⣬»¹Òª¼ì²éÓû§Éϼ¶µÄ¸÷¸öĿ¼ÊÇ·ñ¿É¶Á£¬»¹ÓÐÃÜÂëÑéÖ¤³ÌÐòµÄȨÏÞÊÇ·ñÉèÖÃÕýÈ·¡£
6. °Ñ smtp µÄ tcpserver ÃüÃû¸ÄΪ£º
/usr/local/bin/tcpserver -H -R -l 0 -t 1 -c 100 -x/etc/tcp.smtp.cdb -u604 -g601
0 smtp /var/qmail/bin/qmail-smtpd /bin/checkpassword /bin/true 2>&1
| /var/qmail/bin/splogger smtpd 3 &
»òÕßÊÇ
/usr/local/bin/tcpserver -H -R -l 0 -t 1 -c 100 -x/etc/tcp.smtp.cdb -u604 -g601
0 smtp /var/qmail/bin/qmail-smtpd /usr/local/vpopmail/bin/vchkpw
2>&1 | /var/qmail/bin/splogger smtpd 3 &
×¢£º¡°/usr/local/vpopmail/bin/vchkpw¡±ÊÇÖØÐ±àÒëµÄ¡£ÒÔÉϵÄÈ«ÔÚÒ»ÐС£ÖØÐÂÆô¶¯ËùÓеÄqmail½ø³Ì¡£
,