Parallelsshを使ってsshコマンドを多ホストで実行
install (MacOS)
$ brew install pssh
ホストリストを作成 (host.list)
user@host1.test user@host2.test user@host3.test:12345 …
実行
$ pssh -h /tmp/ssh.list "hostname" [1] 14:49:28 [SUCCESS] user@host1.test [2] 14:49:28 [SUCCESS] user@host2.test [3] 14:49:28 [SUCCESS] user@host3.test:12345
iオプションで実行結果を表示できる
$ pssh -h /tmp/ssh.list -i "hostname" [1] 14:48:28 [SUCCESS] user@host1.test host1.test [2] 14:48:28 [SUCCESS] user@host2.test host2.test [3] 14:48:28 [SUCCESS] user@host3.test:12345 user@host3.test
sudoをしようとするとttyが無いと怒られるので、必要であればssh先のsudoersを書き換える
IPv6が有効なホストからSOCKS経由でGoogleに繋ごうとすると失敗する
さくらVPSを2台契約しておりまして、
hostB$ ssh -D 1080 username@hostA
という感じで片方のホストをSOCKSサーバーにして、もう片方のホストからSOCKS経由で外に行く、なんて事をやっていました。
しかし、特定のホストだけ接続できない。
例えば以下のようになります。
hostB$ curl --socks5 localhost:1080 "http://www.google.com/" curl: (6) Failed to resolve "www.google.com" for SOCKS5 connect.
勿論SOCKSを経由しなければ
hostA$ curl "http://www.google.com/" <HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8"> <TITLE>302 Moved</TITLE></HEAD><BODY> <H1>302 Moved</H1> The document has moved <A HREF="http://www.google.co.jp/?gfe_rd=cr&ei=XggRVIyJMcGF4AK10YGgBw">here</A>. </BODY></HTML>
hostB$ curl "http://www.google.com/" <HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8"> <TITLE>302 Moved</TITLE></HEAD><BODY> <H1>302 Moved</H1> The document has moved <A HREF="http://www.google.co.jp/?gfe_rd=cr&ei=XggRVIyJMcGF4AK10YGgBw">here</A>. </BODY></HTML>
これ、相当ハマったのですが、以下のようにしたら動きました。
hostB$ curl --socks5 localhost:1080 --ipv4 "http://www.google.com/" <HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8"> <TITLE>302 Moved</TITLE></HEAD><BODY> <H1>302 Moved</H1> The document has moved <A HREF="http://www.google.co.jp/?gfe_rd=cr&ei=XggRVIyJMcGF4AK10YGgBw">here</A>. </BODY></HTML>
そうです、IPv6が問題だったのです。
curlのオプションで、IPv4の使用を強制したら繋がりました。
つながらないホストは、IPv6に対応しているホストでした。
しかし謎なのは、現行のさくらVPSは標準でIPv6に対応しており、2台とも問題なくIPv6通信ができます。
あまり深追いはしていないのですが、OpenSSHのDynamicForwardがIPv6に対応していない?
さて、実際はPHPのcurlからIPv6対応ホストにSOCKS経由で接続できなくて困っていたので、
場当たり的にPHPのcurlもIPv4固定で動作させる事により回避したいと思います。
curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4 );
ちなみにこれ、最初は別のホストで動いていたものを新しいVPSに移行したら動かなくなり調べていたのですが、
移行元ホストは古いさくらVPSのインスタンスで、IPv6が無効の状態となっていました。
そのため強制的にIPv4が使われていたため動いていたようです。
時間のあるときにOpenSSHのDynamicForwardとIPv6の関係を調べよう。。
参考
http://www.businesscorner.co.uk/disable-ipv6-in-curl-and-php/
mod_evasiveのアラートメール件名(Subject)の設定
DoSアタックに遭いました。
幸いApacheBench使って単一のホストから打ってきてるだけだったので、iptablesで特定IPをフィルタすることで対応しました。
しかし、こんな幼稚な手法でもIP変えられたら同じ轍を踏む事になりますので、気休め程度にApacheのDoS対策モジュールを入れてみました。
インストールは以下を参考にさせて頂きました
http://ijo.cc/it/ja/server/apache_mod_evasive/
さて、このモジュールは攻撃を食らった時(モジュールがお仕事した時)にアラートメールを送信する機能があります。
そのメールの件名を設定するには、ソースファイルを直接編集してコンパイルすると説明しているサイトがいくつかありましたが、そこまでしなくてもhttpd.confの設定だけで件名を設定できたのでメモしておきます。
DOSEmailNotifyの引数がそのまま /bin/mail の引数になっているようでしたので
<IfModule mod_evasive20.c> DOSBlockingPeriod 3600 DOSLogDir "/var/log/httpd_mod_evasive" DOSEmailNotify "-s 'DoS Attack Alert' mail@address.test" </IfModule>
こんな感じで行けました!
LINE詐欺が来た!手口の全てを暴く
今話題のLINE詐欺、ついに俺のところにも来ました。
手口の一部始終を公開したいとおもいます。
とりあえず滅多にLINEなど来ないひとからいきなり以下のメッセージが。
「何してますか?忙しいですか?手伝ってもらってもいいですか?」
「近くのコンビニエンスストアでweb money の プリペイドカードを買うのを手伝ってもらえますか?」
LINEで詐欺が流行ってるのはtwitterで知っていましたが、具体的な手口までは知らなかったし、何より送ってきてる人が登録している知人の名前だったため、流石に怪しいとは思ったけどこの時点では3割くらいは本人の可能性もあるかなと思っていました。
とりあえず本人確認のため、その人の個人的な趣味の事について聞こうとするも、完全スルー。
この時点で本人の可能性は0になりました。
ので、おちょくりモードに移行。
こんなかんじでのらりくらりとかわされる。
色々聴きだしてみる。明らかに日本人ではないね。
買ったように見せかけ、画像をURLで出す。
ちなみにこのURLを開くと出てくる画像は即興で作ったコレ。
そんなわけで見事にひっかかりました。
奴らのIPがバッチリ。
175.44.216.29 - - [28/Jun/2014:18:05:16 +0900] "GET /webmoney.jpg HTTP/1.1" 200 44935 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET4.0C; .NET4.0E)" 175.44.216.29 - - [28/Jun/2014:18:06:17 +0900] "GET /webmoney.jpg HTTP/1.1" 304 - "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET4.0C; .NET4.0E)" 175.44.216.29 - - [28/Jun/2014:18:12:30 +0900] "GET /webmoney.jpg HTTP/1.1" 304 - "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET4.0C; .NET4.0E)"
WindowsXPにIE6wwww
IPを調べて見ると案の定中国。
見せる画像日本語じゃなくて中国語にしとけばよかった。
ちなみに別経路で本人に連絡をとってみたのですが、アカウントを乗っ取られて自分ではログインできず、パスワードも変更できない状況との事でした。
実際この手口は既にかなりやられているようで、他サイトで同じID/PWを使いまわしている人が狙われてるとか。
これでWebMoney渡しちゃうような人はそうそう居ないとは思いますが、そもそもアカウントを乗っ取られないように各自対策は必要ですね。
mac/linuxでのtsocksの挙動の違いについて
諸事情で、Linux上で動くPHPのプログラムを、
tsocksを使ってSOCKS経由で通信させようとしていたが、
結果的に動かなかったという話。
環境としてはCentOS6にEPELで入れたtsocks、
ssh -Dで他ホストに接続し、通信をそちらに流そうとした。
が、成功するケースと失敗するケースがあった。
■成功
$ tsocks telnet hogehoge.com 80 $ tsocks wget -O - http://hogehoge.com/ $ tsocks ftp hogehoge.com
■失敗
$ tsocks curl -s http://hogehoge.com/ PHP上からのfile_get_contents(), curl_exec, Net_FTPからのファイル転送
勿論、tsockを使わずにcurlのオプションにSOCKSサーバーを設定した場合は成功する
(コマンドライン実行、PHPからの実行問わず)
不思議なことに、これらは全てmac上で行えばすべて成功する。
OSや各種ライブラリの実装の違いなのだろうか
これ以上追うと深みに嵌りそうなのだけどどうするかな。。。
追記
最終的に諦めました
まずtsocksの仕組みとして、
DynamicLoadしているライブラリより先にlibtsocks.soをロードすることにより、
connect()関数等を上書き(フック)する事により実現しています。
そのための仕組として、LinuxではLD_PRELOADという環境変数を使って
指定していますが、MacOSでは仕組みが異なり、
DYLD_INSERT_LIBRARIES環境変数で指定しています。
このあたりの実装の違いで挙動の違いが起きている気がしています。
http://curl.haxx.se/mail/lib-2010-01/0263.html
http://sourceforge.net/p/tsocks/bugs/23/
この辺りを見ると、curlはnon-blocking socketを使っているから動かないんじゃないか
みたいな事を書いてると思いますが、実際のところは不明かつMacOSでは動いてるし…。
因みにcurl自体、SOCKSへ接続する機能があるのはわかっているのですが、
どちらかというとphpからのFTPをSOCKS経由にするのが目的で、
両方共動かなかったので、なにか共通の問題があるのではないかとcurlをメインで追っていました。
いずれにせよtsocks自体2002年のリリース以降なにもメンテされていないような代物なので、
これ以上調べても無駄と判断して諦めました。
大人しくsquidあたりを使う方法を考えようと思います。。。
さくらのレンタルサーバー スタンダードプランについて調べてみた
さくらのレンタルサーバー スタンダードというプランを借りてみました。
容量は100GBで月額515円と、かなりお安くなっています。さくらVPSには散々お世話になっているのですが、こちらのほうは初めてです。
このサービスではSSHを繋ぐことができますので、せっかくなので中身がどんな感じか探ってみました。
% uname -a FreeBSD wwwXXX.sakura.ne.jp 9.1-RELEASE-p11 FreeBSD 9.1-RELEASE-p11 #0: Wed Apr 9 21:20:36 JST 2014 root@wwwXXXsub.sakura.ne.jp:/usr/obj/usr/src/sys/SAKURA17 amd64
FreeBSDとな。ふむ。
次はdmesg関係をチェック。
% cat /var/run/dmesg.boot … CPU: Intel Xeon E312xx (Sandy Bridge) (2600.13-MHz K8-class CPU) Origin = "GenuineIntel" Id = 0x206a1 Family = 6 Model = 2a Stepping = 1 Features=0xf8bf3ff<FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,MTRR,PGE,MCA,CMOV,PAT,PSE36,CLFLUSH,MMX,FXSR,SSE,SSE2,SS> Features2=0xffba2203<SSE3,PCLMULQDQ,SSSE3,CX16,PCID,SSE4.1,SSE4.2,x2APIC,POPCNT,TSCDLT,AESNI,XSAVE,OSXSAVE,AVX,F16C,RDRAND,HV> AMD Features=0x20100800<SYSCALL,NX,LM> AMD Features2=0x1<LAHF> TSC: P-state invariant real memory = 19327352832 (18432 MB) avail memory = 18604638208 (17742 MB) Event timer "LAPIC" quality 400 ACPI APIC Table: <BOCHS BXPCAPIC> FreeBSD/SMP: Multiprocessor System Detected: 3 CPUs FreeBSD/SMP: 3 package(s) x 1 core(s) cpu0 (BSP): APIC ID: 0 cpu1 (AP): APIC ID: 1 cpu2 (AP): APIC ID: 2
CPUはSandy Bridge世代のエントリークラスですね。
メモリは18Gとかなり大盛り。某激安レン鯖とはやはり違います。
ただコア数が3個…?
virtio_pci0: <VirtIO PCI Network adapter> port 0xc040-0xc05f mem 0xf2020000-0xf2020fff irq 11 at device 3.0 on pci0 vtnet0: <VirtIO Networking Adapter> on virtio_pci0 virtio_pci0: host features: 0x711fffe3 <EventIdx,RingIndirect,NotifyOnEmpty,RxModeExtra,VLanFilter,RxMode,ControlVq,Status,MrgRxBuf,TxUFO,TxTSOECN,TxTSOv6,TxTSOv4,RxUFO,RxECN,RxTSOv6,RxTSOv4,TxAllGSO,MacAddress,RxChecksum,TxChecksum> virtio_pci0: negotiated features: 0x110f8020 <RingIndirect,NotifyOnEmpty,VLanFilter,RxMode,ControlVq,Status,MrgRxBuf,MacAddress> …
という事で、どうやらOSは仮想環境上のようです。
% uptime 9:30PM up 28 days, 19:18, 1 user, load averages: 0.31, 0.38, 0.44
ロードアベレージかなり低い!
某激安レン鯖とはやっぱりちが(ry
% df -h Filesystem Size Used Avail Capacity Mounted on /dev/vtbd0p2 2G 161M 1.6G 9% / devfs 1.0k 1.0k 0B 100% /dev /dev/vtbd0p4 3.9G 1.9G 1.7G 54% /usr /dev/vtbd0p5 19G 794M 17G 4% /var /dev/vtbd1 2T 126G 1.7T 7% /home
ユーザー領域として2TBのストレージが接続されているようです。
% ls -al /home | wc 149 1334 10661
管理用のディレクトリなどもあるようですが、約150ユーザーが収容されていました。全員同じプランかはわかりませんが、仮に全員スタンダードだとすると150人 x 100GB = 15TB必要なはずですが、ストレージは2TB。
フレキシブルに容量を増やせるようになっているのか、全員容量いっぱいまでは使わないだろうという想定なのか。
% quota Disk quotas for user XXXXX (uid XXXX): Filesystem usage quota limit grace files quota limit grace /home 83952 104857600 104857600 5374 3000000 3000000
ユーザーごとのquota設定。
inodeのリミット(最大ファイル数)が300万なので、単純計算で1ファイルあたり35kB以下のファイルをいっぱい作ると容量よりinodeの限界のほうが先に来ることになりますね。
全体として、月額500円前後という金額を考えたらかなりハイスペックな内容と言えるのではないでしょうか。
見かけ上のスペックだけではなく、一応インフラエンジニアをやっていた私から見ても、サーバー構成に安心感があるなと思いました。
さくらVPSは100GBで1000円と、価格面からみると2倍の価格となります。
もちろんサーバーを自由に使えるメリットはあるのですが、単純にサイトを作る場合などにはこちらのが良さそうですね。
お約束ですが、こちらの内容は、あくまで私が借りたアカウントで、普通のユーザー権限で見れる範囲の内容を書いたまでです。契約時期などによっても細かい部分は違うと思いますので、そのあたりは自己責任でお願いします。
VirtualBoxの共有ディレクトリの静的ファイルをApacheから読むと文字化けする問題
ホストOSのeclipseでコードを書き、workspaceをVirtualBoxの共有ディレクトリにマウントして開発しているスタイルだと遭遇する問題。
過去に一度遭遇して、再度発生した時に対処方法を忘れていたのでメモ。
原因、対策については以下サイトに書いている内容そのまま。
VirtualBoxの共有ディレクトリ内のファイルを更新してもApacheで表示が更新されない問題
http://nplll.com/archives/2012/09/virtualboxapache.php