Intereting Posts

Как разместить сайт локальной сети, недоступный за пределами локальной сети?

Я Linux / Unix noob, поэтому, пожалуйста, несите меня. Вот моя ситуация:

У меня есть сервер (Debian Squeeze) в локальной сети. Я установил на нем веб-сервер Nginx. Сервер имеет доступ к Интернету для загрузки и установки пакетов.

Мой вопрос:

Могу ли я разместить веб-сайт так, чтобы пользователи в локальной сети:

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

в их браузере открывается веб-сайт? Обратите внимание, что у них также есть полный доступ в Интернет, поэтому он не должен идти прямо в Google или какую-то другую поисковую систему по умолчанию.

В то же время, кто-либо за пределами локальной сети не должен иметь к нему доступ, независимо от того, какой URL они набирают.

Это возможно?

Что контролирует, имеют ли другие компьютеры доступ к серверу, запущенному на вашем компьютере, это не имя: это только вопрос удобства. Если вы хотите, чтобы ваш компьютер или, по крайней мере, ваш веб-сервер, недоступный вне локальной сети, вам необходимо принять меры, чтобы заблокировать его на уровне IP или HTTP.

Возможно, ваш администратор локальной сети уже блокирует входящие подключения к веб-серверам внутри локальной сети, и в этом случае вам нечего делать. Но в любом случае вы можете настроить фильтр на своем компьютере, на всякий случай.

Если вы не хотите обслуживать какой-либо веб-трафик за пределами локальной сети, заблокируйте входящий веб-трафик на уровне IP. Для этого используйте iptables или какой-либо инструмент более высокого уровня, который устанавливает правила iptables, такие как ufw . Блокировать все входящие трафик HTTP и HTTPS, блокировать порты TCP 80 и 443, если ваша локальная сеть соответствует диапазону адресов 203.0.113.0/24 (т.е. 203.0.113. *):

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

Вы также можете заблокировать все входящие порты, кроме тех, которые вам известны. Например, чтобы разрешать только входящие SSH-запросы, а также входящий трафик из локальной сети и исключать весь другой входящий трафик:

 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 

См. Также Существует ли стандартный способ настройки политики загрузки iptables при запуске в Debian? , iptables: разрешить определенные ips и заблокировать все другие подключения и установить некоторые порты брандмауэра для приема только локальных сетевых соединений? ,

Если вы хотите разрешить веб-подключения к вашему компьютеру из любого места, но разрешить доступ к определенному виртуальному хосту только из локальной сети, вам необходимо выполнить фильтрацию на уровне сервера Apache (я полагаю, вы используете Apache ). Это делается в файле конфигурации виртуального хоста или в файле .htaccess с директивами Allow and Deny .

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

Переходя к имени, если вы хотите дать бесцельное имя для своего сервера, для этого требуется сотрудничество клиентских машин. Но вы можете указать глобально-допустимое имя для своего сервера. Это непревзойденно независимо от того, можно ли достигнуть вашего сервера везде. Вам нужна запись DNS для вашей машины. Вы можете купить доменное имя и базовую службу DNS на нем примерно за 10 долларов США в год, поэтому IP-адрес вашего устройства будет записан по имени, как www.spartanblogger.net . Не имеет значения, находится ли ваш IP-адрес в закрытом диапазоне, таком как 10.xyz или 192.168.xy. Если IP-адрес вашего устройства меняется, вам нужен провайдер, поддерживающий динамический DNS . Для одного адреса для личного использования, если вы не возражаете против собственного имени домена, вы можете использовать бесплатный сервис, такой как DynDNS (действительно ли ваш IP-адрес является динамическим или нет); вы можете выбрать такое имя, как spartanblogger.dyndns.org .

Если у вас нет контроля над сетью вообще, а также нет контроля над компьютерами клиентов, а ваш сервер недоступен извне, я боюсь, что это невозможно. Представьте, что это было бы, что помешало бы вам перенаправлять google или stackexchange на ваш сервер?

Что вы можете сделать, так это попросить администратора создать запись DNS для abcd чтобы указать на ваш IP-адрес. Затем все, что вам нужно, – это веб-сервер, прослушивающий стандартные порты. Если он откажется от всего, что вы можете сделать, это получить доступ к веб-серверу через IP-адрес вместо имени хоста.

В вашем вопросе вы прямо не указали, что хотите использовать доменное имя или просто доступ к ip. Потому что при прямом доступе к ip его можно сделать так, как вы хотите, в противном случае не так тривиально (см. Комментарии).

Просто проверьте свой ip с помощью ifconfig тогда ваш колледж (если они находятся в одной сети) может видеть, что вы показываете через nginx, введя свой IP-адрес в браузер. Однако извне это не будет доступно, поскольку маршрутизатор не будет перенаправлять запросы извне сети на ваш компьютер. (Если вы этого не сделаете, хотя вы можете добавить прямое правило в конфигурацию вашего маршрутизатора)

Не уверен, что находится в файле конфигурации 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, имеет разрешение на чтение этой корневой папки. Вы можете проверить, что пользователь nginx использует с: ps aux | egrep nginx ps aux | egrep nginx , и установите его в свою конфигурацию с помощью директивы: user nginx;

На официальном сайте конфигурации вы можете прочитать больше!

Когда вы получаете доступ к компьютеру колледжей, вы, однако, можете вставить собственный домен, чтобы указать его на свой компьютер, отредактировав файл hosts на своей машине под /etc/hosts :

 <your_ip> something.com