爬虫類嫌いのPython日記

爬虫類が大の苦手の筆者が、Pythonに挑戦。他にも、RubyやObjective-C、Google Appengine、Herokuなど色々とチャレンジしています。

WEB系の新人が困らないように基本を復習〜ネットワークの設定

昨日のエントリでは、WEBサーバーのApacheのインストールまでをやりました。
しかし、まだネットワークの設定を行っていないので、このWEBサーバーにブラウザにアクセスする事ができません。
そこで、今回はネットワークの設定を行います。

IPアドレスの確認

VirtualBoxで仮想ハードドライブを作成する時に、ネットワークにブリッジアダプタを設定していたので、もうこのOSからは外部への通信を行うことが出来ます。
試しに、pingを打ってみましょう。

ping www.yahoo.co.jp
Ping www.g.yahoo.co.jp(xxx.xxx.xxx.xxx)56(84) bytes data.
64 bytes from f8.top.vip.ogk.yahoo.co.jp (xxx.xxx.xxx.xxx): icmp_seq=1 ttl=52 time=25.6ms

Ctrl+cを押すまで、延々続きます

上記のような状態になれば、問題なく外部と通信できています。
Netwrok Unreachableなどのエラーが出ている場合、まずその問題を解決する必要があります。

問題なく通信が出来ているのを確認したら、IPアドレスを確認します。

ifconfig

上記のコマンドで、IPアドレスの確認が出来ます。
eth0の項目内で、

inet addr:xxx.xxx.xxx.xxx

の数字の部分(上記で、xxx.xxx.xxx.xxxの部分が数字になります)がIPアドレスになります。

iptablesの編集

iptablesとは、外部からアクセスするポートの設定を管理するファイアウォールです。
デフォルトでは、HTTPアクセスの80番ポートは閉じているので、開けてやる必要があります。
またHTTPSアクセスの443番ポートも開けてあげると良いでしょう。

ルールの確認
sudo iptables -L

ルールの破棄
sudo iptables -F

pingの受け取りを許可
sudo iptables -A INPUT -p icmp -j ACCEPT

lo Interfaceを通るパケットを許可
sudo iptables -A INPUT -i lo -j ACCEPT

接続が確立しているパケット、接続を許可したパケットのプロトコルに関連のあるパケットを許可
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

ローカルネットからのパケットを許可
sudo iptables -A INPUT -s 192.168.xxx.0/24 -j ACCEPT

SSH用ポートを許可
sudo iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT

HTTP用ポートを許可
sudo iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT

HTTPS用ポートを許可
sudo iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT

拒否されたICMPパケットにエラーパケットを返す
sudo iptables -A INPUT -j REJECT –reject-with icmp-host-prohibited

ルールを保存する
sudo /etc/init.d/iptables save

今回は、開発環境用のファイアーウォールと言う事で、許可しかしていないユルユルのルール設定になっています。
ネット上に公開するサーバーの場合は、基本的にすべてのアクセスを拒否しておいて、許可するルールだけを追加するのが正しい設定のやり方です。

例)全てのアクセスを拒否
sudo iptables -P INPUT DROP
sudo iptables -P OUTPUT DROP
sudo iptables -P FORWARD DROP

SELinuxの無効化

SELinuxは、有効になっていると正しく動作しないアプリケーションもあります。
そこで、SELinuxを無効にします。
まずは、SELinuxの状態を確認します。

sudo getenforce

Disabledと表示されれば、既に無効になっているので、以下の作業は必要ありません。
Enforcingかpermissiveと表示されれば、まだ有効なままなので、無効化します。

viで設定ファイルを開く
sudo vi /etc/sysconfig/selinux

以下を変更する
SELINUX=enforcing
↓
SELINUX=disabled

変更が完了したら、CentOSを再起動
sudo reboot

起動したら、ユーザーでログインし、

sudo getenforce

Disabledと表示される事を確認してください。

httpd.confの設定

Apacheの設定ファイルは、httpd.confです。
このファイルを編集して、Apacheの設定を行います。
大変、重要なファイルなので、必ずバックアップを取ってから作業を行いましょう。
まずは、httpd.confのバックアップを行います。

sudo cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.default

では、httpd.confファイルを編集してみましょう。

sudo vi /etc/httpd/conf/httpd.conf

まずは、ServerTokens OSとなっている部分を変更します。

ServerTokens Full

これでレスポンスヘッダに全ての情報を返してくれるようになります。
一般に公開する場合は、ServerTokens Prodにして、最小限の情報しか返さないようにします。

次にKeep Alive Offの部分をOnに変更します。

次にコメントアウトしてあるServerName www.example.com:80の部分を、任意のサーバー名に変更します。
開発サーバーなので、localhost:80とかにすれば良いでしょう。

簡単ですが、以上です。
ブラウザで、先ほど確認したIPアドレスを入力してみてください。
Apacheのテスト画面が表示されればOKです。
(IPアドレスでアクセスするのが面倒だと感じる人は、Windowsのhostsファイルを書き換えて、localhost等でアクセスできるようにすると良いでしょう)


httpd.confファイルは、今後、色々と追加や変更をする事になるファイルなので、一通り目を通しておくと良いでしょう。

最後に

今回のサーバー設定の部分は、ローカルの開発環境の場合と、一般に公開する場合とで大きく設定が異なります。
開発環境の場合は、出来るだけ多くの情報を得られるように設定しますが、一般に効果薄る場合は、セキュリティを考慮して、最小限の情報しか開示しないようにし、攻撃などに対する備えなども必要になります。
ネットワークの設定と一言に言っても、専門的に勉強すれば、とても奥が深い部分なのです。