ひるねこ日記

Linux編


<Linux設定>

Firewall BuilderをFedora Core5(FC5)にインストール

 IPTABLEの設定は私のような素人にはなかなか大変です。
今回はGUIで簡単にiptableの設定できるFirewall Builder(FWB)を使ってみました。
Fedora Core5(FC5)にはFirewall Builderがバンドルされています。
インストールされていない場合はyumでインストールしてください。

# yum install fwbuilder*

ネットワークの構成はルーターの下にサーバ、その下にクライアントが繋がっています。
ルータは家庭用の一般的なものです。ルータにDHCPサーバ機能をもたせています。
また、NATなどのIPアドレス変換もルータでおこなっています。
なお、サーバとクライアントが同列でルータに繋がっている場合でも動作します。

Firewall Builderの設定

プロジェクトの作成 GNOMEのツールバーの「アプリケーション」」「システムツール」に「Firewall Builder」があるので選択します。
最初は左のような画面が表示されるので、「新規プロジェクトファイルを作成する」をクリックし、「Next>」をクリックします。

ファイル名の設定  IPTABLEのスクリプトを作成するためのfwbファイル名を決めてください。(例:iptables)
保存する場所はFirewall Builderが読むことが出来るディレクトリを指定してください。(rootディレクトリではエラーがでます。)

リビジョンシステムの有効化  「このファイルのリビジョン制御システム(RCS)を有効化」を選択すると、履歴が残るので、過去の設定に戻ることができます。

新規ファイアウォール
初期画面 左側に「User」のセレクトボックスがあります。その下の緑のフレームに「User」からツリーになって「firewalls」「Objects」「Services」「Time」があります。

Firewall Builderのツールバー「オブジェクト」「新規オブジェクト」「新規ファイアウォール」の順で選択します。


画像をクリックすると拡大画像を見ることができます。

新規ファイアウォール 「新規ファイアウォール」を選択すると左の画面がひらきます。

「新しいオブジェクトの名前を入力してください。」 適当なスクリプト名を入力する。

「実行中のファイアウォールソフトの選択・・・・・」 「iptables」を選択する。

「新規ファイアウォールを実行するOSを選択・・」 「Linux2.4/2.6」を選択する。


「あらかじめ選択されたテンプレートオブジェクトを使用する」にチェックを入れる。

 上記で「あらかじめ選択されたテンプレートオブジェクトを使用する」にチェックを入れると代表的なテンプレートが6種類表示されます。

 今回は「web server」を選択して、後から公開したいアプリを追加するようにします。

ファイアウォールのルール設定
ファイアウォールの詳細設定 ファイアウォールという入力画面がポップアップ表示されます。
プラットフォームは「iptables」を選択
バージョンは「1.2.9以上」を選択して「変更の適用」をクリックしてください。

また「ホストOS設定」をクリックすると「カーネルのspoofing対策保護」や「pingの無視」などの設定が出来ます。

画像をクリックすると拡大画像を見ることができます。

IPアドレスの設定
IPアドレスの設定  デフォルトではeth0のIPアドレスが「192.168.1.10」になっていますので、自分のマシンにあったIPアドレスを設定しましょう。
eth0をダブルクリックすると設定画面が表示されますので、正しいIPアドレスを入力してください。

ネットワークの設定
ネットワーク入力  「Objects」の下に「Networks」があります。カーソルを「Networks」に合わせて、マウスの右ボタンをクリックして「新規ネットワーク」を選択します。
「ネットワーク」の入力画面がでますので、自分のネットワーク名、IPアドレス、ネットマスクを入力してください。

更に私は不正アクセスするサイトを接続拒否するためのdeny_hostという名前の新規ネットワークを作りました。
これは一つのネットワークしか指定できないので、私の場合、 後から、ferdorasrv.comさんの所の スクリプト を利用させてもらって、複数のIPアドレスを拒否するように設定するので仮のIPアドレスを入れました。

ルールの設定
ルールの設定  ルールの挿入は「右側のフォーム」の「ソース」の番号のところで、マウスを右クリックして「ルールの挿入」を選択してください。
ルールはマウスの右クリックで「挿入」「削除」「移動」などができます。
 他の項目の操作も同じようにマウスの右クリックで操作できます。

次は先ほど作った「networks」の「deny_host」をマウスでクリックドラッグして、作ったルールの「ソース」に落としこみます。
左の画面のようになります。
意味は「ソースのdeny_hostからの全てのアクセスは拒否(Deny)してログに記録する。」となります。

同じように、「mylan」もその下に作りましょう。この場合は「mylanからサーバへの全てのアクセスを許可(Accept)する」となります。

画像をクリックすると拡大画像を見ることができます。

サービスの設定
ルールの設定  サービスの設定は左側上のセレクトボックスの「User」を「Standard」に変更します。
すると「Services」の項目の下に「TCP」のフォルダが表示されます。ここに一般的なTCPのサービスがあります。
試しにどれかをダブルクリックすると、使用しているポート番号が表示されます。
設定の仕方は先ほどのルールの設定と同じでドラッグ&ドロップで「サービス」の項目に落とし込みます。
この設定で2のルールの所を見ると、インターネットを含んだ全てのネットワークから、Web、mail、FTPサーバが利用できるようになっています。
必要に応じて公開するサービスを決めてください。
又、DNSサーバを公開する場合は「TCP」の上にある「Groups」のなかに「DNS」がありますので、それをドラッグ&ドロップすれば「domain」のTCPとUDPが同時に設定できます。
1のルールを「すべて」でなく、個別に設定することもできます。
sambaサーバを自分のネットワークで運用したい場合は「Groups」のなかにある「Win2000」を使えば、簡単に設定できます。

画像をクリックすると拡大画像を見ることができます。

ここまでの設定を説明します。
ルール0: deny_hostの接続は遮断
ルール1: mylanネットワークからサーバへのアクセスは全て許可
ルール2: インターネット上にweb、mail、ftpサーバを公開
ルール3: サーバからのアクセスは全て許可
ルール4: ident(port113)はリジェクト
ルール5: 上記ルールに該当しないアクセスはすべて拒否

新規TCPサービスの設定
新規TCPサービスの設定  「Standard」に無いポートアドレス、たとえばProxyアドレスを8080で使いたい時はセレクトボックスを「User」に戻して「Services」の 「TCP」にカーソルを重ね、マウスの右ボタンクリックで「新規TCPサービス」を選択して入力画面を開きます。
そして左のように入力して、これを前記サービスの設定のように使用してください。
UDPも全く同じ操作で設定できます。

スクリプトの作成

今までの設定を保存してください。
スクリプトを作成するには、Firewall Builderの上にある歯車のアイコンをクリックしてください。
設定が保存されている場所にFirewallの名前(例の場合だとaquarius.fw)が出来ている筈です。
管理者権限になって、オーナーを管理者にして実行権限を与えてください。
スクリプトファイルを実行して、思った通りの設定になっているか確認してください。

# su -
# chown root:root ./aquarius.fw
# chmode +x ./aquarius.fw
# ./aquairus.fw
歯車の横のパソコンのアイコンをクリックすると/etcにインストールされますが、スクリプトを修正するので、この機能はつかいません。

スクリプトの修正

 複数のdeny_hostや国単位で遮断するために、ferdorasrv.comさんの所の スクリプトを修正して使用させていただきます。
特定国からのアクセス拒否ルールの自動更新をスクリプト(otherfilter_check.sh)で毎日一回実行するため、/etc/cron.dailyに保存します。
 また、aquarius.fwを/etc/rc.dに置くため、下記のように修正させていただきました。
なお、このスクリプトはiptableを起動するまえに一度実行しておく必要があります。
この例は中国(CN)と韓国(KR)を遮断する例です。

IPアドレスチェック情報取得(otherfilter_check.sh)
-------------------- ここから ----------------------------------------------
#!/bin/bash
  
# IPアドレス情報チェックを行うCountry CodeをCOUNTRYLISTにスペース区切りで指定
COUNTRYLIST='CN KR'
  
cd /tmp
  
# APNIC(http://www.apnic.net/)より最新のIPアドレス情報をダウンロード
# ※ローカルより新しい場合のみダウンロード
wget -q -N http://ftp.apnic.net/stats/apnic/delegated-apnic-latest
  
# IPアドレス情報更新チェック
switch=0
for country in $COUNTRYLIST
  do
      grep "apnic|$country|ipv4|" delegated-apnic-latest > $country.new
      diff -q $country $country.new > /dev/null 2>&1
      if [ $? -ne 0 ]; then
          switch=1
          /bin/mv $country.new $country
      else
          rm -f $country.new
      fi
  done
cd
  
# IPアドレス情報が更新されている場合のみiptables設定スクリプトを実行(ルール最新化)
[ $switch -eq 1 ] && /etc/rc.d/aquarius.fw> /dev/null
------------------- ここまで ----------------------------------------------

ipアドレス情報チェックスクリプトに実行権限をあたえる。
# chmod +x /etc/cron.daily/otherfilter_check.sh
スクリプトを実行する。
# /etc/cron.daily/otherfilter_check.sh

私はaquarius.fwを/etc/rc.dディレクトリの下におき、同じディレクトリのrc.localに/etc/rc.d/aquarius.fwを書いて起動時に動作するようにしています。
# mv ./aquarius.fw /etc/rc.d/
# echo '/etc/rc.d/aquarius.fw' >> /etc/rc.d/rc.local

deny_hostやspam_hostというテキストファイルを同様に/etc/rc.d/に作り、遮断するipアドレスを書いて起きます。
spam_hostはこちらからも相手からのアクセスも遮断。
deny_hostはこちらからのアクセスは許可、相手からのアクセスは遮断。

deny_hostやspam_hostの例
200.0.0.0/8
201.0.0.0/8

aquarius.fwの修正
aquarius.fwの全スクリプトはこちらをご覧下さい。

2006/10/14:スクリプトの間違いがありましたので訂正しました。
2006/12/06:説明に間違いがあったので訂正しました。
誤) # echo '/etc/rc.d/rc.local/aquarius.fw' >> /etc/rc.d/rc.local
正) # echo '/etc/rc.d/aquarius.fw' >> /etc/rc.d/rc.local

昼夜逆転さま、指摘ありがとうございます。
2006/12/08:双方向アクセス禁止スクリプトを追加しました。

©2005 hiruneko