- お知らせ -
  • 当wikiのプログラムコードの表示を直してみました(ついでに長い行があると全体が下にぶっ飛ぶのも修正)。不具合があればBBSまでご連絡下さい。

Ubuntu

はじめに Edit

ソフトウェアファイアウォールのiptablesを簡単に利用するためのufwの設定について。

Ubuntu 8.04から ufw という簡易Firewall設定機能が搭載されたようなので、
それを使ってみます。

ufwはどうもバージョンによって機能が違うようなので、確認環境に注意してこのページを参考にしてください。

以下の公式ドキュメントも参考にしてください。

動作確認環境は、

  • Ubuntu 10.04 LTS server amd64

まだ書きかけです。すいません

ここでの指針 Edit

  • 基本、外からは来るのはふさぐ(deny(DROP))
  • 内側から通信はOK
  • 外から通信のうち必要なものだけ(サーバー周り)はあける
  • セッションが確立されたものは通す(=内側から始まった通信は外からも通す)
  • シェルスクリプトで書いて、一括実行
  • sshなどいくつかのサービスはLAN内からのみ接続可能

※このへんのセキュリティポリシー的なものはネットワーク管理者とも相談して決めてください

ufwのデフォルト設定では( /etc/default/ufw等にも記載がありますが)、
Ubuntu 10.04 の時点では外から防ぐ(DROP)、外へはOK(ACCEPT)、転送は防ぐ(DROP)、一度確立した通信は通す(RELATED,ESTABLISHEDのACCEPT)、などとなっており、
このポリシーとかなり近いのである程度そのまま使えます

nmapで空いているポートを確認 Edit

まずはファイアウォールを設定する前に空いているポートを念のためnmapで確認しておきます。
※ nmapは自分の管理外のマシンやネットワークに使うとアタックしているとみなされることもあります。注意ください!!
(プロバイダや警察等から警告きたり、その後いろいろ(以下略)な可能性あります)

サーバーとは別のマシンから、例えば以下を実行してみます。
(Windowsでnmapが入っていない場合は、どこかからダウンロードできるとおもう)

nmap -P0 -T4 -p 1-65535 -oN nmap-log.txt --append-output -r -v -A (対象のサーバのアドレス)

オプションの簡易説明は以下

  • "-P0" ホストの発見処理を省略する(調べるホストが分かっている場合)
  • "-T4" デフォルト(-T3)よりも高速にスキャンする
  • "-p 1-65535" でおよそ使われると思われる全ポート 1〜65535 を指定(-pなしだとデフォルトは〜1024までになる)
  • "-oN" で通常の出力をファイルに保存(同時に画面にもちゃんとでます)
  • "--append-output" でファイルに追記する(ないと新規上書き)
  • "-r" ランダムなスキャンをやめ、順次スキャンする
  • "-v" 詳細な出力
  • "-A"で OSの検出と、サービスの検出をする
  • (対象のサーバのアドレス)にて、今回調べるファイアーウォールを設定する前のマシンのIPを指定

細かいオプションの説明は以下で確認してみてください。

終わったら、nmap-log.txtを開いて
サーバーソフトなどを立てている場合は「うわ、ポート開いているなー」などと恐怖してみてください。

実際の作業 Edit

通常、ufwでは一つずつコマンドを打ちながら、許可、拒否など設定すると思いますが、
ここでは、一旦、スクリプトで書いて一気に実行することにしてみます。
(設定を残しておく意味合い)

以下を /usr/local/sbin/setup_ufw などとして保存しておきます。

  • 最低限のsshのみ設定(他のアプリは後述)
$ cd /usr/local/sbin/
$ sudo vim setup_ufw  # 
$ sudo chmod u+x setup_ufw   # 実行出来るように権限変えておく

基本的な /usr/local/sbin/setup_ufw の内容例:

#!/bin/sh

# ローカル用にサービスを許可したい範囲を設定
# ・サービスを開放するマシンの範囲を書く
# ・開放するマシンが一台の場合は、IP直指定で(例: 192.168.0.10)。
# ・サブネット内にオープンするなら、サブネットの範囲指定で(例: 192.168.0.0/24)
local_trusthost='(許可したい範囲)'

# ssh接続を許可する
# ・/etc/ssh/sshd_config でポートを変更している場合は "22" から要変更!
ssh_port=22
sudo ufw allow proto tcp from $local_trusthost to any port $ssh_port

# ↓ここの間にアプリケーションごとの許可設定を書く

# ↑ここの間にアプリケーションごとの許可設定を書く

# ufwへの有効化(ルールの再適用含む)
sudo ufw disable && sudo ufw enable
# 設定の確認
sudo ufw status

上記だけの設定での出力例:
※ssh以外のサービスへアクセスできなくなるので注意してください(もしくは後述のアプリごとの設定をやってから)

$ sudo /usr/local/sbin/setup_ufw
すでに存在するルールは追加せずに飛ばします
ファイアウォールを無効にし、システム起動時にも無効にします
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
ファイアウォールはアクティブかつシステムの起動時に有効化されます。
Status: active

To                         Action      From
--                         ------      ----
22/tcp                  ALLOW       192.168.0.0/24

アプリごとの設定 Edit

あとは、公開の必要なサーバーがある場合は、/usr/local/sbin/setup_ufw の下記のところに
書いていきます。

# ↓ここの間にアプリケーションごとの許可設定を書く

# ↑ここの間にアプリケーションごとの許可設定を書く

例:アプリケーションごとのプリセット(app指定)を利用してローカルネットワーク内だけにSambaを許可設定した例 Edit

sudo ufw allow from $local_trusthost to any app Samba

app指定について Edit

例のように app Sambaのようにアプリ名で簡単に指定できる代表的な設定は、

$ sudo ufw app list

で名前を一覧できます。

実際に設定される内容(ポート/プロトコル等)は、

$ sudo ufw app info Samba

で見られます。

ただし、サーバーのポートを設定で変えている場合はそのまま使えないです。

その場合は、app用の設定ファイルがおかれている /etc/ufw/applications.d/ 以下のファイルをコピーして、
titleとportsを書き換えてやればいいと思います。

例えばSSHの場合、app OpenSSHを指定したいところですが、
ポートを22から12345に変えている場合は、

$ cd /etc/ufw/applications.d/
$ sudo cp openssh-server openssh-server-another
$ sudo vim openssh-server-another

して、openssh-server-anotherの最初の[]内の名前とportsを編集してみます。

openssh-serverとの差分は以下の通り。

$ diff -u openssh-server openssh-server-another 
--- openssh-server      2010-05-20 02:30:44.000000000 +0900
+++ openssh-server-another      2010-07-01 20:50:54.777347299 +0900
@@ -1,4 +1,4 @@
-[OpenSSH]
+[OpenSSH Another]
 title=Secure shell server, an rshd replacement
 description=OpenSSH is a free implementation of the Secure Shell protocol.
-ports=22/tcp
+ports=12345/tcp

確認してみます。

$ sudo ufw app list
$ sudo ufw app info "OpenSSH Another"
プロファイル: OpenSSH Another
タイトル: Secure shell server, an rshd replacement
Description: OpenSSH is a free implementation of the Secure Shell protocol.

Port:
  12345/tcp

あとは、setup_ufwでsshのポートを直接指定していた代わりに以下を書いておけばよいわけですね。

sudo ufw allow from $local_trusthost to any app "OpenSSH Another"

(途中)

アプリごとの設定をしたら、同様に以下で有効化します

$ sudo /usr/local/sbin/setup_ufw

nmapで再度試す Edit

nmapで空いているポートを確認 をもう一度、試してみて
ポートが開いてないか確認します。

…と思ったけど、〜65536ポートまでチェックするとメチャメチャ時間かかるね、さすがに。

[TODO]:ページ内リンクちゃんと張る

確認 Edit

各サービスが使えるか実際に確認してみましょう。

参考リンク Edit


No comment. Comments/Ubuntu/ufw(firewall)?

Name:

Front page   Edit Freeze Diff Backup Upload Copy Rename Reload   New Pages Search Recent changes   Help   RSS of recent changes
Last-modified: 2010-07-01 Thu 21:02:24 JST (2637d)