さて、SSHでログイン もできるし、日本語環境 もできたので、さぁ、apacheでも・・・と思いきや。
まだまだ、やらねばならないことがあります。
今度は、ファイアウォールです。
セッティングすると言っても、とりあえず、ネットにつなげる以上は、セキュリティの制限をかけておく必要がありますね。
そこで、最低限パケットフィルタぐらいはかけておきましょう。
ということで、今回は、ファイアウォールを構築してみます。
格安レンタルサーバーでは、サーバーを借りる時には、すでに、この種の設定は、行われていますから、
何もする必要はありません。当たり前ですけど。
ファイアウォールは、linuxでは、iptablesなどを使ってやりますが、FreeBSDでは、ipfwなどを用いて実現します。
ipfwは、カーネルで提供されていて、デフォルトでインストールされています。(その昔は、自前でカーネルの再構築を行ってインストールする必要がありました。)
その古い手順のカーネルの再構築についてと、
新しい?手順のデフォルトでインストールされているipfwを有効にする手順について、簡単に解説してみたいと思います。
- 目次
- 履歴
2010年7月17日 初版
ipfwのインストール確認
まずは、ipfwがインストール済か確認しておきましょう。カーネルの再構築は、時間的にもサーバー的にも浪費してしまうので、できれば避けたいところです。
ipfwがインストールされているか確認するには、以下のコマンド実行してみてください。
|
Commnad not found.以外が出力されればインストールはされていますので、カーネルの再構築は必要ありません。
ファイアウォールの設定の手順からやればOKです。
|
/etc/rc.conf に、firewall_enable=”YES” を追記すれば、上記のようなエラーはなくなることがあります。
ただ、手順を誤るとSSHなどのリモートからのアクセスができなくなるかもしれませんので、ファイアウォールの設定の手順に沿って有効にしてください。
カーネルの再構築
( 少なくともバージョン6以降は、間違いなくインストールされていますので、カーネルの再構築は必要ないでしょう。 )
カーネルの再構築は必要のない方は、ファイアウォールの設定 へどうぞ。
カーネルの再構築とは、簡単にいうとOSのアップデートです。
WIndowsの世界では、ありえませんけど、UNIX(Linux/FreeBSDなど)の世界では、それほど珍しいことではありません。
カーネルで提供されるものを使いたいときは、自分で再構築(再コンパイルと言っても良いでしょう)を行います。
ここでは、ipfwがカーネルで提供されるので、再構築が必要になります。
では、再構築を行ってみましょう。
- カーネルの定義ファイルをコピーします。
$ cd /usr/src/sys/i386/conf $ cp GENERIC EXAMPLE
EXAMPLE: これから作成するカーネル名になります。
通常、ドメイン名やホスト名などを使います。
- 新しいカーネルの定義ファイルを編集します。
$ vi EXAMPLE ... cpu I686_CPU # -- 1. ... # ident GENERIC # -- 2. ident EXAMPLE ... options IPFIREWALL # -- 3. options IPFIREWALL_VERBOSE
- 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の種別に相当します。
- identを設定する
カーネル名を指定します。
ここでは、EXAMPLEになります。
- 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
も同時に指定します。
指定しないとエラーが出るよ。
ここでは、詳しく触れませんが、外向けに公開するつもりなら、ほとんど対応しておくべきでしょね。
やっぱり、レンタルサーバーが、全然、楽なのがわかります。
設定を終えたら、保存します。
- CPUの種別を定義する
- 新しいカーネルの定義で再構築します。
$ /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回目以降は、追加分のみ再構築になるので、それほど時間はかかりません。(数分だったかな?)
- すべて終えたら、リブートします。
$ shutdown -r NOW
システムの再起動は、以下のコマンドでもOKです。$ reboot
リブートして、うまく立ち上がらない場合は、古いカーネルは/kernel.oldとして残っていますので、起動時のBoot:と表示されたときに kernel.oldとすれば古いカーネルで起動します。
ファイアウォールの設定
- ipfwが動くか確認します。
$ ipfw list ...
Commnad not found.以外が出力されればOKです。
- 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)を設定してます。
- 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は、相手が対応していれば、暗号化が自動的に行われます。
- すべて終えたら、再起動します。
再起動の前に必ずSSHのポートぐらいは、間違いがないか、再確認しておきましょう。
もし、間違ってSSHのポートまで閉じてしまっていたらリモートでログインできなくなってしまいます。要注意です。
再起動は、システムの再起動が一番簡単でしょう。
$ shutdown -r NOW
システムの再起動をしたくない場合は、ipfwを起動することでも同じ効果を得ます。
これでOKのはずです。$ /etc/rc.d/ipfw start
再起動の後、ipfwのリストを表示してみましょう。
$ ipfw list ...
問題なければ、IPフィルターのスクリプトで記述した内容が出力されるはずです。
最近では、カーネルの再構築をしないといけないようなことは、ほとんどなくなりましたね。
それでも、カーネルの再構築と言われれば、ちょっと、びっくりされるかもしれません。でも、一度でもやってみると、慣れるものです。
Linuxでは、先にも記述したようにipatablesなどを用いて同じような設定を行います。
また、ここで記述しているフィルターは、最低限必要なフィルターのみを設定しています。
これ以外にもブラックリストに載っているIPアドレスからのアクセスを規制したり、中国からのアクセスを禁止したり、いろんなことができます。
サーバーを公開するつもりなら、絶対、設定しておきましょう。
このあたりは、共有のレンタルサーバーでは、ほとんど扱うことがないと思います。 しかし、これからサイトが大きくなっていくと、いずれは、共有のレンタルサーバーでは、すまなくなるかもしれません。
ひょっとすると、VPSや専用サーバーを丸ごと借りたり、本格的に自宅サーバーを立ち上げる・・なんてこともあるかもしれません。
そのための準備だと思ってがんばりまっしょ。
このサイトでは、コンテンツの一部が非表示、あるいは、コメント、お問い合わせの投稿ができない、検索ができないことがあります。
コメントを投稿 :