Как я могу получить информацию об уже закрытом соединении SSL, которое вызвало ошибку? - PullRequest
0 голосов
/ 10 ноября 2019

У меня есть следующий код Ruby на сервере:

#!/usr/bin/env ruby

require "socket"
require "openssl"

cert_path = Dir["/etc/letsencrypt/live/example.com/fullchain.pem"].first
key_path = Dir["/etc/letsencrypt/live/example.com/privkey.pem"].first
chain_path = Dir["/etc/letsencrypt/live/example.com/chain.pem"].first
context = OpenSSL::SSL::SSLContext.new
context.cert = OpenSSL::X509::Certificate.new( File.read( cert_path ))
context.key = OpenSSL::PKey::RSA.new( File.read( key_path ))
context.extra_chain_cert = [ OpenSSL::X509::Certificate.new( File.read( chain_path )) ]

port = 4444
t = TCPServer.new( port )
s = OpenSSL::SSL::SSLServer.new( t, context )

begin
    r = s.accept
rescue
    # get client ip here
    p r.methods.sort
end

Я могу нормально подключиться к серверу с помощью этой команды:

curl https://example.com:4444

Если я специально вызвал ошибку, напримерэто (обратите внимание, что http вместо https):

curl http://example.com:4444

Тогда я не могу получить IP-адрес клиента откуда-либо, потому что соединение уже закрыто. Я получаю атаки со многими подобными запросами, и я хотел бы защитить эти IP-адреса брандмауэром, только мне понадобятся адреса для этого. Любая идея, как получить IP-адрес удаленного клиента, который вызвал ошибку? Перехват исключения и печать объекта ошибки не содержит полезной информации. Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...