web-dev-qa-db-ja.com

LANの外部からアクセスできないイントラネットWebサイトをホストする方法は?

LAN上にサーバー(Debian Squeeze)があります。 NginxWebサーバーをインストールしました。サーバーは、パッケージをダウンロードしてインストールするためのインターネットアクセスを持っています。

私の質問:

LAN上のユーザーが次のように入力するようにWebサイトをホストできますか?

http://abcd (no .com, .net, etc.) 

彼らのブラウザに、ウェブサイトが開きますか?彼らは完全なインターネットアクセスも持っているので、代わりにグーグルや他のデフォルトの検索エンジンに直接行くべきではないことに注意してください。

同時に、LANの外部の誰もが、入力したURLに関係なく、LANにアクセスできないようにする必要があります。

これは可能ですか?

3
Spartanblogger

他のコンピューターが自分のコンピューターで実行されているサーバーにアクセスできるかどうかを制御するのは名前ではありません。これは便宜上の問題です。コンピュータまたは少なくともWebサーバーをLANの外部からアクセスできないようにする場合は、IPまたはHTTPレベルでコンピュータをブロックするための対策を講じる必要があります。

LAN管理者がLAN内のWebサーバーへの着信接続をすでにブロックしている可能性があります。その場合、何もする必要はありません。ただし、万が一の場合に備えて、とにかくマシンにフィルターを設定することをお勧めします。

LAN外のWebトラフィックを処理したくない場合は、IPレベルで着信Webトラフィックをブロックします。そのためには iptables を使用するか、 fw などのiptablesルールを設定する高レベルのツールを使用します。すべての着信HTTPおよびHTTPSトラフィックをブロックするには、LANがアドレス範囲203.0.113.0/24(つまり、203.0.113。*)に対応していると仮定して、TCPポート80および443)をブロックします。

iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p tcp --dport 80,443 -s \!203.0.113.0/24 -j REJECT

必要だとわかっているポートを除いて、すべての着信ポートをブロックすることもできます。たとえば、着信SSH要求と、LANからの着信トラフィックのみを許可し、他のすべての着信トラフィックを除外するには、次のようにします。

iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p icmp -j ACCEPT
iptables -A INPUT -p tcp --dport ssh -j ACCEPT
iptables -A INPUT -p tcp --dport http,https -s 203.0.113.0/24 -j ACCEPT
iptables -A INPUT -j REJECT

参照 Debianでの起動時にiptablesがロードするポリシーを構成する標準的な方法はありますか?iptables:特定のipsを許可し、他のすべての接続をブロックする および いくつか設定するローカルネットワーク接続のみを受け入れるファイアウォールポート?

どこからでもマシンへのWeb接続を許可したいが、LANからのみ特定の仮想ホストに到達できるようにする場合は、Apacheサーバーのレベルでフィルタリングを実行する必要があります(Apacheを使用していると想定しています) )。これは、仮想ホスト構成ファイルまたは.htaccessファイルで、 Allow および Deny ディレクティブを使用して実行されます。

Order deny,allow
Deny from all
Allow from 203.0.113.0/24

名前に目を向けると、サーバーにドットのない名前を付けたい場合は、クライアントマシンの協力が必要です。ただし、サーバーにグローバルに有効な名前を付けることができます。これは、サーバーにどこからでもアクセスできるかどうかとは完全に独立しています。必要なのは、マシンの [〜#〜] dns [〜#〜] エントリです。ドメイン名と基本的なDNSサービスを年間約10ドルで購入できるため、マシンのIPアドレスはwww.spartanblogger.netのような名前で記録されます。 IPアドレスが10.x.y.zや192.168.x.yなどのプライベート範囲にあるかどうかは関係ありません。マシンのIPアドレスが異なる場合は、 ダイナミックDNS をサポートするプロバイダーが必要です。個人使用の単一アドレスの場合、独自のドメイン名を持っていなくてもかまわない場合は、 DynDNS (IPアドレスが実際に動的であるかどうかに関係なく)などの無料サービスを使用できます。 spartanblogger.dyndns.orgのような名前を選択できます。

ネットワークをまったく制御できず、クライアントコンピュータも制御できず、サーバーに外部からアクセスできない場合は、それが不可能だと思います。それがどうなるか想像してみてください、あなたがグーグルやスタックエクスチェンジをあなたのサーバーにリダイレクトするのを妨げるものは何ですか?

できることは、管理者にabcdのDNSエントリを作成してIPアドレスを指すように依頼することです。次に、必要なのは、標準ポートでリッスンするWebサーバーだけです。彼が拒否した場合、あなたができることは、ホスト名ではなくIPアドレスを介してWebサーバーにアクセスすることだけです。

3
Marco

あなたの質問では、ドメイン名または単にIPアクセスを使用したいということを直接述べていませんでした。直接IPアクセスを使用すると、必要なことを実行できますが、それ以外の場合はそれほど簡単ではありません(コメントを参照)。

ifconfigでIPを確認するだけで、大学(同じネットワーク内にある場合)は、ブラウザにIPアドレスを入力することで、nginxを介してレンダリングしているものを確認できます。ただし、ルーターはネットワークの外部からの要求をコンピューターに転送しないため、外部からはアクセスできません。 (ルーター構成に転送ルールを追加することはできますが、それを望まない場合)

デフォルトのnginx構成ファイルに何が含まれているかはわかりませんが、構成ファイルに追加できるこのような単純な構成をここに挿入します(/etc/nginx/nginx.conf):

server {
  listen       80;
  server_name  _;
  # path to your folder what you want to render
  root   /usr/share/nginx/html;
  index index.php index.htm index.html;
}

ただし、nginxを実行するユーザーには、そのルートフォルダーを読み取る権限があることが重要です。 ps aux | egrep nginxを使用して、どのユーザーがnginxであるかを確認し、ディレクティブuser nginx;を使用して構成に設定できます。

公式設定サイト もっと読むことができます!

ただし、大学のコンピュータにアクセスするときに、/etc/hostsの下のマシンのhostsファイルを編集することで、マシンを指すカスタムドメインを挿入できます。

<your_ip> something.com
0
p1100i