たまごかける日報

ここにAA貼りたい

spfレコード覚え書き

社内のサービスでメール配信したいからspfレコード書きたいんだけどという相談が来た。
そういう話は2回目だったのにあんまり覚えてなかったので、もう忘れないようにメモ

spfって?

このドメインのメールはこのMTAから送られてますよっていうのを明示的に示して、ここからのメールは大丈夫ですよという保証をしてあげる。送信元偽装対策とかかな。
このSPFをどう扱うかは、メールを受け取る側次第。

実例から見ていく

gmailとかどうしてんの?
hogehoge@gmail.comとかのメールアドレスだから、
gmail.comについてspfを調べていく。

$ dig gmail.com txt

;; ANSWER SECTION:
gmail.com.		300	IN	TXT	"v=spf1 redirect=_spf.google.com"

gmailでは_spf.google.comのspfを使いますよってのを、redirectで指定してるみたい。
じゃ、_spf.google.comはどうなってんのか。

$ dig _spf.google.com txt

;; ANSWER SECTION:
_spf.google.com.	300	IN	TXT	"v=spf1 include:_netblocks.google.com include:_netblocks2.google.com include:_netblocks3.google.com -all"

いろんなドメインのspfの設定をincludeしてるね。

includeしてる一つを見てみよう。

$ dig _netblocks.google.com txt

;; ANSWER SECTION:
_netblocks.google.com.	3600	IN	TXT	"v=spf1 ip4:216.239.32.0/19 ip4:64.233.160.0/19 ip4:66.249.80.0/20 ip4:72.14.192.0/18 ip4:209.85.128.0/17 ip4:66.102.0.0/20 ip4:74.125.0.0/16 ip4:64.18.0.0/20 ip4:207.126.144.0/20 ip4:173.194.0.0/16 -all"

ようやくそれっぽい記述が出てきた。

説明していく。

v=spf1の部分

v=spf1ってのはSPFで定義されているSPFレコードを使いますよって宣言。
Sender IDSPFレコードを使いたいなら

hogehoge.com. IN TXT	"spf2.0/pra hogehoge -all"

みたいに書いていく。

ip4:216.239.32.0/19 -allの部分

見たらなんとなくわかるけど、ここのレンジから送られてますよっていう記述。
allってのは、ここからが全てという意味。
IP以外にも

hogehoge.com. IN TXT "v=spf1 a:mx.hogehgoe.com -all" <-Aレコード指定
hogehoge.com. IN TXT "v=spf1 mx -all" <-hogehoge.comのMXレコード指定

みたいな指定が出来るんすなー

ちななみに、なんかgmail.comのspfはいっぱいincludeしてんなーってのは、そもそもTXTレコードが255文字までしか記入できないから。

まとめ

なんか分かりにくい気がする。
ブログ力的な問題

ちなみに
http://www.sendmail.co.jp/sa/spfcheck.html
ここからspfのチェックが出来るよ。
送信アドレスと、MTAを入れてみてspfの記述と一致してるか調べてみてね。

今回の記事で言うと、
gmail.comのメールアドレスに対して
216.239.32.100のメール送信サーバーで通るよ。


実際にブログを書くために色々と調べていこうとしたのだが、
wikiのページがまとまり過ぎててブログとか今更書く必要ね~じゃん、となった。
http://ja.wikipedia.org/wiki/Sender_Policy_Framework

chef-solo使おうの巻

うふふ、ぽよぽよ

社内でNagiosの構築手順書くことになったから、
なんとなくchef-soloでやったらカッコイイんじゃないかと思ってchef-soloの勉強してみる。

chef-solo入れてみて

ここから使ってるOSとか選んでぽちぽちと
http://www.opscode.com/chef/install/
僕の場合使っているのがCentOS 6.3だったので、それで


最終的に自分のgitからcookbook持ってきてchef-solo動かすだけってのを実現したいから
gitもいれておこうね。

$ sudo su -
# curl -L http://www.opscode.com/chef/install.sh | bash
# yum install git -y
# git clone git://github.com/opscode/chef-repo.git


今回は自分でレシピと設定を書いてみる。
取ってきたchefリポジトリのひな形にmemcachedを入れるレシピを書くよ!

設定書くよ

# vim ./chef-repo/solo.rb 
file_cache_path "/tmp/chef-solo"
cookbook_path "/root/chef-repo/cookbooks"

# vim chef-repo/test-memcached.json 

 {
  "run_list": [
     "recipe[test_mem::default]"
  ]
}

れしぴ書くよ

# knife cookbook create test_mem -o cookbooks
# vim chef-repo/cookbooks/test_mem/recipes/default.rb 

package "memcached" do
  action :install
end

あら簡単

chef-solo動かすよ

[root@dev ~]# chef-solo -c chef-repo/solo.rb -j chef-repo/test-memcached.json 
Starting Chef Client, version 11.4.4
Compiling Cookbooks...
Converging 1 resources
Recipe: test_mem::default
  * package[memcached] action install
    - install version 1.4.4-3.el6 of package memcached

Chef Client finished, 1 resources updated


動いた!
これで準備は大丈夫、Nagios用のレシピ書いてくよー

失敗履歴・その1/レプリ貼れない><

僕の失敗が人に役立てばいいなと思って、
Evernoteに溜め込んでる恥ずかしい失敗履歴を外に出していくことにした

レプリが貼れない

開発環境で、
MySQLマスター1台で動いていたものにSlave2台追加しようとしたというお話。

順番としては

  • Masterでbin-log出るようにする
  • Master再起動
  • ポジション確認
  • 更新かかってないので、ボゴーンと/var/lib/mysqlをslaveに渡す
  • slaveで配置して、CHANGE MASTERしてstart slave

のはずが・・・・

mysql>show slave status¥G
Last_IO_Errno: 1236
                Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'Could not find first log file name in binary log index file'

なんじゃこりゃ、見たこと無いぞよ。

binlog、何処ーってこと?


master側で確認してみる

[root@dbm01 mysql]# cat mysql-bin.index
./mysql-bin.000037

んー、ちゃんと指定してるし
実際のファイルもあるなー

ポジションが違うんかな?
もっかい確認してみるか

mysql> show master status;

お、応答がない・・・・^^;

んー、binlog書きだしてみるか

[root@dbm01 mysql]# mysqlbinlog mysql-bin.000037 > test.txt
ERROR: Error in Log_event::read_log_event(): 'read error', data_len: 640, event_type: 24

こ、こんなエラー見たこと無い( /// )

binlog開けへん
binlog死んでしもたん?


mysqlのerrlogを見てみる

[root@dbm01 mysql]# less dbm01.err  
130528 21:18:13 [ERROR] /usr/sbin/mysqld: Disk is full writing './mysql-bin.000037' (Errcode: 28). Waiting for someone to free space... (Expect up to 60 secs delay for server to continue after freeing disk space) 


Disk Full wwwwwwwwwwww

そういえば、/var/lib/mysqlの容量がデカかったから一旦tarに固めてから転送したんだった。
tarで固めたのを消して、生のデータを送り直して

mysql> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000037 |   496277 |              |                  |
+------------------+----------+--------------+------------------+

これで、
CHANGE MASTER したら通った

やった!
binlog壊したった!っておもったらすんごくしょうもない結末でした

まとめ

初歩中の初歩じゃないですか

MySQLバックアップ環境への道のり:1

AWSで作ったインスタンスに急にSSH出来なくなった


telnetしてみると

ssh: connect to host hogehoge port 22: Connection refused

ポートが開いていない。

Security Groupsを確認してももちろんSSHは許可してるし・・・・
なんでや・・・・
stop/start
Security Groupsの作り直しをしても駄目。
もうお手上げ┐(´∀`)┌ヤレヤレ

色々調べてみると、
EC2はGet System Logで起動時のログが見れるっぽい。
そこで怪しいLogを見つけた

Starting sshd: Missing privilege separation directory: /var/empty/sshd
[FAILED]

あやしい・・・・

結局なんだったのか

バックアップ環境を作る過程で、/var/lib/mysql/DBのスナップショットが欲しくて
物理ディスクを追加して、LVMとして/var配下にマウントしたんですよね

で、僕凄くお馬鹿なので /etc/fstab を編集せずに
「AWSは長時間インスタンス起動してるとお金かかるからshutdownしよ( ー`дー´)キリッ」
※(無料枠でインスタンスを作成しています)
インスタンスをstopしてしまったんですね^ω^

なので、今現在/varディレクトリはマウントされておらず
sshdの起動でコケると・・・・

一日の作業がぱーでんねん

muninでtomcatの値が取れてなかった

なんで気付いたのって話

みたまんまmuninで値取れてへんねん
実際にサーバーに入って監視で実行してるコマンド打ってみた

[root@kakeru-kaeru01 wget http://munin:munimuni@127.0.0.1:8080/manager/status?XML=true
--2013-05-07 16:23:52--  http://munin:*password*@127.0.0.1:8080/manager/status?XML=true
127.0.0.1:8080 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 405 Method Not Allowed
2013-05-07 16:23:53 エラー 405: Method Not Allowed。

405エラー・・・?

[root@kakeru-kaeru01 ~]# curl http://munin:munimuni@127.0.0.1:8080/manager/status?XML=true
??}
   hiɜ??}    ????.????.??ccj%??yum    ??֣+????%1??
?໥???01?mيI&???{?"???@?u??R??ن:?g?Ʈ
   ?T=??m]???????T+4?Q?'?&5]??C?A?oJ?VJ???k?
                                            ??_???]CR??0?0??o??[?MԘL?p????ؔ?Ȯe???\???P????3?2?8??y?    ?e?N?$M?w}E?s?d?$?\C>:V;ï????????ڸi?dO?_???dl,`?t??)????]D;2WIpax??z???[Yh?mZ%X????&???_U

ど、どこの国に迷い込んだの・・・?

tomcatのログは?

2013-5-07 20:20:28 
[http-bio-8080-exec-1] ERROR j.a.u.api.ExceptionHandlerController:132 - 
    No matching handler method found for servlet request: 
        path '/manager/status', method 'GET', parameters map['XML' -> array<String>['true']]

それっぽいのが出てる。

tomcat manager動いてへんの違う?

[root@kakeru-kaeru01 webapps]# ll
合計 4
drwxr-xr-x 4 tomcat tomcat 4096  5月  7 12:01 2013 ROOT

なんもあらへんやん・・・

詳しく聞いていくと、アプリの方が
「managerのディレクトリまんま消しちゃった(・ω<)☆」
とのことだったので、

[root@kakeru-kaeru01 webapps]# cp -iRp ../webapps.default_bak/manager ./

ばっくあっぷからまんま持ってきた

[root@kakeru-kaeru01 ~]# /etc/munin/plugins/tomcat_access 
accesses.value 305

わーい(∩´∀`)∩ワーイ