サーバー専門のフリーランスエンジニアです。クラウドサーバー環境を利用してWebサイト、ITシステムのサーバー全体構成やサーバー内部構成をデザインします。6)はじめにサーバー構築・運用において、固定IPアドレスを持っていないユーザーからのSSH接続を許可する必要があるために、SSHのアクセス元IPアドレスを限定できないケースはわりとよくあると思います。公開鍵認証を必須とする、ポート番号を変更する、ブルートフォース攻撃対策としてFail2BanやDenyHostsでBanする、などの方法でセキュリティ強化はできますが、そもそも不正アクセスのチャレンジ自体をできるだけ少なくしたいですね。現実の世界で例えるならば、自宅の鍵穴を知らない人にガチャガチャされるのは、安全だとわかっていても気持ち悪いものです。以前、国別のIPアドレスリストを使って、特定の国からのWebアクセスをブロックする対処を行ったことがありました。・Nginxで海外からのアクセスを拒否するhttps://inaba-serverdesign.jp/blog/20140616/nginx_deny_ipaddress.htmlそこで、国別のIPアドレスリストを利用して、iptablesでSSHを日本国内からの接続に限定すればよいのでは、と考えて試してみました。ACCEPTそれだけで2,000件以上のフィルタリングルール追加処理が発生します。iptablesのフィルタリングルールを追加する処理は少し重いようで、すべてのiptablesエントリーを登録するまでに数十秒かかるようになってしまいました。iptablesルールを適用する間、ルールの順序にもよりますが、一時的にサーバーへアクセスできなくなってしまいます。iptablesのフィルタリングルールには上限があるようで、「いくつかの国からのSSHアクセスを拒否する」というような設定を試してみたところ、ルール数が多すぎて、iptalbesのフィルタリングルール追加が途中で止まってしまいました。いうことで困っていたのですが、こういう場合は「ipsetを利用してIPアドレスの集合として管理し、iptablesで参照する」という方法があることがわかりました。ipsetの詳しい説明は、以下の記事がとてもわかりやすいのでそちらを参照してください。7での設定方法は少し違うので、別の記事にまとめました。接続を許可したいネットワークのアドレスを保持するセット「WHITELIST」を作成し、国別コードリストからWHITELISTのエントリーを登録します。定期的に最新の国別コードリストの情報を反映できるよう、スクリプトを用意しました。$ADDRESSdoneスクリプトを実行します。./mk_ipwhitelist.shWHITELISTを確認します。保存し、次回ipsetが起動するときに自動的にWHITELISTセットをロードするようにします。202.177.48.0/20...・自動起動設定OS起動時にipsetセットをロードするよう自動起動設定を行います。念のため、ipset起動スクリプトを確認します。なっているので、iptablesより前に起動し、iptablesの後で終了することがわかります。firewall...自動起動設定を行います。指定して、ホワイトリストのIPアドレスからのみSSH接続を許可します。(デフォルトポリシーがDROP、SSHポートはTCP/22を想定。1行のエントリーで、大量のIPアドレスからのアクセス許可ルールを表現できました。出力されますが、ホワイトリストにマッチしないIPアドレスからはSSHポートにアクセスできません。srcルールを追加したので、iptablesルールを保存するのをお忘れなく。自分のPCやサーバーからSSHログインできる。海外のサーバー環境からSSHログインできない。可能であれば、OSを再起動してipsetルールやiptablesルールが正しくロードされることも確認するとよいでしょう。EC2のサーバーを使うとよいと思います。EC2サーバーのIPアドレスは、東京リージョンのサーバーでも国名コードとしては’US’です。この国名コードは、必ずしも該当のIPアドレスを使用するサーバーの地理的な位置を表すとは限らないことに注意しましょう。まとめ国別のIPアドレスリストを利用して、ipsetとiptablesでSSHを日本国内からの接続に限定する設定方法をまとめました。この方法で、FTP等ほかのポートのアクセス制限を行うこともできますし、ipsetでブラックリストのセットを作成しDROPルールを登録することで、特定の国からのアクセスを防ぐこともできます。DROPiptablesで取り扱うIPアドレスが多い場合は、ipsetを使いましょう。サイトのWebサーバー移行を担当しました。(必須)↑お問い合わせ内容をご確認のうえ、チェックを入れてから「送信」してください。