内容が古い可能性がありますのでご注意ください。
いよいよWebサイトを外部に公開します。
外部に公開する前に今一度セキュリティを再確認し、その後ルーターの設定変更とiptablesの設定を変更して外部にWebサイトを公開します。
※自宅サーバーにドメイン名にてアクセスするには、事前にダイナミックDNSの設定が必要です。
外部に公開する前の準備
これまで構築してきた自宅サーバーは、外部からの要求に応じて様々なサービスを提供します。
ネットワーク上に流れるデータは「パケット」と呼ばれ、各パケットには送信元と送信先を示すヘッダーがつけられます。サーバーはその外部からのサービスのリクエスト内容をヘッダーを見て識別します。
今まで構築してきたサーバーのサービスは「TCP/IP」階層モデルというプロトコル階層モデルにおいて、アプリケーション層という階層に属します。アプリケーション層はその下にあるトランスポート層のTCP、UDPパケットのヘッダー部分に埋め込まれている「ポート番号」から、リクエスト元がどのサービスを要求しているのかを判断します。
ですので、外部にサービスを解放する場合は、提供するサービスのポートも同時に開放する必要があります。通常、ポートはファイアウォールにて塞がれています。
今回のサーバー構築においてはファイアウォールを「ルーター」と「iptables」で構築していますので、それぞれの設定においてポートを開放する必要があります。
ポート開放の方針
原則、ポートは全て塞ぎ、必要なポートのみ開放します。ポート開放はサーバーのセキュリティに穴を空けることになりますので、必要最小限のみ開放し、開放したポートに関してはセキュリティチェックを強化するようにします。
ルーターでの設定
まずルーター側でセキュリティ対策を行った後、「ポートフォワーディング」を用いてポートを開放し、自宅サーバーにリクエストを振り向けるようにします。
1.管理画面自体のセキュリティ
市販ルーターでは、ルーターの管理画面にWebブラウザからアクセス出来るものが多いかと思います。
その管理画面にはログイン情報が必要なケースが多いと思いますが、ルーターによっては初期状態ではパスワード保護がされていない場合がありますので、その場合は必ず設定します。
2.PING対策(ICMP パケットフィルタリング)
主に相手のホストが生きているかどうかを使用されるコマンドに「ping」があります。
pingコマンドはICMPパケットを用いてやり取りしますので、今回のような自宅LAN内からのみ管理する場合は、外部からのping応答を行う必要はありませんのでルーターにて応答しないようにします。
※iptablesにおいては、ファイアウォールを構築するの過程においてpingに応答する前提で対策が施されています。
ルーターにおける設定方法はポート開放ナビ様の「メーカ別・ルータ 一覧」をご参照下さい。
3.IP Spoofing対策
外部からの攻撃手法の一つとして「IP Spoofing」と呼ばれるIP偽装による侵入方法があります。
IP Spoofingとは、IPアドレス偽装攻撃とも呼ばれ、基本的な手法の一つです。
これは、自IPアドレスを相手のIPアドレス等に偽装し攻撃を仕掛けたり、 Firewallを突破するという方法です。
単独で利用する場合、相手のホストがIPアドレスで接続先を制限している場合や、 相手のホストに侵入したとき、logなどに自IPアドレスが残されると困る場合などに使用されました。
この手法が考え出されたときには、このような使用がなされていましたが、 現在ではDoS 攻撃に使用するなど、 他の攻撃手法の中で応用されています。
ルーターによってはワンクリックであらゆるセキュリティ対策を行えるものがあり、その場合にはIP Spoofing対策も施される場合があります。
ただし、環境によりそのような設定ができないケースも有り、その場合は個別に対策を行います。
※パケットフィルタリングが出来る事が必要です。
IP Spoofingは本来自宅LAN内でしかやり取りされないプライベートIPを用いるものなので、「外部(=WAN側)から内部(=LAN側)にプライベートIPでアクセスする」「内部(=LAN側)から外部(=WAN側)にプライベートIPアドレスを発信する」パケットを全て破棄するようにします。
また、自分自身を示すループバックアドレスも外部から送信されたり、外部に発信したりはしないのでそちらも破棄します。
パケットの送信方向 | 宛先IPアドレス | 送信元IPアドレス | プロトコル | 動作 |
WAN→LAN | 全て | 10.0.0.0/8 | 全て | 無視又は破棄 |
WAN→LAN | 全て | 172.16.0.0/12 | 全て | 無視又は破棄 |
WAN→LAN | 全て | 192.168.0.0/16 | 全て | 無視又は破棄 |
WAN→LAN | 全て | 127.0.0.1 | 全て | 無視又は破棄 |
LAN→WAN | 10.0.0.0/8 | 全て | 全て | 無視又は破棄 |
LAN→WAN | 172.16.0.0/12 | 全て | 全て | 無視又は破棄 |
LAN→WAN | 192.168.0.0/16 | 全て | 全て | 無視又は破棄 |
LAN→WAN | 127.0.0.1 | 全て | 全て | 無視又は破棄 |
4.ポートフォワーディング
特定のサービス宛のポートを開放し、自宅サーバーに振り向けます。サーバー側にてよく使われるポート番号は以下の通りになります。
プロトコル | ポート番号 | プロトコル | ポート番号 |
FTP(データ用) | TCP/20 | POP3 | TCP/110 |
FTP(制御用) | TCP/21 | POP3s | TCP/995 |
FTP(PASV) | TCP/任意 (1025以降) | IMAP | TCP/143 |
SSH | TCP/22 | IMAPs | TCP/993 |
DNS | TCP/53 UDP/53 | SMTP | TCP/25 |
HTTP | TCP/80 | SMTPs | TCP/465 |
HTTPS | TCP/443 | Submission | TCP/587 |
サービスによってはポート番号を変更出来るものもありますので、セキュリティ対策としてポート番号を変更する手もあります。SSHなどは変更した方がいいかと思います。
今回はHTTPがやり取り出来るよう、TCPの80番ポートをフォワーディングします。
WAN側IPアドレス | プロトコル | 方向 | LAN側IPアドレス | LAN側のポート |
ルーターの WAN側IPアドレス | HTTP (TCP/80) | → | 自宅サーバーの プライベートIPアドレス | TCP/80 |
5.iptablesの設定を変更
最後にサーバー側のファイアウォール設定を変更します。
ファイアウォールの設定の記事内のスクリプトにてiptablesを構築している場合、HTTPのコメントを解除します。
[html]sudo nano /etc/network/if-pre-up.d/iptables
$IPTABLES -A INPUT -p tcp –dport 80 -j ACCEPT
#上記の行のコメントを解除します
#保存後、networkを再起動します
sudo /etc/init.d/networking restart[/html]
ポート開放後のチェック
外部からポートチェックを行えるサービスを利用して、80番ポートが開放されているかどうかチェックします。
- ポートチェック【外部からポート開放確認】|株式会社シーマン
※host名に「自宅サーバーのドメイン名」を入力し、port番号に「80」を入力して「ポートチェック」ボタンをクリックします。新たに開かれるウィンドウにて「ホスト=ドメイン名 ポート=80 にアクセスできました。」と表示されればOKです。
また、それ以外のポートが塞がれているかも併せてチェックするといいでしょう。
- GRC | ShieldsUP! – Internet Vulnerability Profiling
※上記ページより「Proceed」ボタンをクリック(2つありますがどちらでもOK)→表示されたページの「All Service Ports」をクリックし、80番ポートのみ赤で、それ以外は青か緑になっていればOKです。
最後に実際にドメイン名をWebブラウザのURL欄に入力して、ホームページが表示されるか確認します。
参考サイト様
- ルータの賢い選び方
- パケットフィルタリングとその凡例
- メーカー別・ルータ一覧|ポート開放ナビ
- 外部から安全に活用するためのLinuxサーバー構築ガイド
- 小規模サイト管理者向け セキュリティ対策マニュアル
- ファイアウォール構築(iptables)|CentOSで自宅サーバー構築
- インターネット・プロトコル・スイート|Wikipedia
- プライベートネットワーク|Wikipedia
- TCPやUDPにおけるポート番号の一覧|Wikipedia
<tr>
<td align=”center” valign=”middle” bgcolor=”#b3f291″>プロトコル</td>
<td align=”center” valign=”middle” bgcolor=”#b3f291″>ポート番号</td>
<td align=”center” valign=”middle” bgcolor=”#b3f291″>プロトコル</td>
<td align=”center” valign=”middle” bgcolor=”#b3f291″>ポート番号</td>
</tr>
<tr>
<td align=”center” valign=”middle” bgcolor=”#fff1b9″>FTP(データ用)</td>
<td align=”center” valign=”middle” bgcolor=”#ffdfff”>TCP/20</td>
<td align=”center” valign=”middle” bgcolor=”#fff1b9″>POP3</td>
<td align=”center” valign=”middle” bgcolor=”#ffdfff”>TCP/110</td>
</tr>
<tr>
<td align=”center” valign=”middle” bgcolor=”#fff1b9″>FTP(制御用)</td>
<td align=”center” valign=”middle” bgcolor=”#ffdfff”>TCP/21</td>
<td align=”center” valign=”middle” bgcolor=”#fff1b9″>POP3s</td>
<td align=”center” valign=”middle” bgcolor=”#ffdfff”>TCP/995</td>
</tr>
<tr>
<td align=”center” valign=”middle” bgcolor=”#fff1b9″>FTP(PASV)</td>
<td align=”center” valign=”middle” bgcolor=”#ffdfff”>TCP/任意<br />
(1025以降)</td>
<td align=”center” valign=”middle” bgcolor=”#fff1b9″>IMAP</td>
<td align=”center” valign=”middle” bgcolor=”#ffdfff”>TCP/143</td>
</tr>
<tr>
<td align=”center” valign=”middle” bgcolor=”#fff1b9″>SSH</td>
<td align=”center” valign=”middle” bgcolor=”#ffdfff”>TCP/21</td>
<td align=”center” valign=”middle” bgcolor=”#fff1b9″>IMAPs</td>
<td align=”center” valign=”middle” bgcolor=”#ffdfff”>TCP/993</td>
</tr>
<tr>
<td align=”center” valign=”middle” bgcolor=”#fff1b9″>DNS</td>
<td align=”center” valign=”middle” bgcolor=”#ffdfff”>TCP/53<br />
UDP/53</td>
<td align=”center” valign=”middle” bgcolor=”#fff1b9″>SMTP</td>
<td align=”center” valign=”middle” bgcolor=”#ffdfff”>TCP/25</td>
</tr>
<tr>
<td align=”center” valign=”middle” bgcolor=”#fff1b9″>HTTP</td>
<td align=”center” valign=”middle” bgcolor=”#ffdfff”>TCP/80</td>
<td align=”center” valign=”middle” bgcolor=”#fff1b9″>SMTPs</td>
<td align=”center” valign=”middle” bgcolor=”#ffdfff”>TCP/465</td>
</tr>
<tr>
<td align=”center” valign=”middle” bgcolor=”#fff1b9″>HTTPS</td>
<td align=”center” valign=”middle” bgcolor=”#ffdfff”>TCP/443</td>
<td align=”center” valign=”middle” bgcolor=”#fff1b9″>Submission</td>
<td align=”center” valign=”middle” bgcolor=”#ffdfff”>TCP/587</td>
</tr>
</table>
ピンバック: FTPサーバーの構築 « SkyGarden出張所