Настройка сервера доступа в Internet

Сети > Для новичка

Описана настройка сервера, предназначенного для доступа в глобальную сеть Интернет.

Предлагаемый вариант позволяет:
  • организовать доступ пользователей локальной сети к глобальной сети Интернет
  • ограничить доступ пользователей к определенным ресурсам Интернет
  • использовать кэширование часто открываемых ресурсов с помощью прокси-сервера для уменьшения трафика
  • установить в локальной сети сервер имен доменов (DNS)
Для начала опишем, как настроить в сети сервер DNS. Думаю, всем понятно, зачем это надо.
Для реализации этого необходим пакет Named (BIND), входящий в любой стандартный дистрибутив Linux.
Обычно его файл настройки named.conf хранится в папке /etc. Ниже приведен пример файла named.conf с комментариями:
options {
// путь к файлам с описаниями зон
directory "/var/named/";
forward first;
// родительские DNS-сервера (DNS провайдера)
forwarders { 195.195.195.10; 195.195.195.11; };
// каким IP-адресам или диапазонам IP-адресов отвечать на запросы DNS
allow-query { 192.168.0.0/24; 127.0.0.1/32; };
// на каких интерфейсах слушать запросы DNS
listen-on { 192.168.0.254; 127.0.0.1; };
max-cache-size 32768;
};
controls { inet 127.0.0.1 allow { localhost; }; };
zone "." IN {
type hint;
// файл с описаниями центральных DNS-серверов Internet
file "root.hints";
};
// зона localhost
zone "localhost" IN {
type master;
// файл с описанием прямой трансляции IP-адресов в имена
file "localhost.zone";
allow-update { none; };
};
// обратная зона диапазона 127.0.0
zone "0.0.127.in-addr.arpa" IN {
type master;
// файл с описанием обратной трансляции имен в IP-адреса
file "named.local";
allow-update { none; };
};
// зона локальной сети
zone "officenet.local" IN {
type master;
// файл с описанием прямой трансляции IP-адресов в имена
file "office.local";
allow-update { none; };
};
// обратная зона локальной сети (диапазон 192.168.0)
zone "0.168.192.in-addr.arpa" IN {
type master;
// файл с описанием обратной трансляции имен в IP-адреса
file "office.rev";
allow-update { none; };
};
Пример файла localhost.zone (в большинстве случаев, вам ничего в нем изменять не придется):
$TTL86400
$ORIGIN localhost.
@1D IN SOA@ root (
42; serial (d. adams)
3H; refresh
15M; retry
1W; expiry
1D ); minimum
1D IN NS@
1D IN A127.0.0.1
Пример файла named.local (в большинстве случаев, вам ничего в нем изменять не придется):
$TTL 86400
@  IN      SOA     localhost. root.localhost.  (
                         1997022700 ; Serial
                         28800      ; Refresh
                         14400      ; Retry
                         3600000    ; Expire
                         86400 )    ; Minimum
   IN      NS      localhost.
1  IN      PTR     localhost.

Пример файла office.local:
// имя домена локальной сети
$ORIGIN officenet.local.
$TTL 3600 ; 1 hour
officenet.local. IN SOA office.officenet.local. root.office.officenet.local. (
312        ; serial
900        ; refresh (15 minutes)
600        ; retry (10 minutes)
345600     ; expire (4 days)
3600       ; minimum (1 hour)
);
 
// указывает имя сервера DNS для домена officenet.local
NS office.officenet.local.
// указывает имя сервера почтового обмена для домена officenet.local
MX 10   server.officenet.local.
A 192.168.0.254
 
// имена машин локальной сети и соответствующие им IP-адреса
techi A 192.168.0.1
servicei A 192.168.0.4
director A 192.168.0.5
server A 192.168.0.254
// псевдонимы для имен
office CNAME server.officenet.local.
ftp CNAME server.officenet.local.
mail CNAME server.officenet.local.

Пример файла office.rev:
$ORIGIN 0.168.192.in-addr.arpa.
$TTL 3600 ; 1 hour
0.168.192.in-addr.arpa. IN SOA office.officenet.local. root.office.officenet.local. (
312        ; serial
900        ; refresh (15 minutes)
600        ; retry (10 minutes)
345600     ; expire (4 days)
3600       ; minimum (1 hour)
);
// указывает имя сервера DNS для диапазона IP-адресов 192.168.0
NS office.officenet.local.
// IP-адреса локальной сети и соответствующие им имена
1 PTR techi.officenet.local.
4 PTR servicei.officenet.local.
5 PTR director.officenet.local.
254 PTR server.officenet.local.

Примечание: имена файлов могут быть произвольными.

Итак, DNS-сервер настроен. Далее необходимо запустить его командой:
# /etc/rc.d/init.d/named start
и прописать в настройках сетевых соединений на компьютерах локальной сети адрес сервера имен (DNS Server): 192.168.0.254.

Далее займемся IP-маршрутизацией.

Мы не будем здесь останавливаться на описании того, что такое NAT и маскарадинг (Masquerading), а просто обратим внимание на конкретные настройки. Отметим, что при настройке таблиц ip-маршрутизации используется утилитаiptables, применяемая в ядрах Linux, начиная с версии 2.4. Примеры настроек с использованием ipchains (ядра версии меньше, чем 2.4) имеются в Интернете в большом количестве.

Итак, скрипт для настройки маскарадинга:
#!/bin/sh
#
# Masquerading setup
#
modprobe ipt_MASQUERADE 
# If this fails, try continuing anyway
iptables -F; iptables -t nat -F; iptables -t mangle -F
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 195.195.195.195
echo 1 > /proc/sys/net/ipv4/ip_forward

После запуска этого скрипта, машины в локальной сети (в настройках сетевых соединений которых необходимо указать шлюз (gateway) 192.168.0.254), должны иметь доступ в сеть Интернет.

Теперь рассмотрим настройку прокси-сервера.

Наилучшим прокси-сервером (proxy-server) для UNIX-систем на сегодняшний день является пакет Squid. Он обладает огромными возможностями по манипуляции http-трафиком (и не только). Мы здесь опишем только минимальную его конфигурацию, необходимую для кэширования трафика, а также для ограничения доступа к различным ресурсам.

Файл конфигурации squid.conf обычно находится в папке /etc/squid. Ниже приведен пример минимального конфигурационного файла Squid с комментариями:
# порт, на котором будет отвечать прокси-сервер
http_port 3128
hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin \?
no_cache deny QUERY
emulate_httpd_log on
# группы ip-адресов, для которых будут действовать
# (или не действовать) ограничения
acl tech src 192.168.0.1 192.168.0.4
acl director src 192.168.0.5
# весь диапазон ip-адресов локальной сети
acl office src 192.168.0.0/255.255.255.0
# все возможные ip-адреса
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl SSL_ports port 443 563
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 563 # https, snews
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT
# блокировка определенных доменов для всех, 
# кроме группы ip-адресов "tech"
acl squid_block_raznoe url_regex -i "/etc/squid/squidblock/raznoe.block.txt"
http_access deny squid_block_raznoe !tech
# такая же блокировка, только для всех (например, баннеры)
acl squid_block_banner url_regex -i "/etc/squid/squidblock/banner.block.txt"
http_access deny squid_block_banner
# блокировка определенных расширений файлов, для всех, 
# кроме группы ip-адресов "director"
acl squid_block_filetypes url_regex -i "/etc/squid/squidblock/filetypes.block.txt"
http_access deny squid_block_filetypes !director
# закрыть доступ к прокси всем, кроме локальной сети,
# а то любители бесплатных прокси намотат вам трафик :-)
http_access deny all !office
http_access deny !Safe_ports
icp_access allow all
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
error_directory /etc/squid/errors

Пример содержания файла блокировки определенных доменов:
.damochka.ru
.sexytetki.com
.ruworld.com

Пример содержания файла блокировки определенных расширений файлов:
\.mp3$
\.avi$
\.mpg$

Итак, прокси-сервер настроен, можно запускать его командой:
# /etc/rc.d/init.d/squid start

Осталось только либо прописать в настройках браузеров пользователей работу через прокси-сервер 192.168.0.254 (порт 3128), либо настроить так называемый "прозрачный прокси", то есть не заметный для конечного пользователя. Для этого необходимо перенаправить весть http-трафик в локальной сети с порта 80 на порт 3128. С помощью iptables это делается так:
# iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 3128
Источник:

Комментарии
]]> ipv6 ready Kiev LUGLinux4MeНостальгияЛичный сайт skeletora ]]>