مراية لـ
https://github.com/postalserver/postal.git
تم المزامنة 2025-12-01 05:43:04 +00:00
fix(smtp-server): fixes proxy protocol
هذا الالتزام موجود في:
@@ -116,18 +116,19 @@ module SMTPServer
|
|||||||
private
|
private
|
||||||
|
|
||||||
def proxy(data)
|
def proxy(data)
|
||||||
|
# inet-protocol, client-ip, proxy-ip, client-port, proxy-port
|
||||||
if m = data.match(/\APROXY (.+) (.+) (.+) (.+) (.+)\z/)
|
if m = data.match(/\APROXY (.+) (.+) (.+) (.+) (.+)\z/)
|
||||||
@ip_address = m[2]
|
@ip_address = m[2]
|
||||||
check_ip_address
|
check_ip_address
|
||||||
@state = :welcome
|
@state = :welcome
|
||||||
logger&.debug "\e[35mClient identified as #{@ip_address}\e[0m"
|
logger&.debug "\e[35mClient identified as #{@ip_address}\e[0m"
|
||||||
increment_command_count("PROXY")
|
increment_command_count("PROXY")
|
||||||
"220 #{Postal::Config.postal.smtp_hostname} ESMTP Postal/#{id}"
|
return "220 #{Postal::Config.postal.smtp_hostname} ESMTP Postal/#{trace_id}"
|
||||||
else
|
|
||||||
@finished = true
|
|
||||||
increment_error_count("proxy-error")
|
|
||||||
"502 Proxy Error"
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@finished = true
|
||||||
|
increment_error_count("proxy-error")
|
||||||
|
"502 Proxy Error"
|
||||||
end
|
end
|
||||||
|
|
||||||
def quit
|
def quit
|
||||||
|
|||||||
@@ -279,7 +279,7 @@ module Postal
|
|||||||
end
|
end
|
||||||
|
|
||||||
boolean :proxy_protocol do
|
boolean :proxy_protocol do
|
||||||
description "Enable proxy protocol for use behind some load balancers"
|
description "Enable proxy protocol for use behind some load balancers (supports proxy protocol v1 only)"
|
||||||
default false
|
default false
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
28
spec/lib/smtp_server/client/proxy_spec.rb
Normal file
28
spec/lib/smtp_server/client/proxy_spec.rb
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
require "rails_helper"
|
||||||
|
|
||||||
|
module SMTPServer
|
||||||
|
|
||||||
|
describe Client do
|
||||||
|
let(:ip_address) { nil }
|
||||||
|
subject(:client) { described_class.new(ip_address) }
|
||||||
|
|
||||||
|
describe "PROXY" do
|
||||||
|
context "when the proxy header is sent correctly" do
|
||||||
|
it "sets the IP address" do
|
||||||
|
expect(client.handle("PROXY TCP4 1.1.1.1 2.2.2.2 1111 2222")).to eq "220 #{Postal::Config.postal.smtp_hostname} ESMTP Postal/#{client.trace_id}"
|
||||||
|
expect(client.ip_address).to eq "1.1.1.1"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context "when the proxy header is not valid" do
|
||||||
|
it "returns an error" do
|
||||||
|
expect(client.handle("PROXY TCP4")).to eq "502 Proxy Error"
|
||||||
|
expect(client.finished?).to be true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
المرجع في مشكلة جديدة
حظر مستخدم