[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[postfix-jp: 3773] Re: ポート番号を記録する方法
- Subject: [postfix-jp: 3773] Re: ポート番号を記録する方法
- From: Kouhei Sutou <kou@xxxxxxxxxxxxxx>
- Date: Sat, 22 May 2010 16:30:26 +0900 (JST)
須藤です。
In <4BF753EC.4050303@xxxxxxxxxx>
"[postfix-jp: 3772] ポート番号を記録する方法" on Sat, 22 May 2010 12:47:56 +0900,
Mitsuru Ogino <ogino@xxxxxxxxxx> wrote:
> Postfix の smtpd が、メールをある Queue ID で受信したとき、使用された送
> 信元 TCP ポート番号を知る方法を探しているのですが見つからないでおります。
>
> Postfix のログか、または他の方法でも良いのですが、なにか方法がありました
> らお教えください。ソースコードに手を入れる以外の方法があり難いです。
Postfixもサポートしているmilterという仕組みがある(*)のですが、
それを使うとできそうな気がします。
(*)
http://www.postfix.org/MILTER_README.html
http://www.postfix-jp.info/trans-2.3/jhtml/MILTER_README.html
milterではPostfixからいくつか情報をもらうのですが、"connect"
というイベント(*)のときにもらうhostaddrの情報が「使用された送
信元 TCP ポート番号」にあたるのではないかと思います。
(*) https://www.milter.org/developers/api/xxfi_connect
↑の情報をログに残すようなmilterを作るにはC, C++, Python,
Rubyなどでプログラムを書く必要があるのですが、たとえば、Ruby
で書くとこんな感じになります。
https://milter-manager.svn.sourceforge.net/svnroot/milter-manager/milter-manager/trunk/tmp/milter-report-port.rb
#!/usr/bin/env ruby
#
# Copyright (C) 2010 Kouhei Sutou <kou@xxxxxxxxxxxxxx>
#
# This library is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this library. If not, see <http://www.gnu.org/licenses/>.
require 'syslog'
require 'milter'
class MilterReportPortSession < Milter::ClientSession
def connect(host, address)
@host = host
@address = address
end
def end_of_message
queue_id = @context.macros["i"]
Syslog.info("host_name=%s address=%s port=%d queue_id=%s",
@host, @address.address, @address.port, queue_id)
accept
end
end
command_line = Milter::Client::CommandLine.new
command_line.run do |client, _options|
Syslog.open("milter-report-port",
Syslog::LOG_PID | Syslog::LOG_CONS,
Syslog::LOG_MAIL)
client.register(MilterReportPortSession)
end
Syslog.close
↑を動かすには開発版のmilter managerが必要になります。
Debian/Ubuntuならlibmilter-toolkit-ruby1.8というパッケージ、
CentOSならruby-milter-toolkitというパッケージをインストール
する必要があります。
参考:
Debian: http://milter-manager.sourceforge.net/dev/reference/ja/install-to-debian.html
Ubuntu: http://milter-manager.sourceforge.net/dev/reference/ja/install-to-ubuntu.html
CentOS: http://milter-manager.sourceforge.net/dev/reference/ja/install-to-centos.html
以下のように↑のmilterを起動し、
% ruby milter-report-port.rb --daemon
main.cfに以下を追加すると、
smtpd_milters = inet:localhost:20025
syslog経由で/var/log/mail.logとか/var/log/maillogあたりに以
下のようなログが記録されると思います。
May 22 16:11:08 mx milter-report-port[5816]: host_name=localhost address=127.0.0.1 port=47793 queue_id=3845128C079
--
須藤 功平 <kou@xxxxxxxxxxxxxx>
株式会社クリアコード <http://www.clear-code.com/> (03-6231-7270)
Mozilla Firefox/Thunderbirdサポート:
http://www.clear-code.com/services/mozilla/menu.html
迷惑メール対策:
http://www.clear-code.com/software/milter-manager.html
テスティングフレームワーク:
http://www.clear-code.com/software/cutter.html
http://www.clear-code.com/software/uxu.html
_______________________________________________
Postfix-jp-list mailing list
Postfix-jp-list@xxxxxxxxxxxxxxxxxxxx
http://lists.sourceforge.jp/mailman/listinfo/postfix-jp-list
- Follow-Ups
-
- [postfix-jp: 3774] Re: ポート番号を記録する方法, Mitsuru Ogino
- References
-
- [postfix-jp: 3772] ポート番号を記録する方法, Mitsuru Ogino
[検索ページ]
[Postfix-JP ML Home]