■目次
ネットワークサブネットマスクプライベートIPアドレス例示用のドメインとIPアドレスドメインの情報セキュア通信SSHでアクセスするSSHで多段接続とポートフォワーディングサーバ同士でSSH接続SSHの操作ログを記録telnetでアクセスするパケットキャプチャを行うネットワークを確認ネットワークの設定を確認メールを送信する際、バウンスメールの受け取りアドレスを設定するメールを送信する際、迷惑メール扱いされないための設定メールを送信する際、ハードバウンスが発生しないようにする
■ネットワーク
参考:基礎からのネットワーク&サーバ構築 改訂版 まとめ - Qiita https://qiita.com/chrischris0801/items/b2e14655b86c96ca585f ■通信の用語 ネットワーク ... 複数のコンピュータを繋ぐ通信網 AWSではVPCと呼ばれる サブネット ... ネットワーク内に作成する、規模の小さなネットワーク サブネットワークの略 ゲートウェイ ... 異なるネットワーク間の相互通信を可能にする仕組み、または機器のこと インターネットゲートウェイとも呼ばれる ルーター ... 異なるネットワーク間を中継する通信機器 デフォルトゲートウェイ ... 異なるネットワークへの出口 つまりルーターのこと ルートテーブル ... 個々のネットワークの宛先への経路一覧を保持している、テーブル状のデータ構造 ルーターやネットワーク接続されたコンピュータが持っている ルーティングテーブルとも呼ばれる デフォルトルート ... ルートテーブルに設定されていないIPアドレス宛てのすべてのパケットは、デフォルトルート経由で送信される 一般的にデフォルトルートは、デフォルトゲートウェイを指すようになっている デフォルトルートは 0.0.0.0 と表記され、「すべてのアドレス」ということ ブロードキャストアドレス ... ネットワーク内のすべての端末にデータを送信するために使われる特殊なアドレス 255.255.255.255
■サブネットマスク
IPアドレスの、どこからどこまでがネットワークを表し、どこからどこまでがコンピュータを表すのかを決めるもの IPアドレス 192 168 1 128 11000000 10101000 00000001 10000000 ... サブネットの1に対応する部分がネットワーク、0に対応する部分がコンピュータ サブネットマスク 255 255 255 0 11111111 11111111 11111111 00000000 ... 1が24個あるので「/24」と表記される 以下の場合、コンピュータには「192.168.1.0 〜 192.168.1.255」のアドレスを割り当てられる 192.168.1.0/24 サブネットマスク IPアドレス数 「192.168.1.1」の場合の例 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - /8 255.0.0.0 16777216 192.0.0.0 〜 192.255.255.255 /16 255.255.0.0 65536 192.168.0.0 〜 192.168.255.255 /24 255.255.255.0 256 192.168.1.0 〜 192.168.1.255 /28 255.255.255.240 16 192.168.1.0 〜 192.168.1.15 /32 255.255.255.255 1 グローバルIPアドレス。ネットワークにならない
■プライベートIPアドレス
プライベートIPアドレスには 10.0.0.0 〜 10.255.255.255 ... 大規模ネットワーク向け 172.16.0.0 〜 172.32.255.255 ... 中規模ネットワーク向け 192.168.0.0 〜 192.168.255.255 ... 小規模ネットワーク向け が使える また、127.0.0.1 〜 127.0.0.254 はローカルループバックアドレス(自分自身を表す) 参考:IPアドレスの基礎知識 https://qiita.com/mogulla3/items/efb4c9328d82d24d98e6
■例示用のドメインとIPアドレス
適当なドメインやIPアドレスを使うと、実在のものを指定してしまうことがある 例示用として以下が用意されているので、こちらを使う example.com example.net example.org 192.0.2.0/24 198.51.100.0/24 203.0.113.0/24 2001:DB8::/32 参考:test.comやaaa.comをテストデータに使うのはやめましょうという話 https://blog.ko31.com/201304/sample-domain-example/
■ドメインの情報
$ dig refirio.net any … 特定ドメインの情報を取得 ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6_9.2 <<>> refirio.net any ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 63302 ;; flags: qr rd ra; QUERY: 1, ANSWER: 6, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;refirio.net IN ANY ;; ANSWER SECTION: refirio.net. 3600 IN NS ns1.dns.ne.jp. refirio.net. 3600 IN NS ns2.dns.ne.jp. refirio.net. 3600 IN MX 10 mail1.refirio.net. refirio.net. 3600 IN MX 20 mail2.refirio.net. refirio.net. 3600 IN A 153.121.33.84 refirio.net. 3600 IN TXT "v=spf1 +ip4:153.121.33.84 -all" refirio.net. 3600 IN SOA master.dns.ne.jp. tech.sakura.ad.jp. 2017032202 3600 900 3600000 3600 ;; Query time: 3 msec ;; SERVER: 210.188.224.10#53(210.188.224.10) ;; WHEN: Sun Jun 11 23:48:17 2017 ;; MSG SIZE rcvd: 206 レコードの意味は以下の通り FQDNは「Fully Qualified Domain Name」の略で何も省略しない完全修飾ドメイン名 TTLは「Time To Live」の略で生存期間 FQDN TTL INternet Address IPアドレス refirio.net. 3600 IN A 153.121.33.84 各レコードの意味は以下の通り ・NS(Name Server) ... ドメインの権限を持つDNSサーバ。可用性向上のため、通常複数台用意されている ・MX(Mail eXchanger) ... メールの送受信で使うドメイン。「10」「20」は、数字が小さいものが優先的に参照される ・A(Address) ... ドメインからIPアドレスを調べる際に参照される。正引きする際に必須 ・TXT(TeXT) ... 改ざんが容易に出来てしまうメールの仕組み上、本当にそのドメインから送られてきてるよ、という証明 ・SOA(Start Of Authority) ... どのDNSサーバがどのドメインを管理しているのかを宣言する SOAレコードの後ろの数字の意味は以下の通り ・serial ... シリアル番号。ゾーンファイルを新しく更新しても、このシリアル番号が低いものは更新されない 番号であれば何でも良いが、「年月日」+「連番」を記述するのが定石となってる ・reflesh ... 更新時間。スレーブの更新タイミングの目安となる秒数 ・retry ... 再試行時間。再実行する際にウェイトする秒数 ・expiry ... 有効期限。マスターがダウンしてる際の生存期間 ・minimum ... ネガティブキャッシュの生存期間。デフォルトのTTL 他に以下のようなレコードもある ・PTR(PoinTeR) ... 逆引き用のレコード。Aレコードの逆 ・CNAME(Canonical Name) ... ドメインに別名を付ける場合に指定する。元になるドメインはAレコードで指定されたものを使う ・SPF(Sender Policy Framework) ... TXTレコードの一種。電子メールの送信元ドメインが詐称されていないかを検査するための仕組み TXTレコードと同一の内容を設定しておく 参考:俺のDNS - 脱・初心者のためのメモ https://qiita.com/Ogaaaan/items/b3ceb8827e98ce40f5f2 以下のようにすると、GoogleのDNSサーバを使って取得できる。GoogleのDNSサーバを使うと高速になる、と言われている ただし、表示されるTTLの値に差があったりする。問題ないのかは要勉強 $ dig @8.8.8.8 refirio.net any 参考:【 dig 】コマンド――ドメイン名からIPアドレスを調べる:Linux基本コマンドTips(158) - @IT http://www.atmarkit.co.jp/ait/articles/1711/09/news020.html
■セキュア通信
参考:エンジニアなら知っておきたい、絵で見てわかるセキュア通信の基本 - Qiita https://qiita.com/t_nakayama0714/items/83ac0b12ced9e7083927
■SSHでアクセスする
■導入 sshコマンドで、リモートサーバに接続できる ※クライアント環境がLinuxやMacなら、今は特に追加ソフトウェアのインストールの必要もなくsshコマンドを使える ※Windowsの場合はsshコマンドが標準機能ではないが、 Git for Windows をインストールすると付属の Git Bash から使えるようになる 多くの解説ではWindowsではPuTTYのインストールが解説されているが、 「Windows環境でSSHコマンドを使うにはPuTTYが必須」ということは無さそう 参考:Git for Windows インストール&設定 - Qiita https://qiita.com/shinsumicco/items/a1c799640131ae33c792 参考:git for windows だけで出来る ssh - himadatenodeの日記 http://d.hatena.ne.jp/himadatanode/20160823/p1 WindowsからSSH接続を利用するなら、以下のようなクライアントソフトをインストールするのもの有効 (Poderosaは多段接続には対応していないが、通常の利用には問題ない) Poderosa https://ja.osdn.net/projects/sfnet_poderosa/ ■導入(非推奨手順) WindowsのPowerShellとコマンドプロンプトで、SSHコマンドを使えるようにする場合 https://github.com/PowerShell/Win32-OpenSSH/releases から OpenSSH-Win64.zip をダウンロード 解凍すると作成される OpenSSH-Win64 を C:\ に置く(C:\OpenSSH-Win64 内にプログラムがある状態にする) Windowsのシステム環境変数のPathに C:\OpenSSH-Win64 を追加する PowerShellを開き、「ssh」と入力して、コマンドが使えることを確認する コマンドプロンプトを開き、コマンドが使えることを確認する これでSSHコマンドを使える …が、多段接続をしようとすると(正確には「ProxyCommand」を使おうとすると) 「Proxy connect is not supported in Windows yet」 と表示された。Windows版では、まだ多段接続はできないみたい 前述の Git Bash なら多段接続も問題なしなので、Windows環境なら現状はこちらを推奨 参考:sshをWindowsコマンドプロンプトで実行する手順 | 無停電電源装置(UPS) | イートン https://www.eaton-daitron.jp/techblog/4627.html 参考:Windows環境から SSHでポートフォワード(port forwarding)[別名 SSHトンネル]するには何が最適か? - Qiita https://qiita.com/ynott/items/6f0088b412b3a4128910 以下、Windows環境の Git Bash で検証したもの ■SSH接続の確認 以下はAWSのEC2に接続する例だが、他への接続でも書き方は同じ $ ssh -p 10022 -i C:/Users/refirio/Documents/SSH/refirio/refirio-dev.pem ec2-user@203.0.113.1 C:\Users\refirio\.ssh\config で以下のように設定しておくと、「ssh refirio-dev」のみで接続できる (configファイルが無ければ、自分で新規に作成する)
Host refirio-dev Hostname 203.0.113.1 User ec2-user Port 10022 IdentityFile C:/Users/refirio/Documents/SSH/refirio/refirio-dev.pem IdentitiesOnly yes
参考:~/.ssh/configについて - Qiita https://qiita.com/passol78/items/2ad123e39efeb1a5286b
■SSHで多段接続とポートフォワーディング
■SSH多段接続の確認 C:\Users\refirio\.ssh\config で以下のように設定しておくと、「ssh refirio-entrance」のみで接続できる (Poderosaは多段接続に対応していないようなので、Git Bash や ConEmuで試した) さらに「ssh refirio-web1」とすれば、refirio-entrance を経由して refirio-web1 に多段接続できる 踏み台サーバを経由して本番サーバに接続する場合、何度もsshコマンドを入力せずとも接続できる 踏み台サーバと本番サーバで別々の鍵を使う場合、両方の鍵が接続元のローカルに必要 (逆に言えば、踏み台サーバに本番サーバの鍵を置く必要は無い)
Host refirio-entrance Hostname 203.0.113.2 User ec2-user Port 10022 IdentityFile C:/Users/refirio/Documents/SSH/refirio/refirio-prod.pem IdentitiesOnly yes Host refirio-web1 Hostname 10.0.1.3 User ec2-user Port 10022 IdentityFile C:/Users/refirio/Documents/SSH/refirio/refirio-prod.pem IdentitiesOnly yes ProxyCommand ssh refirio-entrance -W %h:%p
■ポートフォワーディングの確認 ポートフォワーディングとは、ローカルコンピュータの特定のポートに送られてきたデータを、 別な通信経路を用いてリモートコンピュータの特定ポートに送信する事 Vagrant(http://192.168.10.10/ であるとする)へのポートフォワーディングを試す $ ssh -fNCL 0.0.0.0:80:localhost:80 vagrant@192.168.10.10 The authenticity of host '192.168.10.10 (192.168.10.10)' can't be established. ECDSA key fingerprint is SHA256:s6TtuBDr5iBjWO9atbRydfyuY8+dAz45l408mEpfc04. Are you sure you want to continue connecting (yes/no)? yes … 「yes」を入力(初回のみ) Warning: Permanently added '192.168.10.10' (ECDSA) to the list of known hosts. … セキュリティ警告が出るが承認 コマンドの意味は 「80番ポートのすべてのパケット(0.0.0.0:80)を localhost:80 に転送する。vagrant@192.168.10.10 をゲートウェイとする」 となる オプション「-fNCL」の意味は以下のとおり -f ... SSHをバックグラウンドで実行する -N ... リモートのコマンドを実行せず、待機状態にする -C ... データを圧縮して送る -L ... ポートフォワーディングを行う これで自身からは http://192.168.10.10/ だけでなく、 http://127.0.0.1/ http://localhost/ でもVagrantにアクセスできるようになる (この状態なら、自身のIPアドレスを指定すれば、同一ネットワークの他端末からのブラウザアクセスが可能) なお対象サーバを再起動した場合、SSH接続が切れるのでポートフォワーディングも解除される 以下のようにconfigの名前を指定してポートフォワーディングを行えば、configの内容で接続したり、多段接続したりもできる $ ssh -fNCL 0.0.0.0:80:localhost:80 refirio-dev $ ssh -fNCL 0.0.0.0:80:localhost:80 refirio-web1 ポートフォワーディングを終了させる場合、以下のようにする $ ps | grep ssh … SSHのプロセス番号を確認 9260 1 9260 9260 ? 197609 14:12:18 /usr/bin/ssh $ kill 9260 … SSHを終了 なお、コマンドプロンプトでポートフォワーディングを行った場合、以下で確認&終了できる >tasklist | findstr ssh … タスク一覧を確認 >taskkill /F /IM ssh.exe … SSHを終了 参考:SSH でファイアウォールを越える - いますぐ実践! Linuxシステム管理 / Vol.101 http://www.usupi.org/sysad/101.html 参考:ポートフォワーディングで80番ポートを解放せずにブラウジングする - はむはむエンジニアぶろぐ http://hamuhamu.hatenablog.jp/entry/2017/05/05/095509 参考:SSHポートフォワーディングを知った話 - Qiita https://qiita.com/Ayaka14/items/449e2236af4b8c2beb81 参考:SSH ポートフォワーディング http://www14.plala.or.jp/campus-note/vine_linux/server_ssh/ssh_portforwarding.html 参考:Windows でコマンドラインでプロセスを kill する - ablog http://d.hatena.ne.jp/yohei-a/20090911/1252644040 ■ConEmuで多段接続 Poderosaは多段接続に対応していないようなので、ConEmuを試した (PoderosaでもいったんローカルのSSHにアクセスするなどすれば、多段接続できると思われる。がアクセスが面倒) Git Bash なら多段接続できるが、Git Bash は画面の色設定をカスタマイズするのが大変そう ConEmuがよく紹介されているので試した 参考:Git Bashでディレクトリが見にくいので、カラー設定を変更する - みちしるべ http://orangeclover.hatenablog.com/entry/20120922/1348261855 参考:ConEmu 突っ込んだら Git for Windows の Git Bash がカッコよくなった - てっく煮ブログ http://tech.nitoyon.com/ja/blog/2014/03/07/fancy-git-bash/ https://conemu.github.io/ にアクセス 「Download」をクリック 「Download ConEmu Stable, Installer (32-bit, 64-bit)」からダウンロードし、インストール まずは画面の色を調整する。ConEmuを起動し、 View (pallets) → <Solarized (Luke Maciak)> とすれば「Solarized (Luke Maciak)」の色をプレビューできる。好みのものを探す Settings → Features → Colors 「Schemes」で起動時の色を設定する 次にConEmuで Git Bash を使えるようにする Settings → Startup → Tasks 「Predefined tasks」で「7 {Bash::Git bash}」を選択 「Hotkey」に「F1」を入力 下部のテキストエリアに以下を入力 "%ProgramFiles%\Git\bin\sh.exe" --login -i -new_console:d:C:\Users\refirio これでConEmuを起動してF1キーを押すと、Git Bash を使えるようになる 起動時に初めから Git Bash を使いたければ、 Settings → Startup で「Specified named task」で「{Bash::Git bash}」を選択する ConEmuの設定については、以下のページも参考になる おすすめのCUI環境〜GitBashとConEmu〜 - Qiita https://qiita.com/CyberMergina/items/69cd5890f05d502716c8 Windows その3 - ConEmuで快適なコンソール環境を・おすすめのコンソールエミュレーター - kledgeb https://kledgeb.blogspot.jp/2017/01/windows-3-conemu.html 以下、その他の設定メモ viなどからCtrl+Vでテキストを貼り付けると、複数行でも1行のテキストとして貼り付けられる 以下のように設定すると、複数行のまま貼り付けることができる Settings → keys & Macro → Paste 「Paste mode #2 (Ctrl+V)」で「Multi lines」にする ■SFTPで多段接続 FileZillaは多段接続に対応していないため、踏み台サーバがあると使えない C:\Users\refirio\.ssh\config の設定を使ったり、ポートフォワーディングでアクセスしようとしたが、接続できず 設定できなくは無さそうなので、引き続き要勉強 参考:ポートフォワードを使って踏み台先のサーバにFileZillaでファイル送受信する | ♪8thNote♪ http://blog.c-production.com/?p=1626 Windows環境の場合、WinSCPが標準で多段接続に対応しているので、これを使うのが定番になっているみたい 以下のようにすれば接続できたので、いったんWinSCPで対応 (最終的な接続先と踏み台の設定を逆にしないように注意) むしろ、コマンドやポートフォワーディングの知識が無い人でも使えるので、WinSCPを使う方がいいかもしれない 通常の接続: 「ログイン」ウインドウの「セッション」に、接続情報を設定する 鍵を使った接続: 「ログイン」ウインドウの「セッション」に、接続情報を設定する 鍵は「設定 → SSH → 認証 → 認証条件 → 秘密鍵」に設定する 多段接続での接続 「ログイン」ウインドウの「セッション」に、最終的な接続先(踏み台ではない)を設定する 鍵が必要なら「設定 → SSH → 認証 → 認証条件 → 秘密鍵」に設定する 踏み台サーバの情報は「設定 → 接続 → トンネル」に設定する
■サーバ同士でSSH接続
■通常の接続 「203.0.113.1」サーバに、「ec2-user」ユーザで、「10022」番ポートに接続 # ping 203.0.113.1 … 疎通確認 # ssh -p 10022 ec2-user@203.0.113.1 … 接続 ■鍵で接続 パブリックIPを持たないEC2インスタンへアクセスする場合など 「-i」に続けて秘密鍵を指定できる 秘密鍵を指定してアクセスする手順 秘密鍵はあらかじめ入手済みとする # sudo vi /home/ec2-user/.ssh/id_rsa … アクセス元のサーバで、秘密鍵をid_rsaに作成
-----BEGIN RSA PRIVATE KEY----- … 秘密鍵(xxx.pem)の内容を全てコピーして貼り付ける MIIEowIBAAKCAQEAryCYY8j+j5lQqBKJgdA3SLZWC7UJ9NeFkmypG4JJQwt3Gr9jG+rJY8vKUdx/ 〜略〜 yT0043TsaaS2Tx7KxqdFksrRW3IH0AKqXFKVcvdhuNbjVK5ps806PEaW/AZj5oIOfpto -----END RSA PRIVATE KEY-----
# sudo chmod 600 /home/ec2-user/.ssh/id_rsa … id_rsaのパーミッションを変更 # sudo chown ec2-user:ec2-user /home/ec2-user/.ssh/id_rsa … id_rsaの所有者を変更 # ssh -p 10022 -i /home/ec2-user/.ssh/id_rsa ec2-user@10.0.1.103 … SSH接続(対象のIPが「10.0.1.103」とする) もしくは、以下のように指定しても接続できる(要検証) # eval `ssh-agent` # ssh-add /home/ec2-user/.ssh/id_rsa # ssh -p 10022 ec2-user@10.0.1.103 参考:ssh-agentの使い方 - Qiita http://qiita.com/isaoshimizu/items/84ac5a0b1d42b9d355cf ■設定ファイルを利用して接続 設定ファイルに接続方法を書いておくことにより、簡単に接続できる 例えば踏み台サーバに以下の設定を記載しておくと、 「ssh web1」とすることでweb1サーバに、「ssh web2」とすることでweb2サーバに繋ぐことができる $ vi ~/.ssh/config
Host web1 Hostname 10.0.1.11 User ec2-user Port 10022 IdentityFile ~/.ssh/id_rsa IdentitiesOnly yes Host web2 Hostname 10.0.1.12 User ec2-user Port 10022 IdentityFile ~/.ssh/id_rsa IdentitiesOnly yes
■デバッグ オプション v を付けると、接続時のデバッグ情報が表示される # ssh -v -p 10022 ec2-user@203.0.113.1
■SSHの操作ログを記録
※未検証 ※SSH接続を開放する場合に有効そうだが、root権限も渡す場合は無力 参考:scriptとpsacctでオペレーションログを記録する http://dev.classmethod.jp/operation/logging_operation_using_script_and_psacct/ 参考:まずはここから!Linuxサーバでカジュアルに作業ログを取得する方法 http://qiita.com/keigodasu/items/3eebbc079274ad8dd2c2 参考:リモートログインしたユーザの操作ログ(script)を取得する http://qiita.com/hmukai/items/80bde86c5a9e4b3f8b97
■telnetでアクセスする
ネットワーク関連のデバッグなどに、telnetを使うと原因究明しやすいことがある (SSH登場前は、telnetを使ってリモートサーバにログインすることが一般的だった ただし現在はあくまでもデバッグ目的の利用とし、リモートサーバの操作はデータが暗号化されるSSHを使うことを推奨) telnetの基本的な使い方は、以下のページが詳しい 参考:WindowsのTelnetクライアントの使い方 http://www.atmarkit.co.jp/ait/articles/0207/06/news002.html Unixの場合ははじめからインストール済みになっているかもしれないが、 使えない場合は以下でインストールする # yum -y install telnet telnetコマンドで、接続先とポートを指定できる(ポートを指定しなければ、デフォルトの23番に接続する) $ telnet 153.121.33.84 22 Trying 153.121.33.84... ポートが空いていなければ、このまま何も反応がない。Ctrl+Cで終了する そのポートで何も待ち受けしていない場合、以下のように接続拒否のエラーになる telnet: connect to address 153.121.33.84: Connection refused 以下、接続の具体例 $ telnet 153.121.33.84 22 … SSHのポートに接続 Trying 153.121.33.84... SSH-2.0-OpenSSH_5.3 … ENTERを入力 Protocol mismatch. … プロトコルが異なるので操作はできない > quit … 接続終了 $ telnet refirio.net 80 … HTTPのポートに接続 Trying 153.121.33.84... Connected to 153.121.33.84. Escape character is '^]'. GET / HTTP/1.0 … コマンドを入力後、さらに改行を2回入力 HTTP/1.1 200 OK Date: Sat, 21 Oct 2017 07:44:19 GMT Server: Apache X-Powered-By: PHP/5.3.3 Set-Cookie: PHPSESSID=1g9vhqhjrg75q40ti2an6ceci4; path=/ Content-Length: 413 Connection: close Content-Type: text/html <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>refirio.net</title> <link rel="stylesheet" href="/css/common.css" /> <link rel="shortcut icon" href="/images/favicon.ico" type="image/x-icon" /> <script type="text/javascript" src="/js/analytics.js"></script> </head> <body> <h1>refirio.net</h1> <p>テストページ。</p> <address>Created by refirio.</address> </body> </html> Connection closed by foreign host. telnetでログインしてサーバを操作したい場合、あらかじめ対象サーバにtelnetサーバをインストールする必要がある ただしtelnetは通信が暗号化されないため、「一時的にSSHサーバを削除する」のような場合を除いて使わないことを推奨 SSHサーバー構築(OpenSSH) - CentOSで自宅サーバー構築 http://centossrv.com/openssh.shtml
■パケットキャプチャを行う
# tcpdump -nli eth0 port 80 … 80番ポートへの通信を監視 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes … いったんこの状態で監視中になる 19:51:41.603374 IP 202.229.34.200.61910 > 153.121.33.84.http: Flags [S], seq 994394370, win 8192, options [mss 1414,nop,wscale 8,nop,nop,sackOK], length 0 19:51:41.603475 IP 153.121.33.84.http > 202.229.34.200.61910: Flags [S.], seq 3988310290, ack 994394371, win 14600, options [mss 1460,nop,nop,sackOK,nop,wscale 6], length 0 19:51:41 に 202.229.34.200 から 153.121.33.84 に対してhttpリクエストがあったことが判る # tcpdump -X -i eth0 -n port 80 … 80番ポートへの通信内容を監視(16進数とASCII文字で表示) tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes … いったんこの状態で監視中になる 19:57:03.458221 IP 202.229.34.200.62029 > 153.121.33.84.http: Flags [S], seq 1535838550, win 8192, options [mss 1414,nop,wscale 8,nop,nop,sackOK], length 0 0x0000: 4500 0034 7893 4000 7506 e4b5 cae5 22c8 E..4x.@.u.....". 0x0010: 9979 2154 f24d 0050 5b8b 0956 0000 0000 .y!T.M.P[..V.... 0x0020: 8002 2000 4f44 0000 0204 0586 0103 0308 ....OD.......... 0x0030: 0101 0402 .... 19:57:03.458313 IP 153.121.33.84.http > 202.229.34.200.62029: Flags [S.], seq 4017208096, ack 1535838551, win 14600, options [mss 1460,nop,nop,sackOK,nop,wscale 6], length 0 0x0000: 4500 0034 0000 4000 4006 9249 9979 2154 E..4..@.@..I.y!T 0x0010: cae5 22c8 0050 f24d ef71 bb20 5b8b 0957 .."..P.M.q..[..W 0x0020: 8012 3908 8b6c 0000 0204 05b4 0101 0402 ..9..l.......... 0x0030: 0103 0306 .... 19:57:03.458763 IP 202.229.34.200.62031 > 153.121.33.84.http: Flags [S], seq 928033904, win 8192, options [mss 1414,nop,wscale 8,nop,nop,sackOK], length 0 0x0000: 4500 0034 7895 4000 7506 e4b3 cae5 22c8 E..4x.@.u.....". 0x0010: 9979 2154 f24f 0050 3750 ac70 0000 0000 .y!T.O.P7P.p.... 0x0020: 8002 2000 d062 0000 0204 0586 0103 0308 .....b.......... 0x0030: 0101 0402 .... 19:57:03.458788 IP 153.121.33.84.http > 202.229.34.200.62031: Flags [S.], seq 3101697651, ack 928033905, win 14600, options [mss 1460,nop,nop,sackOK,nop,wscale 6], length 0 0x0000: 4500 0034 0000 4000 4006 9249 9979 2154 E..4..@.@..I.y!T 0x0010: cae5 22c8 0050 f24f b8e0 2673 3750 ac71 .."..P.O..&s7P.q 0x0020: 8012 3908 d7c9 0000 0204 05b4 0101 0402 ..9............. 0x0030: 0103 0306 .... 19:57:03.458916 IP 202.229.34.200.62032 > 153.121.33.84.http: Flags [S], seq 4220921428, win 8192, options [mss 1414,nop,wscale 8,nop,nop,sackOK], length 0 0x0000: 4500 0034 7896 4000 7506 e4b2 cae5 22c8 E..4x.@.u.....". 0x0010: 9979 2154 f250 0050 fb96 2654 0000 0000 .y!T.P.P..&T.... 0x0020: 8002 2000 9237 0000 0204 0586 0103 0308 .....7.......... 0x0030: 0101 0402 .... 19:57:03.458927 IP 153.121.33.84.http > 202.229.34.200.62032: Flags [S.], seq 1978207803, ack 4220921429, win 14600, options [mss 1460,nop,nop,sackOK,nop,wscale 6], length 0 0x0000: 4500 0034 0000 4000 4006 9249 9979 2154 E..4..@.@..I.y!T 0x0010: cae5 22c8 0050 f250 75e9 0e3b fb96 2655 .."..P.Pu..;..&U 0x0020: 8012 3908 f4cd 0000 0204 05b4 0101 0402 ..9............. 0x0030: 0103 0306 .... 19:57:03.470209 IP 202.229.34.200.62030 > 153.121.33.84.http: Flags [S], seq 4289352827, win 8192, options [mss 1414,nop,wscale 8,nop,nop,sackOK], length 0 0x0000: 4500 0034 7894 4000 7506 e4b4 cae5 22c8 E..4x.@.u.....". 0x0010: 9979 2154 f24e 0050 ffaa 547b 0000 0000 .y!T.N.P..T{.... 0x0020: 8002 2000 5ffe 0000 0204 0586 0103 0308 ...._........... 0x0030: 0101 0402 .... 19:57:03.470244 IP 153.121.33.84.http > 202.229.34.200.62030: Flags [S.], seq 3159110353, ack 4289352828, win 14600, options [mss 1460,nop,nop,sackOK,nop,wscale 6], length 0 0x0000: 4500 0034 0000 4000 4006 9249 9979 2154 E..4..@.@..I.y!T 0x0010: cae5 22c8 0050 f24e bc4c 32d1 ffaa 547c .."..P.N.L2...T| 0x0020: 8012 3908 579b 0000 0204 05b4 0101 0402 ..9.W........... 0x0030: 0103 0306 .... 19:57:03.497385 IP 202.229.34.200.62029 > 153.121.33.84.http: Flags [.], ack 1, win 64, length 0 0x0000: 4500 0028 7897 4000 7506 e4bd cae5 22c8 E..(x.@.u.....". 0x0010: 9979 2154 f24d 0050 5b8b 0957 ef71 bb21 .y!T.M.P[..W.q.! 0x0020: 5010 0040 0506 0000 P..@.... 19:57:03.497746 IP 202.229.34.200.62029 > 153.121.33.84.http: Flags [P.], seq 1:623, ack 1, win 64, length 622 0x0000: 4500 0296 7898 4000 7506 e24e cae5 22c8 E...x.@.u..N..". 0x0010: 9979 2154 f24d 0050 5b8b 0957 ef71 bb21 .y!T.M.P[..W.q.! 0x0020: 5018 0040 e614 0000 4745 5420 2f20 4854 P..@....GET./.HT 0x0030: 5450 2f31 2e31 0d0a 486f 7374 3a20 7265 TP/1.1..Host:.re 0x0040: 6669 7269 6f2e 6e65 740d 0a43 6f6e 6e65 firio.net..Conne 0x0050: 6374 696f 6e3a 206b 6565 702d 616c 6976 ction:.keep-aliv 0x0060: 650d 0a43 6163 6865 2d43 6f6e 7472 6f6c e..Cache-Control 0x0070: 3a20 6d61 782d 6167 653d 300d 0a41 6363 :.max-age=0..Acc 0x0080: 6570 743a 2074 6578 742f 6874 6d6c 2c61 ept:.text/html,a 0x0090: 7070 6c69 6361 7469 6f6e 2f78 6874 6d6c pplication/xhtml 0x00a0: 2b78 6d6c 2c61 7070 6c69 6361 7469 6f6e +xml,application 0x00b0: 2f78 6d6c 3b71 3d30 2e39 2c69 6d61 6765 /xml;q=0.9,image 0x00c0: 2f77 6562 702c 2a2f 2a3b 713d 302e 380d /webp,*/*;q=0.8. 0x00d0: 0a55 7067 7261 6465 2d49 6e73 6563 7572 .Upgrade-Insecur 0x00e0: 652d 5265 7175 6573 7473 3a20 310d 0a55 e-Requests:.1..U 0x00f0: 7365 722d 4167 656e 743a 204d 6f7a 696c ser-Agent:.Mozil 0x0100: 6c61 2f35 2e30 2028 5769 6e64 6f77 7320 la/5.0.(Windows. 0x0110: 4e54 2031 302e 303b 2057 4f57 3634 2920 NT.10.0;.WOW64). 0x0120: 4170 706c 6557 6562 4b69 742f 3533 372e AppleWebKit/537. 0x0130: 3336 2028 4b48 544d 4c2c 206c 696b 6520 36.(KHTML,.like. 0x0140: 4765 636b 6f29 2043 6872 6f6d 652f 3530 Gecko).Chrome/50
■ネットワークを確認
$ ping -c 5 192.168.0.1 … ネットワークの疎通を5回確認 $ traceroute 192.168.0.1 … 通信の経路を確認 $ curl 192.168.0.1 … HTTPリクエストで確認 $ host 153.121.33.84 … ホスト名を問い合わせ $ host refirio.net … IPアドレスを問い合わせ $ ifconfig … ネットワークの設定を確認 $ netstat … 現在確立されている接続の一覧を表示 $ netstat -a … すべての情報を表示(不要なサービスが動いていないか確認) $ netstat -an … 出力をIPアドレスなど数値のみに抑制する $ netstat -an | grep 80 … 80番ポートへの接続を表示 $ netstat -s … プロトコル別に統計情報を表示 $ nslookup … DNSサーバへ問い合わせ $ nslookup 192.168.0.1 … 192.168.0.1 の情報を表示 $ nslookup example.com … example.com の情報を表示 $ nslookup -q=A example.com … ホスト名をアドレスに変換する $ nslookup -q=PTR 192.168.0.1 … アドレスをホスト名に変換する $ nslookup -q=SOA example.com … ゾーンに関する様々な情報を表示 $ service network restart … ネットワークサービスの再起動 ※ifconfigやnetstatなどは今は非推奨になっている 参考:非推奨になったLinuxネットワークコマンドの代替コマンド http://understeer.hatenablog.com/entry/2012/03/24/184346 参考:自分のIPアドレスを知る方法 http://qiita.com/sharow/items/66d89136180884a2f7b7 参考:グローバルIPをcurlで確認 http://qiita.com/kanpou_/items/734b947f5a95109e7bb9 $ whois refirio.jp … ドメインのwhois情報を確認 whoisコマンドが見つからない(CentOSなど)場合、以下のようにすればインストールできる # yum install jwhois
■ネットワークの設定を確認
# cat /etc/sysconfig/network … ネットワーク設定ファイルを確認 NETWORKING=yes #HOSTNAME=localhost.localdomain HOSTNAME=refirio.net NETWORKING_IPV6="yes" IPV6_DEFAULTDEV="eth0" IPV6_DEFAULTGW="fe80::1" # cat /etc/sysconfig/network-scripts/ifcfg-eth0 … ネットワークインターフェース(eth0)の設定ファイルを確認 DEVICE="eth0" IPADDR="153.121.33.84" NETMASK="255.255.254.0" GATEWAY="153.121.32.1" ONBOOT="yes" TYPE="Ethernet" IPV6INIT="yes" IPV6_ROUTER="no" IPV6ADDR="2001:e42:102:1102:153:121:33:84/64" # cat /etc/resolv.conf … 名前解決をする際に利用するDNSサーバの設定を確認 options single-request-reopen nameserver 210.188.224.10 nameserver 210.188.224.11 nameserver 2001:e42::1 nameserver 2001:e42::2 search sakura.ne.jp # cat /etc/hosts … DNSサーバを利用しない、ローカルでの名前解決を行う際の設定を確認 #127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 127.0.0.1 localhost refirio.net localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
■メールを送信する際、バウンスメールの受け取りアドレスを設定する
PHPの場合、mb_send_mail() の第5引数で指定できる
<?php mb_language('Japanese'); mb_internal_encoding('UTF-8'); // メールを送信 if (mb_send_mail( 'example@example.com', 'テストメール', 'バウンスメールのテスト。' . "\n" . 'これはテストです。', 'From: auto@refirio.net', '-f auto@refirio.net' // バウンスメールの受け取りアドレス(Return-Path) )) { echo 'OK'; } else { echo 'NG'; }
■メールを送信する際、迷惑メール扱いされないための設定
Aレコード、SPFレコード、TXTレコードの設定などを行う aws.txt の同名の項目を参照
■メールを送信する際、ハードバウンスが発生しないようにする
参考:メールアドレスをリアルタイムに検証してハードバウンスをなくす方法 https://sendgrid.kke.co.jp/blog/?p=7837 参考:バウンス理由の一覧 http://libsisimai.org/ja/reason/