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

ぜんぶむきます

接続元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は場合によっては使いそう。
とりあえずは勉強になった!