مراية لـ
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
|
||||
|
||||
def proxy(data)
|
||||
# inet-protocol, client-ip, proxy-ip, client-port, proxy-port
|
||||
if m = data.match(/\APROXY (.+) (.+) (.+) (.+) (.+)\z/)
|
||||
@ip_address = m[2]
|
||||
check_ip_address
|
||||
@state = :welcome
|
||||
logger&.debug "\e[35mClient identified as #{@ip_address}\e[0m"
|
||||
increment_command_count("PROXY")
|
||||
"220 #{Postal::Config.postal.smtp_hostname} ESMTP Postal/#{id}"
|
||||
else
|
||||
@finished = true
|
||||
increment_error_count("proxy-error")
|
||||
"502 Proxy Error"
|
||||
return "220 #{Postal::Config.postal.smtp_hostname} ESMTP Postal/#{trace_id}"
|
||||
end
|
||||
|
||||
@finished = true
|
||||
increment_error_count("proxy-error")
|
||||
"502 Proxy Error"
|
||||
end
|
||||
|
||||
def quit
|
||||
|
||||
@@ -279,7 +279,7 @@ module Postal
|
||||
end
|
||||
|
||||
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
|
||||
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
|
||||
المرجع في مشكلة جديدة
حظر مستخدم