iku8log

Webエンジニア、SEO、Web解析等々しております。タダのメモ。

fail2banについてssh周りだけ調べてみた。

fail2banはsshとかの不正アクセスを検知して、自動的に攻撃元IPを遮断してくれるもの。

僕は、さくらVPSのcentos7を使用していますがデフォルトで入っているっぽいですね。

ない場合はyumとかで入れちゃいましょう。

ですが、デーモン見るとfail2ban動いていませんでした。 初期のままでは動作していない?っぽいので、

sudo systemctl start fail2ban

して、起動させました。

設定ファイル

動作確認をと思って、設定ファイルを以下のように編集しました。

/etc/fail2ban/jail.conf

bantime  = 60 # どのくらいの時間banするか
findtime  = 10 # どのくらいの期間中に失敗したらbanするか
maxretry = 1   # どのくらい失敗したらbanするか

bantimeはその名の通り、1度banしてどのくらいの間banし続けるかという設定。 今回は60。秒単位なので1分間はbanします。

findtimeとmaxretryですが、これはどのくらいの期間中に何回ssh接続が失敗したらbanするという設定。 例えば、findtimeが60でmaxretryが10なら、 1分間の間に10回失敗したら、banするよって感じ。

今回はmaxretryを1に設定しているので、一回でも失敗したら問答無用でbanされます。これならfindtimeを設定する意味はないですが。

初期は以下の様になってましたよ。

bantime  = 600
findtime  = 600
maxretry = 10

10分間の間で10回失敗したら、10分間banするって感じですね。割と厳しめ。

ban出来なかった

sshの接続ユーザを存在しないものにしてテストしてみましたが、banされませんでした。

コマンドでban状況を見るとたしかにバンされている。

sudo fail2ban-client status sshd
|- Filter
|  |- Currently failed: 0
|  |- Total failed: 1
|  `- Journal matches:  _SYSTEMD_UNIT=sshd.service + _COMM=sshd
`- Actions
   |- Currently banned: 1
   |- Total banned: 1
   `- Banned IP list:   xxx.xxx.xxx.xxx #IPはヒミツ。

なぜ??と思ったら、実はちゃんとbanされていました。ssh。そう22番ポートがね。 僕はsshのポートを変えているのですり抜けれてました。

/etc/fail2ban/jail.conf

[sshd]
port    = 22222

こんな感じでサービス毎にポートが指定できます。

再起動もお忘れなく。

sudo systemctl restart fail2ban

※firewalldと連携して遮断してるっぽいので、firewalldも起動していないと、ban出来ませんでした。

余談

fail2banはメールとかも送れるっぽいので、結構良いですよ。

暇な時にいじってみよう。

JWTの備忘録

JWTを調べたので個人備忘録として残します。

JWTの読み方はジョットらしい。

tokenを使った認証方式

session,cookieとは異なり、サーバ上にセッション情報を保持しない(ステートレス)

クライアント(ブラウザのcookieやlocalstrage)に保存して、サーバアクセス時に HTTPヘッダに付けリクエストする。

JWTはハッシュ化されたシグニチャが付加されており、改ざんすることも不可能。 JWT内に任意の情報をもたせることも可能。

JWTはヘッダー、ペイロードシグニチャで「.」区切りの3部構成。

利用場面

SPAとかスマホアプリとかかな。 一度ログイン認証などで、JWTをサーバ側で発行し、クラアイアンとに返す。 それ移行、クライアントはJWTをHTTPヘッダに付け、API通信を行う。

JWTは言わば入館証みたいなものなので、盗聴され使われると危ない。 通信のSSL化は必須でしょう。

世界中のありとあらゆる場所に名前をつけた「what3words」が凄い

https://upload.wikimedia.org/wikipedia/commons/8/8e/What3words.png

今日もちらほらとネットニュースを流し見していると、めちゃくちゃ新しいサービスを発見。

 

その名も「what3words」

map.what3words.com

 

このサービスを簡単に説明すると、

 

世界中のありとあらゆる場所を3単語で定義したもの。です。

 

つまり「今ボクがいるこの場所」も、「あなたが今いる場所」も名前がもうついちゃっているということです。

名前がついてる場所は四方3メートル。

3メートルすぎると、また新しい名前の場所となるらしい。

例えば

「new.hello.world」みたいな感じ。

 

例えば↓は富士山の頂上の穴で「parkway.deforms.sifts」という名前になってます。

f:id:iku8:20180701212318p:image

薄っすらと格子状の線が見えると思います。これら3メートル四方で、全てに名前がついています。

ついに、地球は区分化されたか。

 

この画期的なサービスに数多くの起業が投資しているみたいですね。

主に自動車業界が注目しているようです。確かに自動運転などの技術は、このサービスを利用すると、熱くなりそう。

 

でも、3メートル四方なので、自動車で使うなら1メートルくらいにしないと怖いかも。 

 

このサービス地球まるごと線を引いて名前をつけているので、海の上でも↓のように名前が定義されています。おそろしや。

 

f:id:iku8:20180701212304p:image 

 

個人的に便利だなーと思ったのは、お店を探す時。

Google Mapと連携しているようで、「鳥貴族」とか調べられます。

f:id:iku8:20180701212300p:image

行きたい「鳥貴族」の場所の名前を3単語で表してくれるので、

あとはそこを目指して歩くだけ。

 

意外とGoogle Mapとか、iPhoneのマップは「とんちんかん」な方向を指しているので、追加にくい。

what3wordsだったら、場所を検索して、そこへのコンパスを表示してくれます。

f:id:iku8:20180701212253j:image

 

 まあ、店なら他のアプリにコンパスで行けるやつ、とかあるかもしれませんが。

 

このサービスが威力を発揮するのは、やっぱり自分の位置情報ですかね。

Google Mapでも位置情報送信できますが、あまり性格じゃない。

 

これらな、ドンピシャな場所が分かります。

割と今後お世話になるサービスかもしれません。

 

アプリもあります。

久々に面白いサービス発見した。

固定IPが取れないアパートで自宅サーバを公開してみた!

現在住んでるアパートは集合回線で、globalなIPが一つありそこからプライベートIPを振り出されている状況です。 よくあるやつですね。

ネット回線も遅く、自前で個人回線ひこうと思ったのですが、管理会社にダメ!って言われてので諦めました。 引ければ固定IPとって自宅サーバ立ててみるかと思ってたんですが。

とにかく、こんな環境でも無理やり自宅サーバを立て、HPを公開することができたのでメモしておきます。 VPSによる自宅サーバ公開方法があったので、参考にしました。 ちょうどさくらのVPSを2つかりてて、1つは全く使ってなかったので今回利用してやりました。

※HPを公開したかった訳ではありません。 自分のモチベーションとしては勉強目的です。今回の設定で色々と勉強できました。

必要な技術

  • VPS
  • VPN
  • Linuxルータ(iptablesによるnat)

この2つぐらいかなと思います。VPNの中で公開鍵だとかCAとかSSLといったキーワードが出てきます。

流れ

設定の流れはこうです。 まず公開したい自宅サーバ(CentOS7をインストールしている)あります。Apache等をテキトーに起動でもしときましょう。 次にVPSにVPNサーバを構築していきます。

VPNサーバで鍵とか証明書とか発行するので、それらをコピって自宅サーバに配置します。 自宅サーバからVPNサーバにVPN接続します。

VPSはLinuxルータとしても使用します。iptablesで自宅サーバにリクエストを飛ばしてやります。

これにより、VPSでリクエストを受け取り、VPNを通って自宅サーバまで到達。世界に自宅サーバを公開する事ができました、となるわけですね。

設定中はよく分かりませんでしたが、やはり手を動かしてトライ&エラー繰り返すと見えてくるものがありますね。 では、設定していきましょう。

以下、記述中なので、少々お待ちを....。コメントで早くしろってもらえると早くします。

VPSにOpenVPNでVPNサーバを構築

自宅サーバからVPNサーバにVPN接続

Linuxルータによるリクエスト転送

Vagrantで作成した仮想マシンで、BIND9を使ってDNSを作成してみた

DNSの勉強がてら、VMにDNSを作成して、名前解決できるようにしてみました。 やはりこの辺の知識は、実践して初めて定着しますね。

※触りの設定だけしているので、あまり踏み込んでいません。 ※実行OSはCentOS7です。

全体の流れ

  • bind9をインストール&起動
  • DNSの設定ファイルを記述
  • IPとドメインの対応表(ゾーンファイル)を作成
  • サーバ使用するDNSを指定
  • bind9の設定反映(再起動)
  • 名前解決出来るかテスト

BIND9をインストール

まずはbind9をインストールします。bind9はDNSサーバになります。

sudo yum install -y named

named-chrootというディレクトリをマウントしてくれるものがあるのですが、今回はなしです。 chrootを使うと、セキュリティ的に何かと良いらしいので、実際に稼働するDNSでは必須ですね。

namedがインストールできたら、サービスを起動しておきます。

sudo systemctl start named

DNSファイルの設定

bind9の設定ファイルは /etc/named.confにあります。 ここからは、root権限のファイルしか編集しないので、rootになっておきましょう。

sudo su

以下、必要なところだけ書くので、適宜設定してみてください。

listen-on port 53 { 172.0.0.1; };
allow-query     { localhost; };

zone "local.net" IN {
       type master;
       file "local.net.zone";
};

listen-onは「問い合わせを受け付けるインターフェースのIP」らしいのですが...。はて? とにかく、このDNSを使うことのできるサーバのIPを記述しておくのかな。

allow-queryは「DNSへの問い合わせを許可するIP」だそうですが...。listen-onと何が違うのかw とにかく、これもDNSを使うことのできるサーバのIPを記述しておきましょう。

今回はDNSサーバのみしか使わないので、自分自身をさせばOKです。(listen-onで他サーバのIPを記述するとうまくいかないので、ネットワークを記述しましょう。192.168.33.0/24とか)

ゾーンファイルですが、今回はlocal.net.zoneという名前のファイルを用意し、そこに記述していくようにしました。 ゾーンファイルはIPアドレスとドメインの対応表ですね。

ゾーンファイルの設定

ゾーンファイルは/var/namad/local.net.zoneで作成しました。

$TTL 86400

@ IN SOA local.net root.local.net (
  2017121408     ; Serial
  3600           ; Refresh
  900            ; Retry
  604800         ; Expire
  86400          ; Minimum
)

@            IN NS ns
ns IN A  192.168.33.10

細かい設定は割愛します(まだ詳しくないので)。 nsをDNSサーバに割り当てます。 言い忘れていましたが、DNSサーバのIPは192.168.33.10です。Vagrantの初期設定のまま。

ns IN A  192.168.33.10

の部分が一番重要ですね。他サーバの名前解決をしたい場合は、この行を複製し、適宜IP等変えていってください。

サーバにDNSを設定

DNSの設定は終わりですが、DNSが乗っているサーバ自体、どのDNSで名前解決をするのか分からないのでその設定をします。(自分自身で解決するのですが)

/etc/resolv.confを利用します。

search local.net
nameserver 127.0.0.1

ここで注意するのが、192.168.33.10ではなく127.0.0.1であることです。 192..ではlisten-onで許可していないからです。listen-onでlocalhost(または192.168.33.10)と記述していれば通るようです。

また、search local.netの部分ですが、 これは、例えばping ns.local.netといちいち書かなくても、 ping nsとするとlocal.netを探しに行って、pingが通るようになります。

超余談ですが、僕はpingをピングと呼んでましたが、最近ピンと呼ぶようになりましたとさ。

名前解決テスト

では、実際にDNSがちゃんと動作しているか確認してみましょう。 と、その前に、今回設定したファイルの内容をDNSに反映するため、BIND9を再起動しましょう

sudo systemctl restart named

ではping飛ばしてみます。

ping ns

これで応答が帰ってくるようになっているはずです!

まとめ

今回は、DNSサーバ自体で名前解決を行いました。 せっかくDNSを立てているので、複数VM作って、それぞれに名前振って名前解決するほうが楽しいと思います(VMのresolv.confの設定は忘れずに)。

最後に今回の内容をまとめます。

  1. まず、BIND9をインストールしました
  2. DNSの設定ファイルで問い合わせ可能なIP設定、ゾーンファイルの指定をしました
  3. ゾーンファイルでIPとドメインの結びつけを行いました
  4. resolv.confにてそのサーバで使用するDNSを指定しました(今回は自サーバ)
  5. BIND9を再起動
  6. pingで名前解決テスト

ぱぱっとしたメモなので、軽い参考程度に。