いますぐ実践! Linuxシステム管理

いますぐ実践! Linux システム管理 / Vol.268 / 読者数:2805名

またしてもまたしても、大変おひさしぶりです! うすだです!

お盆もシルバーウィークも余裕なく過ごし、 気づいたら10月になっているという状態ですが、 みなさまは余裕のある生活をお過ごしでしょうか。

もう、この3連休を逃すと、おそらく年末まで書けないのではないか? と思われましたので、精神的に重すぎる腰を少しだけ上げてみました。

 

さて、巷では、Windows の新バージョンが無償アップデートできるとかで 若干賑わっているようですね。我が家でも、 これを機に 64bit 化したいとたくらむ浪人生がいまして、 手順の確認を迫られておりました。

で、ふと、古い ThinkPad に入っている Windows をチラ見したところ、 幸か不幸か、8.1 の 32bit 版でした。ですので、まず 10 にバージョンアップし、 その後 64bit に変更する、という手順を試してみました。
(ちなみに、32bit→64bit のバージョンアップは不可のようでしたので、 ディスクのフォーマットをしないクリーンインストールをしました。)

詳細は割愛しますが、GRUB が上書きされるというお決まりの罠に陥ったことを除けば、 Windows 10 64bit 版までインストールできました。

…はい、インストールまでは、できました。

インストール後、触っているうちに固まってしまいましたので、 仕方なく強制再起動すると、今度は正常に立ち上がらなくなってしまいました。

検索すると、似たような症状がいくつか見つかったため、 片っ端から回避策を試行すれば、そのうち直りそうです。が、 連休が終わって時間切れとなってしまいました。

3連休を使って、動かない Windows マシンを1台仕上げたところで、 今回もそれなりにはりきってまいりたいと思います。(TεT)

今回のお題 - UFW を使ってみる (レベル:初級〜中級の手前)

インターネットに直接アクセスできる(される)ところに Linux なマシンを置くときには、いろいろな層で対策しておく必要があります。

昔だったら、TCPかUDP(かIP)でアクセス制限をかければ、 それなりの不正アクセスを防ぐことができました。ですが、 いまやあらゆる層で脆弱性を突かれる可能性があり、 パケットフィルタリングだけでは十分と言えない世の中になってしまいました。

とはいえ、パケットフィルタリングは依然として必要です。必須です。
そして、昔ながらの「iptables」コマンドによる設定が、現在も変化することなく、 ごりごり行われているように思います。

しかし、iptables による設定方法は、わかる人にはわかりますが、 そうでない人にとっては難解です。

使い方を理解していても、一度設定したら当分設定変更しない人にとっては、 ぱっと引数などを思い出せないのではないかと思います。

で、そんな貴兄の味方と言えるものが、世の中にはいくつか存在します。
今回は、その中でも比較的有名な、Ubuntu で主に使われている「UFW」というものを、 さらっとご紹介したいと思います。

UFW とは?

UFW(Uncomplicated FireWall)は、 Linuxの「netfilter」によるファイアウォールを管理するためのフレームワークです。 同名のコマンドを使って設定等を行います。

ufw in Launchpad
https://launchpad.net/ufw

たとえば、iptablesを使って、 TCPの22番ポート(SSHですね)へのアクセスを許可するには、 以下を実行することになると思います。

  $ sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

bashの補完機能(completion)で、ある程度引数を補完してもらえるとしても、 慣れない人にとっては難解な引数です。よね。
ですが、ufw を使えば、以下を実行するだけで済みます。

  $ sudo ufw allow OpenSSH

これくらいなら、オンラインマニュアルやヘルプメッセージを数秒眺めることで、 思い出せそうです。

UFW の有効化・無効化・状態確認

Ubuntu をインストールした直後は、UFW は無効になっています。
有効にするには、「enable」を引数に指定して ufw を実行します。
(基本的に root 権限が必要なため、「$ sudo」を「#」で表します。)

  # ufw enable
  ファイアウォールはアクティブかつシステムの起動時に有効化されます。

これで有効になりました。
ちなみに、出力結果にもありますが、次回以降のシステム起動時も有効になります。

ところで、もし、SSHでログインして作業しているなら、 接続を切られる可能性があるけど有効にしますか? (Command may disrupt existing ssh connections. Proceed with operation?) と聞かれます。SSHで接続できなくなると困るので、有効にする前に、 SSHを許可しておきましょう。
(後述の ufw allow で許可してから、ufw enable を実行します。)

状態を確認するには、「status」を引数に指定して ufw を実行します。

  # ufw status
  状態: アクティブ

  To                         Action      From
  --                         ------      ----
  OpenSSH                    ALLOW       Anywhere
  OpenSSH (v6)               ALLOW       Anywhere (v6)

さらに「verbose」を指定すると、もう少し詳しく教えてくれます。

  # ufw status verbose
  状態: アクティブ
  ロギング: on (low)
  Default: deny (incoming), allow (outgoing), disabled (routed)
  新しいプロファイル: skip

  To                         Action      From
  --                         ------      ----
  22/tcp (OpenSSH)           ALLOW IN    Anywhere
  22/tcp (OpenSSH (v6))      ALLOW IN    Anywhere (v6)

UFW を無効にするには、「disble」を引数にして ufw を実行します。

  # ufw disable
  ファイアウォールを無効にし、システム起動時にも無効にします
  # ufw status
  状態: 非アクティブ

ルールの追加・削除

次に、ルールの追加や削除をしてみましょう。

UFW のデフォルトでは、入ってくる(incoming)パケットは拒否(deny)し、 出て行く(outgoint)パケットは許可(allow)するよう設定されています。
(前述の ufw status verbose の出力結果で確認できます。)

ufw default でその設定を変更できますが、ここではデフォルトの設定のままにして、 入ってくるパケットを許可する設定を追加してみます。

たとえば、TCPの80番ポート(HTTPですね)を許可する設定を追加するには、 「allow」とポートを引数に指定して実行します。

  # ufw allow 80/tcp
  ルールを追加しました
  ルールを追加しました (v6)
  # ufw status
  状態: アクティブ

  To                         Action      From
  --                         ------      ----
  80/tcp                     ALLOW       Anywhere
  80/tcp (v6)                ALLOW       Anywhere (v6)

ルールを削除するには、「delete」とルールを引数に指定します。

  # ufw delete allow 80/tcp
  ルールを削除しました
  ルールを削除しました (v6)
  # ufw status
  状態: アクティブ

ポートを直接指定するのではなく、アプリケーション名で指定することも可能です。 「app list」を引数に指定して実行すると、 利用可能なアプリケーション名の一覧が出力されます。

  # ufw app list
  利用可能なアプリケーション:
    Apache
    Apache Full
    Apache Secure
    CUPS
    OpenLDAP LDAP
    OpenLDAP LDAPS
    OpenSSH
    Samba

ですので、前述の「allow 80/tcp」は、 「allow Apache」と指定することもできます。
(同様に、「allow 22/tcp」は「allow OpenSSH」と表せます。)

  # ufw allow Apache

「app info アプリケーション名」を引数に指定して実行すると、 概要やルールの内容を確認できます。たとえば、 "Apache Secure" の内容を確認するには、以下のように実行します。

  # ufw app info "Apache Secure"
  プロファイル: Apache Secure
  タイトル: Web Server (HTTPS)
  Description: Apache v2 is the next generation of the omnipresent Apache web server.

  Port:
    443/tcp

TCPの443番ポートを許可するということがわかりますね。

UFW の設定ファイル

ufw コマンドで追加したルールは、次回以降のシステム再起動時も有効に設定されます。

ということは、そのルールはどこかの設定ファイルに保存されているはずですね。 それはどこにあるのでしょうか?

/etc の下を探索してしまいがちですが、実は「/lib/ufw/user.rules」に保存されます。 (IPv6の場合は「/lib/ufw/user6.rules」です。)

「/lib/ufw」には、システム起動・終了時に「/etc/init/ufw.conf」 から呼ばれて設定を行う「ufw-init」などのスクリプトがあります。

  $ ls /lib/ufw/
  ufw-init*  ufw-init-functions*  user.rules  user6.rules

「/etc/ufw」にも、ufw-init から呼ばれるスクリプトや、 デフォルトのルールが記述されたファイルなどがあります。

  $ ls /etc/ufw/
  after.init   after6.rules     before.init   before6.rules  ufw.conf
  after.rules  applications.d/  before.rules  sysctl.conf

「/etc/ufw/applications.d」には、お察しの通り、 アプリケーションの設定ファイルがあります。

  $ ls /etc/ufw/applications.d/
  apache2/  apache2-utils.ufw.profile  cups  openssh-server  samba  slapd

おわりに

以上、UFW のさわりを簡単にご紹介しました。

ufw は簡単に設定を行うためのコマンドですが、 複雑な設定ができないというわけではありません。 allowだけでなく「deny」や「reject」などのルールの追加や、 送信元・送信先のIPアドレスの指定もできます。

詳しくはオンラインマニュアル(「man ufw」や「man ufw-framework」)をご覧ください。

ちなみに、iptables については、大昔にさらっとご紹介しています。
大雑把な内容ですが、よろしければご覧ください。

Vol.067 - プチ・パケットフィルタリング
http://www.usupi.org/sysad/067.html

宿題の答え

前回の宿題は、

  CPU使用率やメモリ使用率の多い順にプロセスを出力してみましょう。

でした。

ps コマンドには、 出力をソートするための「k」または「--sort」というオプションがあります。

たとえば、プロセスIDの小さい順に出力するには、ps コマンドを以下のように実行します。

  $ ps auxk pid
  USER   PID %CPU %MEM    VSZ   RSS TTY   STAT START   TIME COMMAND
  root     1  0.0  0.0  34260  3152 ?     Ss    9月27   0:04 /sbin/init
  root     2  0.0  0.0      0     0 ?     S     9月27   0:00 [kthreadd]
  root     3  0.0  0.0      0     0 ?     S     9月27   0:00 [ksoftirqd/0]
  root     5  0.0  0.0      0     0 ?     S<    9月27   0:00 [kworker/0:0H
  ...

「ps aux --sort pid」でも同じ結果が得られます。

ですので、CPU使用率の順に出力するには、以下のように実行します。

  $ ps auxk %cpu
  USER   PID %CPU %MEM    VSZ   RSS TTY   STAT START   TIME COMMAND
  root     1  0.0  0.0  34260  3152 ?     Ss    9月27   0:04 /sbin/init
  root     2  0.0  0.0      0     0 ?     S     9月27   0:00 [kthreadd]
  ...
  usuda 3477  0.1  0.7 764280 56360 ?     Ssl   9月27   8:49 unity
  usuda 3563  1.5  1.4 1451764 114552 ?   Rl    9月27 115:18 compiz
  ...

おっと、少ない順になってしまいました。
多い順(大きい順)で出力するには、先頭に「-」をつけます。

  $ ps auxk -%cpu

メモリ使用率の場合は、「%mem」や「rss」を指定します。
(rss は、実際に使われている物理メモリの使用量です。)

また、「,」で区切って複数指定することも可能です。

  $ ps aux --sort -%cpu,-%mem

こうすると、まずはCPU使用率の順で、CPU使用率が同じ場合はメモリ使用率の順で、 出力されるようになります。

今回の宿題

今回の宿題は、

  UFWにアプリケーションを追加してみましょう。

です。

お題の最後にちらっとファイルの在処だけ書きましたので、 他のファイルを参考に設定ファイルをでっち上げてみてください。
(まだ、できるかどうか試していませんが…。)

あとがき

われわれは、日々失敗をやらかし、そこから何かを学んで、 成長していると言ってもいいのではないかと思います。

ここ数年、あらゆる方向? で失敗をやらかしてきたように思います。
ですので、他人が、失敗をどうリカバリしているのかということについては、 それなりに興味を持っております。

そんな中、以下の興味深い翻訳記事を見つけました。

障害の事後分析を読んで得た教訓 -「何がシステムを停止させるのか?」
http://postd.cc/lessons-learned-from-reading-postmortems/

事後分析の記録から得られたパターンが、網羅的に紹介されています。

障害の原因が簡潔に述べられていて、すべてにおいて耳が痛いです。
特に、エラーハンドリングと人間には、ぐさぐさっときました。

耳が痛いとかいいながらも、その痛みはすぐ忘れがちですので、 ときどき読み返したいと思います。

ちなみに、最後に参考文献が載っていますが、お察しの通り、翻訳記事のため、 いずれも英語です。

まあ、本来はオリジナルの記事を読むべきですので、 目を通したい…とは思っております。思うだけ、で終わらないようにせねば…。

 

今回も、ここまで読んでいただき、誠にありがとうございました。
年末までに1回、その後は徐々にペースを戻したいと思っております…。

 

「いますぐ実践! Linux システム管理」はこちらです。
メルマガの解除、バックナンバーなども、以下からどうぞ。
http://www.usupi.org/sysad/ (まぐまぐ ID:149633)

その他、作者に関するページは、概ね以下にございます。
http://www.usupi.org/kuri/ (まぐまぐ ID:126454)
http://usupi.seesaa.net/ (栗日記ブログ)
http://twitter.com/kuriking/ (twitter)
http://facebook.com/kuriking3 (facebook)
https://jp.pinterest.com/kuriking/ (pinterest)


[バックナンバーのトップへ] [Linux システム管理のトップへ]

トップ

バックナンバー
    [日付順] [目的別]

プロフィール

▼ リンク

独学Linux
Linuxデスクトップ環境に関する情報が満載です。 メルマガもありますよ。
Server World
CentOS 6をサーバとしたときの設定例が、これでもかというくらいたくさん載っています。 CentOS以外のディストリビューション(Fedora, Ubuntu)も充実しています。
LINUXで自宅サーバーを構築・導入(Fedora9)
Fedora9のインストールの仕方から管理方法まで、詳しく載っています。 SearchManには情報がもりだくさんです。
マロンくん.NET
〜サーバ管理者への道〜
Linuxをサーバとして使用するための、いろいろな設定方法が載っています。 マロンくんもかわいいです。 なんといっても、マロンくんという名前がいいですね!!
日経Linux
今や数少なくなってしまったLinuxの雑誌。ニュースやガイドもあります。
Linux Square − @IT
@ITが提供する、Linux の情報が満載。 載っていない設定方法はないんじゃないでしょうか。
gihyo.jp…技術評論社
Linuxに限らず様々な技術情報が満載のサイト。 SoftwareDesign誌も、 ソフトウェア技術者は必見です。
SourceForge.JP Magazine
Linux に限らず、オープンソース関連の記事が網羅されています。
ITmediaエンタープライズ:Linux Tips 一覧
Tips というより FAQ 集でしょうか。わからないことがあれば覗きましょう。
IBM developerWorks : Linux
開発者向けですが、勉強になりますよ。
Yahoo!ニュース - Linux
Yahoo!のLinuxに関するニュース一覧です。
栗日記
システム管理とかと全然関係ありませんが、毎日栗の絵を描いています。
システム管理につかれちゃったとき、癒されたいときに、ご覧ください。:-)
WEB RANKING - PC関連
ランキングに参加してみました。押してやってください。

▼ 作ってみました

Add to Google

▼ せんでん




▼ 最近読んだ本

▼ 気に入ってる本