I don't know what is wrong with your config... I guess your smtp server
does not answer properly.
Is 127.0.0.2:143 really your SMTP-server?
Because port 143 is mostly an IMAP port - but you've specified PROTOCOL
SMTP in the server section.
Anyway I tested your config with my settings (replaced name and
smtp-server, here 192.0.2.222:25) and enabled debug:
+ error_log logs/error-mail.log DEBUG;
mail {
- server_name localhost;
+ server_name EXAMPLE.COM;
...
http {
...
- add_header Auth-Server 127.0.0.2;
- add_header Auth-Port 143;
+ add_header Auth-Server 192.0.2.222;
+ add_header Auth-Port 25;
it works well - I see the test incoming mail (I send to myself via 8025
port) and following output in the log (a lot of irrelevant messages are
removed):
>>>>>>>>>
2020/02/14 11:24:04 [debug] 121280#128244: *1 smtp mail from:"mail
FROM:<[email protected]>"
...
2020/02/14 11:24:04 [debug] 121280#128244: *3 http request line: "GET
/cgi-bin/nginxauth.cgi HTTP/1.0"
2020/02/14 11:24:04 [debug] 121280#128244: *3 http uri:
"/cgi-bin/nginxauth.cgi"
2020/02/14 11:24:04 [debug] 121280#128244: *3 http args: ""
2020/02/14 11:24:04 [debug] 121280#128244: *3 http exten: "cgi"
2020/02/14 11:24:04 [debug] 121280#128244: *3 http process request
header line
2020/02/14 11:24:04 [debug] 121280#128244: *3 http header: "Host:
localhost"
2020/02/14 11:24:04 [debug] 121280#128244: *3 http header: "Auth-Method:
none"
2020/02/14 11:24:04 [debug] 121280#128244: *3 http header: "Auth-User: "
2020/02/14 11:24:04 [debug] 121280#128244: *3 http header: "Auth-Pass: "
2020/02/14 11:24:04 [debug] 121280#128244: *3 http header:
"Auth-Protocol: smtp"
2020/02/14 11:24:04 [debug] 121280#128244: *3 http header:
"Auth-Login-Attempt: 1"
2020/02/14 11:24:04 [debug] 121280#128244: *3 http header: "Client-IP:
127.0.0.1"
2020/02/14 11:24:04 [debug] 121280#128244: *3 http header: "Client-Host:
[UNAVAILABLE]"
2020/02/14 11:24:04 [debug] 121280#128244: *3 http header:
"Auth-SMTP-Helo: myhost.example.com"
2020/02/14 11:24:04 [debug] 121280#128244: *3 http header:
"Auth-SMTP-From: mail FROM:<[email protected]>"
2020/02/14 11:24:04 [debug] 121280#128244: *3 http header:
"Auth-SMTP-To: rcpt TO:<[email protected]>"
2020/02/14 11:24:04 [debug] 121280#128244: *3 http header done
2020/02/14 11:24:04 [debug] 121280#128244: *3 event timer del: 512:
1127939767
2020/02/14 11:24:04 [debug] 121280#128244: *3 generic phase: 0
2020/02/14 11:24:04 [debug] 121280#128244: *3 rewrite phase: 1
2020/02/14 11:24:04 [debug] 121280#128244: *3 search through nested
static locations of ""
2020/02/14 11:24:04 [debug] 121280#128244: *3 test location:
"/cgi-bin/nginxauth.cgi"
2020/02/14 11:24:04 [debug] 121280#128244: *3 using configuration
"/cgi-bin/nginxauth.cgi"
2020/02/14 11:24:04 [debug] 121280#128244: *3 http cl:-1 max:1048576
2020/02/14 11:24:04 [debug] 121280#128244: *3 rewrite phase: 3
2020/02/14 11:24:04 [debug] 121280#128244: *3 http set discard body
2020/02/14 11:24:04 [debug] 121280#128244: *3 HTTP/1.1 204 No Content
Server: nginx/1.17.4
Date: Fri, 14 Feb 2020 10:24:04 GMT
Connection: close
Auth-Status: OK
Auth-Server: 192.0.2.222
Auth-Port: 25
2020/02/14 11:24:04 [debug] 121280#128244: *3 write new buf t:1 f:0
008AD6A0, pos 008AD6A0, size: 164 file: 0, size: 0
2020/02/14 11:24:04 [debug] 121280#128244: *3 http write filter: l:1 f:0
s:164
2020/02/14 11:24:04 [debug] 121280#128244: *3 http write filter limit 0
2020/02/14 11:24:04 [debug] 121280#128244: *3 WSASend: fd:512, s:164
2020/02/14 11:24:04 [debug] 121280#128244: *3 http write filter 00000000
2020/02/14 11:24:04 [debug] 121280#128244: *3 http finalize request: 0,
"/cgi-bin/nginxauth.cgi?" a:1, c:1
2020/02/14 11:24:04 [debug] 121280#128244: *3 http request count:1 blk:0
2020/02/14 11:24:04 [debug] 121280#128244: *3 http close request
2020/02/14 11:24:04 [debug] 121280#128244: *3 http log handler
2020/02/14 11:24:04 [debug] 121280#128244: *3 free: 008ACC50, unused:
1161
2020/02/14 11:24:04 [debug] 121280#128244: *3 close http connection: 512
2020/02/14 11:24:04 [debug] 121280#128244: *3 reusable connection: 0
2020/02/14 11:24:04 [debug] 121280#128244: *3 free: 008AC848
2020/02/14 11:24:04 [debug] 121280#128244: *3 free: 0039FDE0, unused: 28
2020/02/14 11:24:04 [debug] 121280#128244: worker cycle
2020/02/14 11:24:04 [debug] 121280#128244: *1 mail auth http read
handler
2020/02/14 11:24:04 [debug] 121280#128244: *1 WSARecv: fd:496 rc:0 164
of 1024
2020/02/14 11:24:04 [debug] 121280#128244: *1 mail auth http process
status line
2020/02/14 11:24:04 [debug] 121280#128244: *1 mail auth http process
headers
2020/02/14 11:24:04 [debug] 121280#128244: *1 mail auth http header:
"Server: nginx/1.17.4"
2020/02/14 11:24:04 [debug] 121280#128244: *1 mail auth http header:
"Date: Fri, 14 Feb 2020 10:24:04 GMT"
2020/02/14 11:24:04 [debug] 121280#128244: *1 mail auth http header:
"Connection: close"
2020/02/14 11:24:04 [debug] 121280#128244: *1 mail auth http header:
"Auth-Status: OK"
2020/02/14 11:24:04 [debug] 121280#128244: *1 mail auth http header:
"Auth-Server: 192.0.2.222"
2020/02/14 11:24:04 [debug] 121280#128244: *1 mail auth http header:
"Auth-Port: 25"
2020/02/14 11:24:04 [debug] 121280#128244: *1 mail auth http header done
2020/02/14 11:24:04 [debug] 121280#128244: *1 event timer del: 496:
1127939764
2020/02/14 11:24:04 [debug] 121280#128244: *1 reusable connection: 0
2020/02/14 11:24:04 [debug] 121280#128244: *1 free: 008AC040, unused:
196
2020/02/14 11:24:04 [debug] 121280#128244: *1 stream socket 496
2020/02/14 11:24:04 [debug] 121280#128244: *1 connect to 192.0.2.222:25,
fd:496 #4
2020/02/14 11:24:04 [debug] 121280#128244: *1 event timer add: 496:
60000:1127939769
2020/02/14 11:24:04 [debug] 121280#128244: *1 malloc: 008AC040:4096
2020/02/14 11:24:04 [debug] 121280#128244: worker cycle
2020/02/14 11:24:04 [debug] 121280#128244: *1 post event 00897120
2020/02/14 11:24:04 [debug] 121280#128244: posted event 00897120
2020/02/14 11:24:04 [debug] 121280#128244: *1 delete posted event
00897120
2020/02/14 11:24:04 [debug] 121280#128244: *1 mail proxy dummy handler
2020/02/14 11:24:04 [debug] 121280#128244: worker cycle
2020/02/14 11:24:04 [debug] 121280#128244: *1 mail proxy smtp auth
handler
2020/02/14 11:24:04 [debug] 121280#128244: *1 WSARecv: fd:496 rc:0 22 of
4096
2020/02/14 11:24:04 [debug] 121280#128244: *1 mail proxy send ehlo
2020/02/14 11:24:04 [debug] 121280#128244: *1 malloc: 0039FDE0:256
2020/02/14 11:24:04 [debug] 121280#128244: *1 WSASend: fd:496, 0, 25 of
25
2020/02/14 11:24:04 [debug] 121280#128244: worker cycle
2020/02/14 11:24:05 [debug] 121280#128244: *1 mail proxy smtp auth
handler
2020/02/14 11:24:05 [debug] 121280#128244: *1 WSARecv: fd:496 rc:0 196
of 4096
2020/02/14 11:24:05 [debug] 121280#128244: *1 mail proxy send mail from
2020/02/14 11:24:05 [debug] 121280#128244: *1 WSASend: fd:496, 0, 47 of
47
2020/02/14 11:24:05 [debug] 121280#128244: worker cycle
2020/02/14 11:24:05 [debug] 121280#128244: *1 mail proxy smtp auth
handler
2020/02/14 11:24:05 [debug] 121280#128244: *1 WSARecv: fd:496 rc:0 60 of
4096
2020/02/14 11:24:05 [debug] 121280#128244: *1 mail proxy send rcpt to
2020/02/14 11:24:05 [debug] 121280#128244: *1 WSASend: fd:496, 0, 45 of
45
2020/02/14 11:24:05 [debug] 121280#128244: worker cycle
2020/02/14 11:24:05 [debug] 121280#128244: *1 mail proxy smtp auth
handler
2020/02/14 11:24:05 [debug] 121280#128244: *1 WSARecv: fd:496 rc:0 63 of
4096
2020/02/14 11:24:05 [debug] 121280#128244: *1 event timer add: 492:
86400000:1214280441
2020/02/14 11:24:05 [debug] 121280#128244: *1 event timer del: 496:
1127939769
2020/02/14 11:24:05 [info] 121280#128244: *1 client logged in, client:
127.0.0.1, server: 0.0.0.0:8025
2020/02/14 11:24:05 [debug] 121280#128244: *1 mail proxy handler: 1,
#496 > #492
2020/02/14 11:24:05 [debug] 121280#128244: *1 WSASend: fd:492, 0, 63 of
63
2020/02/14 11:24:05 [debug] 121280#128244: *1 event timer: 492, old:
1214280441, new: 1214280441
2020/02/14 11:24:05 [debug] 121280#128244: worker cycle
2020/02/14 11:24:05 [debug] 121280#128244: *1 post event 008830C8
2020/02/14 11:24:05 [debug] 121280#128244: posted event 008830C8
2020/02/14 11:24:05 [debug] 121280#128244: *1 delete posted event
008830C8
2020/02/14 11:24:05 [debug] 121280#128244: *1 mail proxy handler: 0,
#492 > #496
2020/02/14 11:24:05 [debug] 121280#128244: *1 WSARecv: fd:492 rc:0 6 of
4096
2020/02/14 11:24:05 [debug] 121280#128244: *1 WSASend: fd:496, 0, 6 of 6
2020/02/14 11:24:05 [debug] 121280#128244: *1 event timer: 492, old:
1214280441, new: 1214280441
2020/02/14 11:24:05 [debug] 121280#128244: worker cycle
2020/02/14 11:24:05 [debug] 121280#128244: *1 mail proxy handler: 0,
#496 > #492
2020/02/14 11:24:05 [debug] 121280#128244: *1 WSARecv: fd:496 rc:0 50 of
4096
2020/02/14 11:24:05 [debug] 121280#128244: *1 WSASend: fd:492, 0, 50 of
50
2020/02/14 11:24:05 [debug] 121280#128244: worker cycle
2020/02/14 11:24:05 [debug] 121280#128244: *1 post event 008830C8
2020/02/14 11:24:05 [debug] 121280#128244: posted event 008830C8
2020/02/14 11:24:05 [debug] 121280#128244: *1 delete posted event
008830C8
2020/02/14 11:24:05 [debug] 121280#128244: *1 mail proxy handler: 0,
#492 > #496
2020/02/14 11:24:05 [debug] 121280#128244: *1 WSARecv: fd:492 rc:0 170
of 4096
2020/02/14 11:24:05 [debug] 121280#128244: *1 WSASend: fd:496, 0, 170 of
170
2020/02/14 11:24:05 [debug] 121280#128244: *1 event timer: 492, old:
1214280441, new: 1214280535
2020/02/14 11:24:05 [debug] 121280#128244: worker cycle
2020/02/14 11:24:05 [debug] 121280#128244: *1 mail proxy handler: 0,
#496 > #492
2020/02/14 11:24:05 [debug] 121280#128244: *1 WSARecv: fd:496 rc:0 56 of
4096
2020/02/14 11:24:05 [debug] 121280#128244: *1 WSASend: fd:492, 0, 56 of
56
2020/02/14 11:24:05 [debug] 121280#128244: worker cycle
...
<<<<<<<<<
Regards,
Sergey
13.02.2020 22:45, Yury Shpakov wrote:
> Hi Sergey,
>
> I reconfigured the config file as follows:
>
> === === ===
>
> #user nobody;
> worker_processes 1;
>
> #error_log logs/error.log;
> #error_log logs/error.log notice;
> #error_log logs/error.log info;
>
> #pid logs/nginx.pid;
>
> events {
> worker_connections 1024;
> }
>
> mail {
> server_name localhost;
> auth_http localhost:9000/cgi-bin/nginxauth.cgi;
> # auth_http none;
>
> smtp_auth none;
> # smtp_auth login plain cram-md5;
> # smtp_capabilities "SIZE 10485760" ENHANCEDSTATUSCODES 8BITMIME DSN;
> xclient off;
>
> server {
> listen 8025;
> protocol smtp;
> proxy on;
> proxy_pass_error_message on;
> }
> }
>
> http {
> server {
> listen 9000;
>
> location /cgi-bin/nginxauth.cgi {
> add_header Auth-Status OK;
> add_header Auth-Server 127.0.0.2; # backend ip
> add_header Auth-Port 143; # backend port
> return 204;
> }
> }
> }
> === === ===
>
> And now it's responding on port 9000 as expected:
>
> === === ===
> C:WINDOWSsystem32>curl -H "Auth-Method: plain" -H "Auth-User: user" -H
> "Auth-Pass: pwd" -H "Auth-Protocol: imap" -H "Auth-Login-Attempt: 1" -i
> http://127.0.0.1:9000/cgi-bin/nginxauth.cgi
>
> HTTP/1.1 204 No Content
> Server: nginx/1.17.9
> Date: Thu, 13 Feb 2020 21:30:54 GMT
> Connection: keep-alive
> Auth-Status: OK
> Auth-Server: 127.0.0.2 Auth-Port: 143
> === === ===
>
> However I'm still experiencing the same issue (in log file):
>
> === === ===
> 2020/02/13 16:29:24 [notice] 35048#26192: signal process started
>
> 2020/02/13 16:29:34 [error] 31732#22720: *1 WSASend() failed (10057: A
> request to send or receive data was disallowed because the socket is not
> connected and (when sending on a datagram socket using a sendto call) no
> address was supplied) while in http auth state, client: 127.0.0.1, server:
> 0.0.0.0:8025 === === ===
>
> Tried under both admin and regular user.
>
> Any further ideas how to get it fixed please?
>
> Thank you,
> Yury
>
> -------------------------
>
> FROM: Sergey Brester <[email protected]>
> SENT: Wednesday, February 12, 2020 1:51 PM
> TO: Yury Shpakov <[email protected]>
> CC: [email protected] <[email protected]>
> SUBJECT: Re: nginx for Windows - WSASend() socket error 10057
>
> I answered inline...
>
> 12.02.2020 18:59, Yury Shpakov wrote:
>
>> Hi Sergey,
>>
>> Thank you for you response.
>>
>> I tried netstat /nabo and I don't see any reference to port 9000 at all.
>> So a problem is to make nginx to listen on port 9000 (as server)?
>> Or nginx is not listening on port 9000 but rather sending requests to port
>> 9000 (as client)?
>
> With setting of `auth_http`, you are defining an URL to the service
> responsible for authentication (and upstream choice).
> Of course then you should have something that would response to the
> auth-requests (your own upstream, or some nginx location, or some "foreign"
> http-server).
>
> See https://docs.nginx.com/nginx/admin-guide/mail-proxy/mail-proxy/ [2] for
> more examples.
>
>> Maybe it's easier not to use auth_http at all? I was trying to remove it
>> from configuration file but nginx was not happy.
>
> I have my own auth-module so I don't know how it can be solved in stock-nginx
> without this directive.
>
> Take a look here -
> https://serverfault.com/questions/594962/nginx-understanding-the-purpose-of-auth-http-imap-proxy
> [3] - you can use some nginx location (and internal URL to same nginx
> instance) to specify that.
>
> Anyway it is recommended to use some auth (on nginx side), because it'd
> preserve the resources of mail-servers, allow you to authenticate email
> clients with same user/password for all mail-servers (smtp, imap, pop3, etc)
> as well as the same user/pwd as for some other http-services. And it is used
> to choose an upstream server (if multiple) for the email processing.
>
>> At this point I don't need any authentication. I was told by my boss to use
>> nginx for load testing of our service sending emails (SMTP client). I've got
>> some SMTP Server and nginx would be used as SMTP proxy because it allows to
>> set up delays.
>
> Well, an auth request to some nginx-location would allow you to set up delays
> even on authentication phase.
>
>> And take into account that I REMOVED "--with-http_ssl_module" from
>> parameters when I was building nginx.
>>
>> And you advised to download some nginx.exe files but I believe they were
>> built without "--with-mail" parameter (which I need).
>
> Although, it was compiled with "--with-mail" (you can see all parameters in
> provided GH-link [4])
> But it would not help, because basically your issue seems to be the
> configuration (not the nginx.exe).
>
> Thank you,
> Yury
>
> -------------------------
>
> FROM: Sergey Brester <[email protected]>
> SENT: Wednesday, February 12, 2020 7:38 AM
> TO: [email protected] <[email protected]>
> CC: Yury Shpakov <[email protected]>
> SUBJECT: Re: nginx for Windows - WSASend() socket error 10057
>
> It looks like your service defined in auth_http doesn't answer (or no
> listener on 127.0.0.1 port 9000?)...
>
> try netstat (in cmd as admin):
>
> netstat /nabo
> netstat /nabo | grep -A 1 ":9000b"
>
> and check whether the listener on port 9000 is bound to 127.0.0.1 (or it is
> 0.0.0.0 only?) and it is the process you expect to see there (can be
> "reserved" by some other windows-service).
>
> additionally try to telnet or curl it:
>
> curl -H "Auth-Method: plain" -H "Auth-User: user" -H "Auth-Pass: pwd" -H
> "Auth-Protocol: imap" -H "Auth-Login-Attempt: 1" -i
> http://127.0.0.1:9000/cgi-bin/nginxauth.cgi
>
> if it does not answer, make another attempt by replace 127.0.0.1 with 0.0.0.0
> (or a host-name).
>
> If it answers - see whether it is the expected response (some examples of
> good and bad responses are described in
> http://nginx.org/en/docs/mail/ngx_mail_auth_http_module.html [5]).
>
> But I guess if WSASend fails, it would probably (unexpected) reject the
> connection during the send (or even connect) process.
> It can be also invalid (unexpected) content-length in keep-alive connect to
> auth-upstream - so send but still receive is expected (or vice versa).
>
> Also follow this forum topic addressing similar issue:
> https://forum.nginx.org/read.php?2,257206,257207#msg-257207 [6]
>
> Anyway it doesn't look to me like an issue of nginx (regardless windows or
> not), but you can also try some other ready build (for example on my GH [4] -
> nginx.zip [7], where it works well).
>
> Regards,
> Sergey
>
> 12.02.2020 03:01, Yury Shpakov wrote:
> Hi there,
>
> Trying to make nginx work as SMTP server and/or SMTP proxy. Done everything
> according to:
> http://nginx.org/en/docs/howto_build_on_win32.html [8]
> But excluded (don't care about SSL at this point so don't want to
> install/configure Perl now):
> --with-openssl=objs/lib/openssl-master
>
> --with-openssl-opt=no-asm
> --with-http_ssl_module
> And added:
> --with-mail
>
> nmake was successful and nginx.exe was created.
> However nginx.exe keeps failing with the error:
> WSASend() failed (10057: A request to send or receive data was disallowed
> because the socket is not connected and (when sending on a datagram socket
> using a sendto call) no address was supplied) while in http auth state,
> client: 127.0.0.1, server: 0.0.0.0:8025
> Windows API says the following about this error:
>
> WSAENOTCONN10057
> Socket is not connected.A request to send or receive data was disallowed
> because the socket is not connected and (when sending on a datagram socket
> using SENDTO [9]) no address was supplied. Any other type of operation might
> also return this error--for example, SETSOCKOPT [10] setting SO_KEEPALIVE
> [11] if the connection has been reset.
>
> https://docs.microsoft.com/en-us/windows/win32/winsock/windows-sockets-error-codes-2
> [12]
>
> Windows Sockets Error Codes (Winsock2.h) - Win32 apps | Microsoft Docs [12]
> Return code/value Description; WSA_INVALID_HANDLE 6: Specified event object
> handle is invalid. An application attempts to use an event object, but the
> specified handle is not valid.
> docs.microsoft.com
>
> Managed to debug your code in VS 2010 a little bit but it's brutal C so it's
> hard to figure your code out. And this debugger doesn't show you any local
> variables values.
> Any recommendation for me to make it work?
> Tried to play with config (commenting/uncommenting):
>
> #user nobody;
> worker_processes 1;
> #error_log logs/error.log;
> #error_log logs/error.log notice;
> #error_log logs/error.log info;
> #pid logs/nginx.pid;
> events {
> worker_connections 1024;
> }
> mail {
> server_name localhost;
> auth_http localhost:9000/cgi-bin/nginxauth.cgi;
> # auth_http none;
> smtp_auth none;
> # smtp_auth login plain cram-md5;
> # smtp_capabilities "SIZE 10485760" ENHANCEDSTATUSCODES 8BITMIME DSN;
> xclient off;
> server {
> listen 8025;
> protocol smtp;
> proxy on;
> proxy_pass_error_message on;
> }
> } Tried both under a regular user and under admin. Tried on 25, 1025 and 8025
> ports.
> Thank you,
> Yury
>
> _______________________________________________
> nginx-devel mailing list
> [email protected]http://mailman.nginx.org/mailman/listinfo/nginx-devel [1]
Links:
------
[1] http://mailman.nginx.org/mailman/listinfo/nginx-devel
[2] https://docs.nginx.com/nginx/admin-guide/mail-proxy/mail-proxy/
[3]
https://serverfault.com/questions/594962/nginx-understanding-the-purpose-of-auth-http-imap-proxy
[4] https://github.com/sebres/nginx/releases/tag/release-1.13.0
[5] http://nginx.org/en/docs/mail/ngx_mail_auth_http_module.html
[6] https://forum.nginx.org/read.php?2,257206,257207#msg-257207
[7] https://github.com/sebres/nginx/files/2246440/nginx.zip
[8] http://nginx.org/en/docs/howto_build_on_win32.html
[9]
https://docs.microsoft.com/en-us/windows/desktop/api/winsock/nf-winsock-sendto
[10]
https://docs.microsoft.com/en-us/windows/desktop/api/winsock/nf-winsock-setsockopt
[11]
https://docs.microsoft.com/en-us/windows/desktop/winsock/so-keepalive
[12]
https://docs.microsoft.com/en-us/windows/win32/winsock/windows-sockets-error-codes-2_______________________________________________
nginx-devel mailing list
[email protected]
http://mailman.nginx.org/mailman/listinfo/nginx-devel