Pocket

前回:さくらのVPSでDebianサーバ構築(その1・OSインストール~SSH接続)

こんにちは、Nitです。

前回から引き続き、ポートの設定~Webサーバ構築を書いていきたいと思います。

IPv6の無効化

普通に使用されているIPアドレスはIPv4なのですが、標準ではIPv6も有効になっており、
iptablesで個別にポート設定が必要になるので、ここでは無効化します。
IPv6については、ウィキペディアをご覧下さい。

# vi /etc/sysctl.conf ファイルの末尾に下記設定を追加して保存
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1

# sysctl -p 設定の反映 実行すると反映した設定が表示される。

iptablesとiptables-persistentのインストールと設定

iptablesはポート設定をするツール、
iptables-persistentは、再起動したときにiptablesの設定を有効にするツールです。
セットでインストールします。

# aptitude update 念のためパッケージ一覧を最新化
# aptitude install iptables iptables-persistent

インストール時に、「IPv6の設定ファイルを作りますか?」というような事を聞かれますが、
無効にしてあるのでここではNoにします。

上のコマンドでIPv4用の設定ファイル /etc/iptables/rules.v4 が作成されているので、書き換えます。
Debian Wikiさくらのサポート情報を参考にして、ここでは下記のようにしました。
(Debian Wikiでは見やすくコメントが付いていますが、設定反映後、コメントは全部消えます^^;)

# vi /etc/iptables/rules.v4
 全文書き換え
*filter
:INPUT DROP [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -d 127.0.0.0/8 ! -i lo -j REJECT –reject-with icmp-port-unreachable
-A INPUT -m state –state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp –dport 80 -j ACCEPT
 ↑サーバ用途によってお好みで。
-A INPUT -p tcp -m tcp –dport 443 -j ACCEPT
 ↑同上
-A INPUT -p tcp -m state –state NEW -m tcp –dport 10022 -j ACCEPT
 ↑前回設定したSSHのポート 間違えると設定反映/再接続後、SSH接続できなくなるので注意。
-A INPUT -p icmp -m icmp –icmp-type 8 -j ACCEPT
-A INPUT -m limit –limit 5/min -j LOG –log-prefix “iptables denied: ” –log-level 7
-A INPUT -j REJECT –reject-with icmp-port-unreachable
-A INPUT -p tcp -m tcp –tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP
-A INPUT -p tcp -m tcp ! –tcp-flags FIN,SYN,RST,ACK SYN -m state –state NEW -j DROP
-A INPUT -p tcp -m tcp –tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,PSH,ACK,URG -j DROP
-A FORWARD -j REJECT –reject-with icmp-port-unreachable
-A OUTPUT -j ACCEPT
COMMIT

# service iptables-persistent start ポート設定反映
# iptables -L 設定内容確認

Webサーバ構築

このままではSSHでログインできるただの箱なので、ついでにWebサーバの設定もしてしまいましょう。
ここではApache2を使用します。
(これまで一体何台の箱を作ってきたことか・・・ログインできれば満足してしまう性分です^^;)

参考にさせていただいたサイトはこちらです。
⇒Server Worldさん
⇒@IT たった2行でできるWebサーバ防御の「心理戦」
ほぼ書かれているとおりですが、説明も加えつつ・・・

# aptitude -y install apache2
 何はともあれインストール。
 -yオプションをつけると、「インストールしますか?」と表示されず自動でYESになる。

# vi /etc/apache2/conf.d/security
ServerTokens Prod HTTPリプライヘッダに含める情報を最小限に
ServerSignature Off エラーページのフッタに含める情報を最小限に

# vi /etc/apache2/mods-enabled/dir.conf
DirectoryIndex index.html index.htm
 ディレクトリ名だけ(http://www.xxxxxx.zzz/)でアクセスした時に左から順にファイルを探し、
 あったものを表示します。
 index.htmなどが不要であれば削除しても構いません。
 ちなみに mods-enabled フォルダ配下は、Apacheの追加モジュールの設定ファイルがあります。
 この内、有効なモジュールの設定ファイルは mods-available フォルダ配下に
 シンボリックリンクが張られます。
 (a2enmod / a2dismod コマンドで有効/無効を切り替えられますが、ここでは割愛します。)

# vi /etc/apache2/sites-available/default
 名前のとおり、デフォルトで読み込まれるWebサイトの設定ファイルです。
 ApacheのバージョンやOSによって異なるのかもしれませんが、
 他の解説サイトで良く見かける httpd.conf は、今回の構成では使いません。
 (サーバ内を探してみたのですが見つかりませんでした。)
 SSL設定時は default-ssl というファイルを使用しますが、複数のサイトで設定ファイルを分ける事もできます。
 下記書き換え

ServerAdmin xxxx@example.net
 利用者が緊急時に連絡するメールアドレスになるので、別サーバのものが良いそうです。
ServerName www.example.com
 サイトのURL。借りているドメインを設定します。DNSの設定も忘れずに。
 [DNS設定例]
 Aレコード:サーバのホスト名 – サーバのIPアドレス
 CNAMEレコード:www – サーバのホスト名

AllowOverride All
 .htaccess で設定された内容を全て有効化。
 本来は必要なもののみ有効にすべきなので、後々見直しが必要です。
 使用しない場合はNoneでも良いかもしれません。

# /etc/init.d/apache2 restart
 Apache再起動

Webブラウザで http://www.example.com/ にアクセスすると、
http://www.example.com/index.html の内容が表示されます。
(example.comは、設定したドメインに読みかえてください。)

今回はIPアドレスで直接アクセスした場合も制限していませんので、http://[IPアドレス]/ でも
アクセスできるかと思います。
ただ、それではセキュリティ上不安ですし、実際に運用する場合はここから色々と設定して頂ければと思います。

まだまだ調べる事が山積みですが頑張ります。(´▽`;)