レンタルサーバー・自宅サーバー設定・構築のヒント
レンタルサーバー・自宅サーバー設定・構築のヒント - レンタルサーバー・自宅サーバーの設定・構築情報を公開しています。

F8

FreeBSDでファイアウォール(ipfw)

2010年7月17日 2014年1月17日
how to firewall

さて、SSHでログイン もできるし、日本語環境 もできたので、さぁ、apacheでも・・・と思いきや。
まだまだ、やらねばならないことがあります。

今度は、ファイアウォールです。
セッティングすると言っても、とりあえず、ネットにつなげる以上は、セキュリティの制限をかけておく必要がありますね。

そこで、最低限パケットフィルタぐらいはかけておきましょう。

ということで、今回は、ファイアウォールを構築してみます。

格安レンタルサーバーでは、サーバーを借りる時には、すでに、この種の設定は、行われていますから、 何もする必要はありません。当たり前ですけど。

ファイアウォールは、linuxでは、iptablesなどを使ってやりますが、FreeBSDでは、ipfwなどを用いて実現します。
ipfwは、カーネルで提供されていて、デフォルトでインストールされています。(その昔は、自前でカーネルの再構築を行ってインストールする必要がありました。)

その古い手順のカーネルの再構築についてと、
新しい?手順のデフォルトでインストールされているipfwを有効にする手順について、簡単に解説してみたいと思います。

ipfwのインストール確認

ipfwが未インストールか確認します。インストール済なら、カーネルの再構築は必要ありません。

まずは、ipfwがインストール済か確認しておきましょう。カーネルの再構築は、時間的にもサーバー的にも浪費してしまうので、できれば避けたいところです。
ipfwがインストールされているか確認するには、以下のコマンド実行してみてください。

$ ipfw list
...

Commnad not found.以外が出力されればインストールはされていますので、カーネルの再構築は必要ありません。
ファイアウォールの設定の手順からやればOKです。

エラーメッセージで、以下のようなエラーがあります。
$ ipfw list
ipfw: getsockopt(IP_FW_GET): Protocol not available
$ ipfw -q -f flush
ipfw: setsockopt(IP_FW_FLUSH): Protocol not available
$ ipfw -q add 10 allow all from any to any via lo0
ipfw: getsockopt(IP_FW_ADD): Protocol not available
これらのエラーは、ipfw が有効になっていないことが原因の可能性があります。
/etc/rc.conf に、firewall_enable=”YES” を追記すれば、上記のようなエラーはなくなることがあります。
ただ、手順を誤るとSSHなどのリモートからのアクセスができなくなるかもしれませんので、ファイアウォールの設定の手順に沿って有効にしてください。

カーネルの再構築

あえて、ipfwのためだけにカーネルの再構築をやる方がおられるのかどうかわかりませんが、 とりあえず、古いバージョン(たぶんバージョン4以前)のFreeBSDでは、カーネルの再構築が必要なので、ここで簡単ながら解説しておきます。
( 少なくともバージョン6以降は、間違いなくインストールされていますので、カーネルの再構築は必要ないでしょう。 )

カーネルの再構築は必要のない方は、ファイアウォールの設定 へどうぞ。

カーネルの再構築とは、簡単にいうとOSのアップデートです。
WIndowsの世界では、ありえませんけど、UNIX(Linux/FreeBSDなど)の世界では、それほど珍しいことではありません。

カーネルで提供されるものを使いたいときは、自分で再構築(再コンパイルと言っても良いでしょう)を行います。

ここでは、ipfwがカーネルで提供されるので、再構築が必要になります。

では、再構築を行ってみましょう。

  1. カーネルの定義ファイルをコピーします。
    $ cd /usr/src/sys/i386/conf
    $ cp GENERIC EXAMPLE

     
    EXAMPLE: これから作成するカーネル名になります。
    通常、ドメイン名やホスト名などを使います。


  2. 新しいカーネルの定義ファイルを編集します。
    $ vi EXAMPLE
       :
       :
      cpu    I686_CPU    # -- 1.
       :
      # ident  GENERIC   # -- 2.
      ident  EXAMPLE
       :
      options IPFIREWALL # -- 3.
      options IPFIREWALL_VERBOSE
    1. CPUの種別を定義する

      cpu :使っているCPUの種別になります。
      不要なcpu種別は、削除しましょう。

      もし、自分の使っているCPUの種別がわからない場合は、以下のコマンドで確認しましょう。

      $ dmesg |  fgrep CPU
      CPU: Pentium III/Pentium III Xeon/Celeron (665.05-MHz 686-class CPU)

      最後の686-class CPUが、ここで定義されるべきCPUの種別に相当します。


    2. identを設定する

      カーネル名を指定します。
      ここでは、EXAMPLEになります。


    3. optionsを追加する

      追加したいカーネル提供の機能を記述します。
      ここでは、ipfwなので、IPFIREWALL(ipfw)とIPFIREWALL_VERBOSE(ipfwのロギング)を追加します。
      natdも使いたいなら、IPDIVERT(natd)も追加します。
      その他、以下のようなものもあります。

      IPFIREWALL_VERBOSE_LIMIT:ipfwのロギングの制限値(通常100を設定することが多いようです。)

      (補足)
      options IPFIREWALL_VERBOSE_LIMIT=100のように指定します。

      IPV6FIREWALL:ipv6用ipfw
      IPV6FIREWALL_VERBOSE:ipv6用ipfwのロギング
      IPV6FIREWALL_VERBOSE_LIMIT:ipv6用ipfwのロギングの制限値
      IPSEC:IPsec パケット暗号化
      IPSEC_DEBUG:IPsec パケット暗号化のデバッグ機能

      (補足)
      IPSECを使いたい場合は、
      device crypto
      も同時に指定します。
      指定しないとエラーが出るよ。


      ここでは、詳しく触れませんが、外向けに公開するつもりなら、ほとんど対応しておくべきでしょね。

      やっぱり、レンタルサーバーが、全然、楽なのがわかります。



    設定を終えたら、保存します。


  3. 新しいカーネルの定義で再構築します。
    $ /usr/sbin/config EXAMPLE
    Kernel build directory is ../compile/EXAMPLE
    Don t forget to do ``make cleandepend && make depend''
    
    $ cd ../compile/EXAMPLE
    $ make depend
       :
    $ make
       :
    $ make install
       :


    1回目は、多少時間がかかります。このおんぼろマシンでは、数時間かかりました。
    2回目以降は、追加分のみ再構築になるので、それほど時間はかかりません。(数分だったかな?)


  4. すべて終えたら、リブートします。
    $ shutdown -r NOW
    システムの再起動は、以下のコマンドでもOKです。
    $ reboot

    リブートして、うまく立ち上がらない場合は、古いカーネルは/kernel.oldとして残っていますので、起動時のBoot:と表示されたときに kernel.oldとすれば古いカーネルで起動します。

ファイアウォールの設定

  1. ipfwが動くか確認します。
    $ ipfw list
       :

    Commnad not found.以外が出力されればOKです。


  2. IPフィルターのスクリプトを作成します。
    $ vi /usr/local/etc/ipfw.rules

    このファイルの内容は、以下のような感じです。


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    
    #! /bin/sh
    #
    
    IPF="ipfw -q add"
    ipfw -q -f flush
    
    #loopback
    $IPF 10 allow all from any to any via lo0
    $IPF 20 deny all from any to 127.0.0.0/8
    $IPF 30 deny all from 127.0.0.0/8 to any
    $IPF 40 deny tcp from any to any frag
    
    # statefull
    $IPF 50 check-state
    $IPF 60 allow tcp from any to any established
    $IPF 70 allow all from any to any out keep-state
    $IPF 80 allow icmp from any to any
    
    # open port ftp (20,21), ssh (22), mail (25)
    # http (80), dns (53) , ntp(123) , https(443) mail-over(587) imaps(993 or 995) etc
    $IPF 90 allow tcp from any to any 20 in
    $IPF 100 allow tcp from any to any 20 out
    $IPF 110 allow tcp from any to any 21 in
    $IPF 120 allow tcp from any to any 21 out
    $IPF 130 allow tcp from any to any 22 in
    $IPF 140 allow tcp from any to any 22 out
    $IPF 150 allow tcp from any to any 25 in
    $IPF 160 allow tcp from any to any 25 out
    $IPF 170 allow udp from any to any 53 in
    $IPF 175 allow tcp from any to any 53 in
    $IPF 180 allow udp from any to any 53 out
    $IPF 185 allow tcp from any to any 53 out
    $IPF 200 allow tcp from any to any 80 in
    $IPF 210 allow tcp from any to any 80 out
    $IPF 220 allow tcp from any to any 123 in
    $IPF 230 allow tcp from any to any 123 out
    $IPF 240 allow tcp from any to any 443 in
    $IPF 250 allow tcp from any to any 443 out
    $IPF 260 allow tcp from any to any 587 in
    $IPF 270 allow tcp from any to any 587 out
    $IPF 280 allow tcp from any to any 993 in
    $IPF 290 allow tcp from any to any 993 out
    $IPF 300 allow tcp from any to any 995 in
    $IPF 310 allow tcp from any to any 995 out
    
    # deny and log everything
    $IPF 500 deny log all from any to any

    5 行目 : フィルター情報の初期化を行っています。
    21-44 行目 : 各TCPポートを開いています。
    – ここで必要でないポートは、削除しましょう。また、上記以外で開いておく必要があるポートは、ここに追記しましょう。

    IPファイルターの追加コマンドのパラメータは、以下のとおりです。

    ipfw -q add [テーブル番号] [allow/deny] [tcp/udp] from [ip] [port] [in/out]

    21-44 行目 では、各TCP番号毎にin/outを許可(allow)/規制(deny)を設定してます。

  3. IPフィルターのスクリプトを立ち上げ時に実行するようにします。
    $ vi /etc/rc.conf
    ...
    
    firewall_enable="YES"
    firewall_script="/usr/local/etc/ipfw.rules"

    最後の2行を追加します。

    また、ipfwがデフォルトでインストールされている場合、あるいは、先のカーネルの再構築で IPFIREWALL_VERBOSE を有効にされた場合は、ロギングを有効にすることができます。
    firewall_logging=”YES”
    と追記することで、
    /var/log/の下に
    ipfw.today、ipfw.yesterday のようなロギングが作成されるようになります。

    IPSECは、相手が対応していれば、暗号化が自動的に行われます。


  4. すべて終えたら、再起動します。
    再起動の前に必ずSSHのポートぐらいは、間違いがないか、再確認しておきましょう。
    もし、間違ってSSHのポートまで閉じてしまっていたらリモートでログインできなくなってしまいます。要注意です。

    再起動は、システムの再起動が一番簡単でしょう。

    $ shutdown -r NOW
    システムの再起動をしたくない場合は、ipfwを起動することでも同じ効果を得ます。
    $ /etc/rc.d/ipfw start
    これでOKのはずです。

    再起動の後、ipfwのリストを表示してみましょう。

    $ ipfw list
    ...

    問題なければ、IPフィルターのスクリプトで記述した内容が出力されるはずです。


ざっと、こんな感じです。
最近では、カーネルの再構築をしないといけないようなことは、ほとんどなくなりましたね。
それでも、カーネルの再構築と言われれば、ちょっと、びっくりされるかもしれません。でも、一度でもやってみると、慣れるものです。

Linuxでは、先にも記述したようにipatablesなどを用いて同じような設定を行います。

また、ここで記述しているフィルターは、最低限必要なフィルターのみを設定しています。
これ以外にもブラックリストに載っているIPアドレスからのアクセスを規制したり、中国からのアクセスを禁止したり、いろんなことができます。

サーバーを公開するつもりなら、絶対、設定しておきましょう。

このあたりは、共有のレンタルサーバーでは、ほとんど扱うことがないと思います。 しかし、これからサイトが大きくなっていくと、いずれは、共有のレンタルサーバーでは、すまなくなるかもしれません。

ひょっとすると、VPSや専用サーバーを丸ごと借りたり、本格的に自宅サーバーを立ち上げる・・なんてこともあるかもしれません。

そのための準備だと思ってがんばりまっしょ。

さくらのVPSでは、FreeBSDをカスタムOSとして提供しています。(コントロールパネルからインストールして利用することができます)
さくらインターネットのVPS ( さくらのVPS )を試してみたい方は、http://vps.sakura.ad.jp/からどうぞ。無料お試し期間は14日です。
※お試し期間中は、OP25B設定、データ転送帯域に制約がありますから注意してください。

ご利用のブラウザは、広告ブロック(AdBlockなど) が適用となっていませんか?
このサイトでは、コンテンツの一部が非表示、あるいは、コメント、お問い合わせの投稿ができない検索ができないことがあります。


関連記事 :

最初にやっておきたいこと(FreeBSD編)

先のFreeBSD 9.0 をインストールしてみたからの続きの記事になります。 FreeBSDのインストールを終えたら、最初になに ...

FreeBSDでバイナリ package を作って配布する方法

FreeBSDのソフトウェアのパッケージ管理システムは、ビルド済み( バイナリ )パッケージをインストールするpackageとソースをビルドする ...

FreeBSDでSSHを使えるようにする

FreeBSD 8 をインストールしてみた でFreeBSDのインストールまで終わりました。 さて、ここから、サーバーの設定を始めて行くわ ...

.htaccessで特定のホストからのアクセスを拒否する

今回は、apacheのアクセス規制です。 ここでの話は、FreeBSDもCentOSも関係なく、apacheの設定です。 一般的に、リダ ...

FreeBSD 9.0 をインストールしてみた

以前にFreeBSD 8 をインストールしてみた で FreeBSDの8.x をインストールしました。 今回は、最新バージョンの FreeBS ...



コメントを投稿 :

お名前 *

メールアドレス *
( メールアドレスが公開されることはありません。)

サイトアドレス

コメント *

* 印の項目は、入力が必要な項目です。




最近投稿の記事

[ 画像提供元 : Amazon ] 先日、1TBのディスクの入れ替え時にバックアップをとろうとディスクコピーを行いました。 その際 ...

Windows で Linux ファイルシステム Ext4 のディスクをマウントするには? Ext3Fsd が、おそらく、最も簡単なツール ...

今回は、Windows で Compass を使ってみました。 Compass とは、 Sass(サス、Syntactica ...

今回は、Anti Adblock を使ってみました。 Anti Adblock とは、 そもそも Adblock という ウェブ ...

デスクトップ環境でない サーバーで、Webページのキャプチャー画像をコマンドで撮る には、wkhtmltoimage, CutyCapt ...


さくらのVPS 全プラン リニューアルです。(石狩(北海道)も選択可)


root権限ありで ¥685 / 月 ~ と非常にリーズナブルな CPU 1(core)の 512 プランから、 最高 CPU 10(core), メモリ 32(GB), SSD容量 800(GB) までとプランが充実。
ディスクは、SSDとHDDの選択が可能になった他、データセンターは人気の東京、石狩(北海道)となりました。

また、どのプランでも好きなOSが選べます
( CentOS, Fedora, Scientific Linux, FreeBSD, Ubutu, Debian )

管理人もおすすめのVPSです。
試用期間がありますから、一度、お試しを!!

詳しくは、http://vps.sakura.ad.jp/さくらのVPSのサイトへ へどうぞ!!

カテゴリ


Serverman@VPS 完全1ヶ月無料 キャンペーン実施中です。


Serverman@VPS 完全1ヶ月無料 キャンペーン実施中です。
最近、スワップにも対応した Serverman@VPS は、かなりリーズナブルかもです。

  • メモリ1GB~2GBのEntryプラン :月額:490円
  • メモリ2MB~4GBのStandardプラン :月額:980円
  • メモリ4GB~8GBのProプラン :月額:1,980円

新規申し込みで1ヶ月間完全無料となるキャンペーンを実施中です。
Serverman@VPSの特徴は、安さとIPv6対応です。また、初期設定費0円もポイントです。

IPv6でちょっと遊んでみたい方には、おすすめかもしれませんね。最低利用期間もありませんから、気に入らないときは即解約もできます。

Serverman@VPSの詳細については、 http://dream.jp/vps/ Serverman@VPSのサイトへへどうぞ。



KVM採用 ConoHa VPSは、時間単位で借りれる便利なVPSです。


ConoHa VPS は、初期設定費0円最低利用期間無し時間単位で清算可能、 さらに、Web APIを使って自動化を図ることもできる便利なVPSです。

海外サーバー設置も可能で、ローカル接続にも対応と、かなり、機能豊富なサーバーです。

新規ユーザ登録で、クーポンもらえますから、まずは、お試しですね。

ConoHa VPSの詳細については、
http://www.conoha.jp/ へどうぞ。

KVM採用 お名前.com VPS(KVM) 2G プラン 初期設定費無料 キャンペーン 実施です。


メモリ2GBプラン CPU:3core、Disk:200GB
月額:1,153円から (初期設定:1,680円0円)

さくらのVPSがリニューアルされてもなんのその。
1GBメモリ / 2Core を ¥834 – の格安価格で提供中です!
間違いなくスペックからすると割安感ありです。
年間割引時の途中解約で返金がないのは、 ちょっと残念ですが、それでもこの割安感は魅力です。

まずは、お試しですね。

お名前.com VPS(KVM)の詳細については、
http://www.onamae-server.com/vps/ へどうぞ。(お試し期間が15日あります。)



  • ソーシャルブックマーク

  • はてなブックマークへ追加するはてな登録数
ページトップへ
Time : 0.6140 [s]