CentOS 7のsshdをGeoIPを使用してアクセス制限する

Facebooktwittermail

今までは下記のサイトから取得したデータからJPを抽出して/etc/hosts.allowに追加していたのですが、直ぐに面倒になって放置していました。

ftp://ftp.apnic.net/pub/apnic/stats/apnic/delegated-apnic-latest

自動更新にするスクリプトを作成するかと思いつつ、代わりになるような方法は無いかなと探していたらありました。GeoIPを使って簡単にできるとは。

Allow SSH access based on GeoIP country
https://www.claudiokuenzler.com/blog/676/ssh-access-filter-based-on-geoip-database-allow-deny

MaxMind
https://www.maxmind.com/en/home

GeoLite2 Free Downloadable Databases
https://dev.maxmind.com/geoip/geoip2/geolite2/

今回はCentOS 7に設定してみました。
上記サイトのスクリプトはgeoiplookup,geoiplookup6コマンドを利用しています。インストールされていない場合は下記のコマンドでインストールして下さい。

geoiplookupコマンドを実行してみます。ここから国コードを抽出しているのですね。

  1. スクリプト/usr/local/bin/ipfilter.shの作成
  2. 許可する国をJPに修正しています。

  3. 実行権限の設定
  4. 全てのssh接続を拒否
  5. 許可するIP(国コードJP)を設定

暫くすると拒否されたIPがログに記録されました。

2019/10/5 追記
どうもCentOS 7のTCP wrapperでは終了コードでallow,denyが機能していないようです。いろいろ情報を探しているけど出来ないっているのを一つだけ見つけました。

https://www.linuxsecrets.com/3805-tcp-wrapper-block

ログにはDENYと記録されているのに、その後接続を受け付けているんですよね。

ちなみに/etc/hosts.allowに許可IPを記述すると、それ以外からの接続は下記のようにログに記録されます。

Leave a Reply