iptablesは扱いが複雑なので、Ubuntuではiptablesを簡単に利用するためにufwというツールがあります。そこで、ufwによるファイアウォールを設定方法を解説します。denyとdeleteの違いなどは初見では難しいと思います。
0.VPSサーバーでDjangoを始めてみたシリーズ
この記事は「VPSサーバーでDjangoを始めてみたシリーズ」の記事です。一連の記事は、以下のリンク集を参照してください。
1.ufwとは
ufw(Uncomplicated FireWall)は、iptablesを簡単に利用するためのツールであり、CentOSのfirewall-cmdに相当します。
iptablesによるファイアウォールの設定については、以下公式ガイドでも説明されています。高度な設定を行うのでなければ、uwfでも十分ではないかと思います。
第12回:もう怖くない!ファイアーウォール(iptables)
さて、ファイアウォールの設定をする前に、念のためConoHaの「イメージ保存機能」でバックアップしておきましょう。ConoHaはイメージ保存機能が便利です。
2.ufwの基本的な設定
以下、使いそうなufwの基本的なコマンドを列挙したいと思います。
(1) ファイアウォールの有効・無効の設定
sudo ufw enable #ファイヤーウォールを有効にする。
sudo ufw disable #ファイヤーウォールを無効にする。
enable、disableはファイアウォールを有効(active)にしたり、無効(inactive)にしたりします。ファイヤーウォールのルールを設定しても、「enable」によって有効にしなければ、ファイアウォールの機能は働きません。
「disable」はファイアウォールを無効にしますが、これは設定を削除してしまうのではありません。作成した設定はそのままです。ですから、「enable」で再び有効にすれば元の設定状態に戻ります。また、「enable」を実行すると、サーバーを再起動してもファイアウォールは有効のままです。
なお、「enable」によりactive(有効)な状態ではなくても、allowなどによる設定の変更は可能です。しかし、「status」で設定の状態を確認しても「inactive」と表示されるだけで設定の内容を表示できません。これでは設定の状況を確認しながらの作業ができないので、基本的に「enable」を実行し、activeの状態で設定作業を行います。
(2) 標準のポリシーの設定
sudo ufw default deny #全て拒否
sudo ufw default allow # 全て許可
最初の状態であれば、標準のポリシーが拒否の設定になっています。しかし、環境を引き継いだような場合、念のため「sudo ufw default deny」としましょう。
「sudo ufw default deny」は、設定を直接指定していないポートについて標準のポリシーとして「拒否」「許可」を指定します。いいかえれば、「sudo ufw status」で表示されないポートが「拒否」なのか「許可」なのかを指定します。
ですから、例えばいくつか設定済みの状態で「sudo ufw default deny」を実行した場合、すでに許可の設定になっているポートが拒否の状態に変更されるわけではありません。
(3) ポートを許可する
sudo ufw allow 22 #22番ポートを許可
sudo ufw allow 20/tcp #20番(tcp)ポートを許可
sudo ufw allow 53/udp #53番(udp)ポートを許可
sudo ufw allow 20:21/tcp #20~21番(tcp)の範囲のポートを許可
sudo ufw allow http #80番(tcp)ポートを許可
sudo ufw allow https #443番(tcp)ポートを許可
sudo ufw allow domain #53番ポートを許可
「allow」により、ポートを指定し許可します。上記のように色々な指定方法があります。なお「sudo ufw allow http」は「sudo ufw allow 80/tcp」と同じ事です。番号ではなく「http」「https」「domain」といったキーワードで指定することもできます。
「tcp」「udp」はトランスポート層で動作するプロトコルを指定します。
(4) 連続で接続を試みるIPアドレスの拒否
sudo ufw limit 22 #連続で接続を試みるIPアドレスの拒否
30秒間の間に6回以上接続を試みた IP アドレスを一定時間拒否します。言い換えれば、短い時間で繰り返し接続を試みる怪しいアクセス以外は接続を許可します。
(4) 設定の一覧を表示
sudo ufw status #登録されているルールの一覧を表示
sudo ufw status verbose #登録されている設定の一覧を詳細表示
sudo ufw status numbered #登録されている設定の一覧を通し番号付で表示
「status」によって、設定の一覧表示することができます。設定一覧を確認しながら設定更新の作業を行います。
(5) 設定の削除
sudo ufw status numbered #登録されている設定の一覧を通し番号付で表示
sudo ufw delete 1 #通し番号1番のルールを削除
設定の削除はポート番号ではなく、statusによって表示された一覧の通し番号によって指定します。従って、削除する前に「sudo ufw status numbered」を実行し、通し番号を確認します。
(6) 全ての設定を初期化
sudo ufw reset #全ての設定を初期化
全ての設定を削除して初期化します。「delete」では設定を1つずつしか削除できません。したがって、最初からやりなおした方が早い場合などには「reset」を使います。
「reset」実行後は、inactiveの状態になります。
(6) 変更した設定の更新
sudo ufw reload #allowやdeleteで変更した設定に更新する。
「reload」は変更した設定を更新します。しかし、既に接続済みのssh接続が直後にアクセスできなくなるわけではありませんので安心してください。「reload」後のログインから変更した設定が反映されます。
allowやdeleteで設定変更を行った後はreloadで設定を更新するようにして下さい。
3.ufwのその他の便利な設定
ufwには他にも便利な設定がありますので紹介したいと思います。
(1) IPv6は追加しない
ufwでは、「sudo ufw allow 22」とすると、IPv4だけではなくIPv6も許可されます。普通の使い方ではIPv6は不要な場合が多いのではないでしょうか。以下、「status」で確認したときに(v6)の表記がない方がIPv4であり、(v6)の表記がある方がIPv6です。
sudo ufw allow 22
sudo ufw status
To Action From
-- ------ ----
22/tcp ALLOW Anywhere
22/tcp (v6) ALLOW Anywhere (v6)
IPv6の設定をdeleteで削除してもかまいませんが、IPv6が自動で追加されないようにする方法があります。
それは、「/etc/default/ufw」のファイルufwをviエディタで編集し、「IPV6=yes」を「IPV6=no」に変更します。すると、IPv4だけが設定されるようになります。
IPV6=yes
↓
IPV6=no
(2) 特定のIPアドレスを拒否する
#[IPアドレス] が22/tcpのポートへ接続するのを拒否する
sudo ufw deny proto tcp from [IPアドレス] to any port 22
上記の書式で特定のIPアドレスの接続を拒否することができます。
(3) 上側の設定が優先される
注意しなければならないのは記述の順番です。ufwで設定したルールは「sudo ufw status」で表示される上側のルールが優先されます。
例えば以下の順番で設定すると後で指定した「sudo ufw allow 22」の方が「status」で確認したときに下側のルールとなるため、「22番ポートを許可するルール」よりも「IPアドレスを拒否するルール」の方が優先されます。従って、22番ポートが許可された上で、指定したIPアドレスのみ拒否できます。
sudo ufw deny proto tcp from [IPアドレス] to any port 22
sudo ufw allow 22
しかし、以下の順番で設定すると「IPアドレスを拒否するルール」は「22番ポートを許可するルール」に上書きされてしまいますので、全て許可されます。
sudo ufw allow 22
sudo ufw deny proto tcp from [IPアドレス] to any port 22
(4) 設定を任意の位置に挿入
sudo ufw insert 1 allow 22 #設定の通し番号で1番目の位置に「22番ポートを許可」の設定を挿入
「insert 1」をallowの前に追加することで、設定を挿入する位置を指定することができます。「insert 1」の1は「sudo status numbered」で表示される通し番号です。ポート番号ではありません。
(5) 設定の拒否
sudo ufw deny 22 #22番ポートを許可
allowは許可でしたが、denyは拒否です。例えば以下のようにallowで許可された22番ポートがあったとします。これを「delete」で削除すると、22番ポートの設定は消えてしまいます。
To Action From
-- ------ ----
22/tcp ALLOW Anywhere
しかし、denyで拒否すると、22番ポートの設定が消えるのではなく、Actionが「DENY」である設定に変更されます。
To Action From
-- ------ ----
22/tcp DENY Anywhere
これは、「sudo ufw default allow」で標準のポリシーを許可とした場合などに使用します。
(6) 有効なアプリケーションの表示
sudo ufw app list #有効なアプリケーションの一覧
有効なアプリケーションを一覧で表示します。ポート番号で表示されないのでアプリケーションの内容が一目でわかります。
(7) ログの記録場所
ufwによってチェックされた内容のログは以下の2カ所に場所に保存されています。syslog は他のシステムログも記録されますので、ufwのみのログはufw.logを確認します。
/var/log/ufw.log
/var/log/syslog
ログの中でポイントとなる部分は以下の通りです。
SRC:侵入を試みた外部PCのIPアドレス(source)
SPT:侵入を試みた外部PCのポート番号(source port)
SFC:侵入の対象となったサーバーのポート番号(destination port)
早速、ログを確認したら1分間毎に5件ぐらいブロックしていました。借りたばかりのVPSサーバーなのに恐ろしい・・・。セキュリティ設定なしというのは裸で戦場を歩くようなものなのかも。
狙われたポートは23(Telenet), 110(POP3), 3389(リモートデスクトップ), 22(SSH), 222, 12345などなど。その他見たこともないようなポート番号多数。おそらく、自動プログラムで手当たり次第アタックしているのでしょう。
私が実際にレンタルしたVPSサーバー
私が実際にレンタルしたVPSサーバーはConoHa VPSです。私は1GBのプランを申し込みました。VPSサーバーは一般のレンタルサーバーと異なりOSやアプリケーションを自由に設定できるので、Pythonで計算した結果をサイトに表示することもできます。
なお、ConoHa VPSの特長として、サーバーのディスクイメージを丸ごとバックアップできるイメージ保存機能を無料で使用することができます。コードを変更して元に戻せなくなった場合にも安心です。
また、ConoHa VPSは途中でプランをスケールアップできるだけでなく、スケールダウンすることもできます。つまり、2Gプランを1Gプランに変更することができます。ただし、512MBプランだけはスケールアップ・ダウン機能が使用できないので注意してください。
また、初期費用なしで3日だけ借り、3日分の費用だけ払うといったことも可能なので気軽に始められます。※時間課金(月の上限額は決まっています)
その他
以下、私が光回線を導入した時の記事一覧です。
(1) 2020年「光回線は値段で選ぶ」では後悔する ←宅内工事の状況も説明しています。
(2) NURO光の開通までWiFiルーターを格安レンタルできる
(3) NURO光の屋外工事の状況をご紹介。その日に開通!
(4) 光回線開通!実測するとNURO光はやっぱり速かった
(5) ネット上のNURO光紹介特典は個人情報がもれないの?