レタスのかわをぜんぶむく

ぜんぶむきます

接続元IPアドレスでアクセスを弾く

何故か家から繋がらんのだが?

家からssh接続してサーバ内見るかーとか思ったら、
オフィスからつないだ時と違う挙動。あれれ。

その時はVPNでオフィスを踏み台にする方法で
事なきを得たけども、後々設定変更が必要になって
自分で許可IPを追加する必要が出たので調査した。

1. /etc/hosts.allowファイルを使う

まずサーバ内で確認したのが/etc配下にある

/etc/hosts.allow
/etc/hosts.deny

このファイルで出来るのは
特定サービス、特定IPアドレスからのアクセスを許可(または拒否)

動きとしては、
1. allowで許可するリストに含まれていれば許可
2. denyで拒否するリストに含まれていれば拒否
3. どちらにも設定されていないものは許可
なので、この仕組みを使う場合は/etc/hosts.denyの最終行に
全てのアクセスを弾くような設定を入れていた。

詳しくは下記のリンクが分かりやすかった。
トリガを元にメール飛ばしたり、色々出来るようなので割と柔軟っぽい。

止められないUNIXサーバのセキュリティ対策(3):サービスをセキュアにするための利用制限〜TCP Wrapperによるサービスのアクセス制限〜 (1/3) - @IT

ただ、今回の件は/etc/hosts系ファイルを使っていなかった。

2. iptablesでパケットフィルタリングをする

他の方法よりもっと込み入った設定ができるやつ。
たしか、前職ではサーバセンターの中でごにょごにょしてる人が使ってた気がする。

今のオフィス規模と用途では使わないので、全然良くわかってない。

www.unix-power.net

確認したけど、残念ながらそもそも何も設定されていなかった。

3. .htaccessでアクセスを弾く

名前を".htaccess"として
一行目が拒否、許可の優先度設定
二行目以降で、一行目が許可なら拒否リストを
一行目が拒否なら許可リスト記載したテキストファイルを作成。

ディレクトリ内に配置をすれば、そのディレクトリ配下は
.htaccessで指定されたアクセス設定になる。

普通、指定したアクセス元のみ受け入れる設定なら下記のような感じ。

order deny,allow
deny from all
allow from 123.45.67.89


あるにはあったけどほぼデフォルトみたいな感じ。
ここに書いてね!みたいな。うーむ。

4. ソースコード内からアクセス元IPを評価して弾く

結局コレだった。
アプリケーション側のスクリプト内で直接アクセス元のIPをチェックして
リストに入っていなければ返却するデータを空にするという仕組み。

以下チェックする必要があるかなーと思ってたリスト

5. DBのデータを元にアプリケーションコードで弾く

6. AWS他、クラウドプラットフォームの機能で弾く

正直6の可能性高いだろうなーと思ってた。
あんまりクラウド明るくないから分からないけどどうなんざんしょ。
普通にありそうよね。

1, 3は場合によっては使いそう。
とりあえずは勉強になった!

Vimでctagsを使う、またはMacPortsを入れる

ctags導入

せっかくNERDTreeやminibufexplを導入しても
タグジャンプがなければただの窓付きエディタなので
その弱点を補うためのツール導入。

ctagsでタグファイル作ればタグジャンプ出来るだろと
思ったけど、Macにデフォルトで入っているctagsは使えな
やりたいことが出来ないようなので、ちゃんとしたctagsを入れる。

Exuberant Ctagsを入れると色々捗るらしいのでそれを入れる。
と思って実施したらportコマンド通ってない、ないやんけ…
ということでMacPorts導入。

MacPorts

MacPorts/HomeBrew二大巨塔だと勝手に思っているけど
yumとかapt-getみたいなCUIベースのパッケージマネージャ。
個人的にMacPortsが好きなのでそれを使う。

https://www.macports.org/install.php

事前にXCodeと関連ツール入れてねと言われるので素直に従う。
XCode入れたあとは、MacPorts.pkgを使ってインストール。
お手軽。

多分問題ないけど、MacPorts自体のアップデートも確認する

sudo port selfupdate

ctags

以下のコマンドを実行。パスワードを求められたら入れる。

sudo port install ctags

試しに

$ ctags --version
Exuberant Ctags 5.8, Copyright (C) 1996-2009 Darren Hiebert
  Compiled: Nov 22 2014, 13:15:05
  Addresses: <dhiebert@users.sourceforge.net>, http://ctags.sourceforge.net
  Optional compiled features: +wildcards, +regex

うむ、入っている。

実食

このままだとctags入れるだけマンになるので試そう。
試しにチェックするのはこちら。

github.com

いつの間にか3.0になってたCakePHP
お仕事で使ってた頃は2.x系だった気がする。いや1.xか?
ギッハブの右側からzipでDLしてきて、そのままDownloads内で展開。

ターミナルツールでそのディレクトリまで入っていって

$ctags -R --languages=PHP --langmap=PHP:.php.inc --php-types=c+f+d+v

終わり。
それぞれのパラメータの意味は

-R : ディレクトリ内を再帰的にチェック
--languages=PHP : 言語設定をPHPに
--langmap=PHP:.php.inc : PHPとして認識するファイルの拡張子として .php, .inc を設定
--php-types=c+f+d+v : タグ付けの設定を詳細に設定 (c : クラス, f : メソッド, d : 定数, v : 変数)

このディレクトリでvimを開く。

$ alias mvim="/Applications/MacVim.app/Contents/MacOS/Vim -g"
$ mvim

うまくいけばこうなっているはず。
f:id:uskey:20150814032658p:plain

適当なファイルを開いて(多分今回はbootstrap.php)
エディタ上からCtrl+]で定義元にジャンプ。
戻るときはCtrl+tで元に戻る。

IDEでは当たり前の機能だけど、エディタから利用出来ると
軽さもあいまって使いやすさもひとしお。
これでだいぶ使いやすくなったかな。

MacにVimをトゥギャザーする方法 (2015年8月版)

今の職場に移った時に、
「若いのに一つの技術に固執してんじゃねえしゃーんなろー」
とCTOに言われて、前職で使いはじめたVimを捨てて早4年。

Unityで開発するにはMonoDevelopが楽で良い感じだけど
時代の流れに求められてPHPer(ぺちぱー)としての立ち回りも
要求されつつあるので、久々にVim等の開発環境の確認を。

MacVim

まずはVimが無いとはじまらないので、MacVimの調達。
Windows Vimググると一番上に出てくる香り屋さんでは
Mac版が無いので、Githubに上がっている同様のものを取得。

https://github.com/splhack/macvim-kaoriya

入れてみたはいいけど、手元に.vimrcやら.vimやらが既にあって
若干気持ち悪いのでバックアップ取ってから再インストール。
前の設定とかとぶつかると原因切り分け難しくなるしね。
ちょうどいいのでクリーンインストール

NeoBundles

色々試した結果、Windows版で使ってたpathogenという
Vim用のプラグイン管理プラグインがうまいこと動かないので
よりナウい別のNeoBundlesというプラグインに変更。

https://github.com/Shougo/neobundle.vim

加えて、vimに引きこもった状態で作業をする効率を上げる
下記の2プラグインを導入。

NERDTree

Vimに引きこもった状態でディレクトリを表示して
別ファイルを開いたりしやすくする。

minibufexpl

Vimでは開いたファイルをバッファというもので管理している。
そのバッファをタブブラウザのタブみたいな感じで管理する。

まず、NeoBundlesを導入。その後Vim起動で自動で両方とも入る。
具体的にはNeoBundlesのinstall.sh実行後に出てくる.vimrc内の
プラグイン追加する行に下記を追加。

"NeoBundle Scripts-----------------------------
if has('vim_starting')
  if &compatible
    set nocompatible               " Be iMproved
  endif

  " Required:
  set runtimepath+=/Users/user_name/.vim/bundle/neobundle.vim/
endif

" Required:
call neobundle#begin(expand('/Users/user_name/.vim/bundle'))

" Let NeoBundle manage NeoBundle
" Required:
NeoBundleFetch 'Shougo/neobundle.vim'

" Add or remove your Bundles here:
NeoBundle 'Shougo/neosnippet.vim'
NeoBundle 'Shougo/neosnippet-snippets'
NeoBundle 'tpope/vim-fugitive'
NeoBundle 'ctrlpvim/ctrlp.vim'
NeoBundle 'flazz/vim-colorschemes'
NeoBundle 'fholgado/minibufexpl.vim' "←追加
NeoBundle 'scrooloose/nerdtree' " ←追加

" You can specify revision/branch/tag.
NeoBundle 'Shougo/vimshell', { 'rev' : '3787e5' }

" Required:
call neobundle#end()

" Required:
filetype plugin indent on

" If there are uninstalled bundles found on startup,
" this will conveniently prompt you to install them.
NeoBundleCheck
"End NeoBundle Scripts-------------------------

起動したらバッチリ、やったねめでたしめでたしと思ったけど
カラースキームの設定がなんか違うので.gvimrcに下記追加。
※user_nameの部分は人によって違うと思うので環境に合わせて

colorscheme darkblue

全然関係ないけど

シンタックスハイライトでvimがあるのはとてもよい