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の「イメージ保存機能」でバックアップしておきましょう。ConoHaはイメージ保存機能は本当に便利です。
2.ufwの基本的な設定
以下、使いそうなufwの基本的なコマンドを列挙したいと思います。
(1) ファイアウォールの有効・無効の設定
ファイアウォールは有効(active)にしたり、無効(inactive)にしたりできます。
sudo ufw enable #ファイヤーウォールを有効にする。
sudo ufw disable #ファイヤーウォールを無効にする。
なお、間違えやすい点を列挙します。
- ファイアウォールのルールを設定しても、「enable」によって有効にしなければ、ファイアウォールの機能は働きません。
- 「disable」はファイアウォールを無効にしますが、これは設定を削除してしまうのではありません。ですから、「enable」で再び有効にすれば元の設定状態に戻ります。
- 「enable」の状態でサーバーを再起動してもファイアウォールは有効のままです。
- 「enable」によりactive(有効)な状態ではなくても、allowなどによる設定の変更は可能です。しかし、inactive(無効)の状態では「status」により設定の状況を確認しながらの作業ができなくなるので、ファイアウォールの設定はactive(有効)の状態で行います。
(2) 標準のポリシーの設定
sudo ufw default deny #全て拒否 ※こちらの設定を採用するのが一般的
sudo ufw default allow # 全て許可
最初の状態であれば、標準のポリシーが拒否の設定になっています。しかし、環境を引き継いだような場合、念のため「sudo ufw default deny」としましょう。
「sudo ufw default deny」と設定すると、標準設定が「拒否」となり、許可するポートを設定します。なお、「sudo ufw status」で表示されないポートは「拒否」です。
「sudo ufw default aollow」と設定すると、標準設定が「許可」となり、拒否するポートを設定します。なお、「sudo ufw status」で表示されないポートは「許可」です。
ここで注意しなければならないのは、「sudo ufw default deny」を実行しても、すでに「許可」の設定を行ったポートは「拒否」に変更されません。標準のポリシーが拒否になるだけなのです。
(3) 全ての設定を初期化
sudo ufw reset #全ての設定を初期化
全ての設定を削除して初期化します。「delete」では設定を1つずつしか削除できません。したがって、最初からやりなおした方が早い場合などには「reset」を使います。
「reset」実行後は、inactiveの状態になります。
(4) ポートを許可する
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」はトランスポート層で動作するプロトコルを指定します。
(5) 連続で接続を試みるIPアドレスの拒否
sudo ufw limit 22 #連続で接続を試みるIPアドレスの拒否
30秒間の間に6回以上接続を試みた IP アドレスを一定時間拒否します。言い換えれば、短い時間で繰り返し接続を試みる怪しいアクセス以外は接続を許可します。
(6) 設定の一覧を表示
sudo ufw status #登録されているルールの一覧を表示
sudo ufw status verbose #登録されている設定の一覧を詳細表示
sudo ufw status numbered #登録されている設定の一覧を通し番号付で表示
「status」によって、設定の一覧表示することができます。設定一覧を確認しながら設定更新の作業を行います。
(7) 設定の削除
sudo ufw status numbered #登録されている設定の一覧を通し番号付で表示
sudo ufw delete 1 #通し番号1番のルールを削除
設定の削除は「 sudo ufw delete [通し番号]」を使います。削除するポートはポート番号ではなくstatusによって表示された一覧の通し番号によって指定します。従って、削除する前に「sudo ufw status numbered」を実行し、通し番号を確認します。
(8) 変更した設定の更新
sudo ufw reload #allowやdeleteで変更した設定に更新する。
「reload」は変更した設定を更新します。しかし、これはログインする時のポート番号が変更されるだけですので、既にログイン済みのssh接続が直後に遮断されるわけではありません。つまり、設定作業中に急に遮断され、ログインしなおさなければならない状態にはなりませんので安心して下さい。
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」を使います。
記入例では「insert 1」を「allow 22」の前に追加することで、設定を挿入する位置を指定しています。「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日分の費用だけ払うといったことも可能なので気軽に始められます。※時間課金(月の上限額は決まっています)
私からの友達紹介でクーポンをゲット
なお、以下のリンクから入ると、私からの友達紹介の扱いとなり1000円分のクーポンが支給されます。リンク先には「友達紹介」といった表記がないので「友達紹介」が適用されているのか不安になりますが大丈夫です。登録終了後にログインしたユーザーTop画面を確認すると支給されたクーポン1000円が表示されるはずです。
なお、友達紹介では個人情報が紹介者には開示されないので安心してご利用ください。
その他
液晶ペンタブレットを購入しました
(1) モバイルディスプレイを買うつもりだったのに激安ペンタブレット購入
以下、私が光回線を導入した時の記事一覧です。
(1) 2020年「光回線は値段で選ぶ」では後悔する ←宅内工事の状況も説明しています。
(2) NURO光の開通までWiFiルーターを格安レンタルできる
(3) NURO光の屋外工事の状況をご紹介。その日に開通!
(4) 光回線開通!実測するとNURO光はやっぱり速かった
(5) ネット上のNURO光紹介特典は個人情報がもれないの?