この記事は私が投稿した https://zenn.dev/haan/articles/c7ba9ee0b6c1f7 の再掲です。 import dns.resolver resolver = dns.resolver.Resolver() answers = resolver.resolve('www.google.com', 'a') for rdata in answers: print(rdata.address) 基本的にはこれだけですが、もう少し細かいことをやりたい場合の例をいくつかご紹介します。 問い合わせ先リゾルバなどを指定 resolver = dns.resolver.Resolver() resolver.nameservers = ['8.8.8.8', '8.8.4.4'] resolver.port = 53 resolver.timeout = 5 NXDOMAINを拾う resolver = dns.resolver.Resolver() try: answers = resolver.resolve('存在しないFQDN', 'a') for rdata in answers: print(rdata.address) except dns.resolver.NXDOMAIN: print('no record') MXレコードを取得 import dns.resolver resolver = dns.resolver.Resolver() answers = resolver.resolve('gmail.com', 'mx') for rdata in answers: print(f'Preference: {rdata.preference}') print(f'Server: {rdata.exchange.to_text(omit_final_dot=True)}') rdata には dns.rdtypes.ANY.MX.MX 型が返ります。Preferench値とメールサーバーのホスト名はそれぞれ上記のように取得できます。 rdata.exhange は dns.name.Name 型が返ります。dns.name.Name 型はdnspythonにおいて広く汎用的に使われる型で、to_text() メソッドで簡単にstr型に変換できる優れものです。ただし、(リソースレコードが実際にそうだから仕方がないのですが、)末尾に".“がついてきて、邪魔です。そこで omit_final_dot=True としておくと、この末尾の”.“を除外した形でstr型へ変換してくれます。 TXTレコードを取得 resolver = dns.resolver.Resolver() answers = resolver.resolve('gmail.com', 'txt') for rdata in answers: tuple = rdata.strings for item in tuple: print(item.decode('utf-8')) TXTレコードは .strings で取得できますが、この返値はbyte型のtupleになるため注意が必要です。これは、TXTレコードが ...
1
動作テスト この記事は動作テストです。中身はありません。
LogwatchのメールをAWS SESでGmailに送る
この記事は私が過去投稿した https://zenn.dev/haan/articles/f7822373281ad4 の再掲です。 はじめに Linuxサーバーの各種ログをメールで送信しておく「LogWatch」は、古の技術ではありますが、未だに現役で使いたくなるケースもあります。一方で、自前でメールサーバーを建てることは現実的には少なく、Amazon Simple Email Service (SES) などを利用することが多いと思います。この記事では、その設定方法を解説します。 環境 2024年4月に以下の環境で試しました。 Ubuntu 22.04 LTS Logwatch 7.5.6 Postfix 3.6.4 AWSの設定 今回は東京リージョンを使いますので、東京リージョンでSESコンソールに入ります。左メニューを開き、「設定」→「ID」の画面を表示します。上部の「IDの作成」ボタンをクリックします。 IDタイプは「ドメイン」を選択します。その後表示されるテキストボックスに追加したいドメイン名を入力して進みます。 カスタムMAIL FROMドメインは、例えばexample.comを追加するときに、mail.example.comのようなサブドメインをFROMメールアドレスに指定するための設定です。Logwatchだけを考えるとあまり重要ではないですが、このSES設定は他の用途でも使い回したいので、カスタム設定をすることにします。 ここまで入力したら、画面下部の「IDを作成」ボタンをクリックして進みます。 すると、必要な作業が全てリストアップされます。ドメインの権威DNSサーバーに、指示のリソースレコードを書いていけばOKです。Route53だと一部自動でやってくれるそうですが、私はRoute53ではなくCloudFlareを使っているので、CloudFlareで設定します。 一応、それぞれのレコードの簡単な解説をしておきます。 DKIM: 電子署名用のレコードです。送信者が秘密鍵を使ってメッセージのハッシュ値を送り、受信者が検証できるようにすることで、改ざんを防いでいます。CNAMEレコードを使って登録します。 MX: メールサーバーを指定します。カスタムMAIL DOMAIN利用時のみ必要です。 SPF: 送信元検証に用いるIPアドレスを指定します。正しいSenderであることを確認するためのレコードです。カスタムMAIL DOMAIN利用時のみ必要だそうなのですが、なぜそうでないと不要なのか、いまいち腑に落ちていません。 DMARC: 認証チェックに失敗したメッセージを処理する方法を指定するレコードです。現状、何もしない設定(=noneポリシー)ですが、今後Gmailのポリシーが変わるとnoneポリシーでは許されなくなるかもしれませんね。 さて、それぞれのリソースレコードを登録してしばらくすると、SESが自動でレコードをチェックしてくれます。保留中から成功に変わればOKです。 次に、SMTPサーバーの認証情報を取得します。SESコンソールの左メニュー「SMTP設定」を開き、「SMTP認証情報の作成」ボタンをクリックします。IAMに飛ばされます。 適当なユーザー名を入れて、画面下部の「ユーザーの作成」ボタンをクリックします。ses:SendRawEmail 権限を持つユーザーが生成されます。 次の画面でSMTP認証情報が表示されます。CSVファイルをダウンロードするなどして、控えておきます。完了したら、「SESコンソールに戻る」ボタンをクリックします。 これで、AWS SES側の設定は完了です。なお、まだ一度もSESを使ったことがない方は、制限引き上げのリクエストを上げたり、サンドボックスから本番環境への移行リクエストを上げたりする必要があるかもしれません。その辺はこの記事では触れないことにします。 サーバー側の設定 Logwatch logwatchでは、/usr/share/logwatch/default.conf/logwatch.conf と /etc/logwatch/conf/logwatch.conf では後者の方が強い(上書きされる)。そのため今回は、以下のようにオリジナルをコピーし、 /etc/ 配下の方だけ編集し管理することとします。 $ sudo apt install -y logwatch $ sudo cp /usr/share/logwatch/default.conf/logwatch.conf /etc/logwatch/conf/logwatch.conf 直接今回の記事と関係のない内容も含みますが、confファイルを以下のように編集します。特にmailerの設定値が重要で、デフォルトではない -f オプションを追加し、送信元メールアドレスを追加しないと動作しません。なぜこれが必要かは、後半で説明します。 $ sudoedit /etc/logwatch/conf/logwatch.conf TmpDir = /var/cache/logwatch Format = text MailTo = <送信先メールアドレス> MailFrom = <送信元メールアドレス> Range = yesterday Detail = Med mailer = "/usr/sbin/sendmail -t -f <送信元メールアドレス>" 最後に、環境依存かもしれませんが、インストール直後の状態だと私の手元ではlogwatchがログを送信するときのキャッシュファイルをうまく生成できませんでした。そのためあらかじめログ格納先を作り、権限を与えておきます。 ...