Настройка FreeBSD как шлюз в Интернет
Не так давно нужно было поставить гейт в Интернет для одного интернет-кафе. Кафе имело доступ к Интернету через ADSL-модем с Ethernet интерфейсом и локалку на 50 компьютеров со статическими адресами. Решено было поставить именно шлюз, а не купить обычной роутер с NAT, так как в роутерах все равно крутится урезанный линукс, а шлюз на базе ПК имел гораздо больше возможностей. К тому с таким количеством компьютеров использование прокси-сервера для кеширования веб-страниц давало определенную экономию траффика. Машинка имела параметры уровня Pentium2-600 с 256 Mb оперативной памяти. Вариант установки оффтописка отпадал из-за слабых мощностей и ненадежности и отсутствия гибкости. К тому же FreeBSD идеально подходит для гейтов в силу малой требовательности ресурсов и надежности работы. Насколько мне известно по хоум-провайдингу, гейты на FreeBSD могут спокойно натить полосу до 500-600 mbit/sec
Итак, дано - установить FreeBSD на компьютер, настроить NAT, настроить прозрачный прокси. Не буду утомлять читателей описанием установки, благо это подробно описано и иллюстрировано в данной статье. После установки я пересобрал ядро, включив в него дополнительные опции, а именно options IPFIREWALL #добавил поддержку файрволла options IPFIREWALL_VERBOSE #логгирование options IPFIREWALL_VERBOSE_LIMIT=100 #органичение количества записей в лог options IPFIREWALL_DEFAULT_TO_ACCEPT #файерволл "открыт" по умолчанию options IPFIREWALL_FORWARD options IPDIVERT #включение поддержки перенаправления пакетов options DUMMYNET #может понадобится для ограничения скорости После пересборки ядра настала очередь правки /etc/rc.conf для включения NAT. NAT будет использовать в виде отдельного демона. У меня на шлюзе стояло 2 сетевые карточки, одна смотрела в интернет через модем (настроенный в режиме моста), вторая в локальную сеть. Соотвественно, первая была re0 и имела адрес вида 213.230.x.x, вторая rl0 - адрес 192.168.0.1 Правим /etc/rc.conf defaultrouter=213.230.x.x #указываем основной шлюз ifconfig_re0="inet 213.230.x.x netmask 255.255.255.252" #задаем внешний интернетовский адрес ifconfig_rl0="inet 192.168.0.1 netmask 255.255.255.0" #задаем внутренний адрес gateway_enable="YES" #зайдествуем режим шлюза natd_enable="YES" #включем NAT nat_interface="re0" #указываем натируемый интерфейс nat_flags="-f /etc/natd.conf" #файл настройки демона NAT firewall_enable="YES" Далее в /etc/resolv.conf указываем DNS-сервера провайдера - вписываете свои nameserver 195.158.0.1 nameserver 195.158.0.3 После сохранения и перезагрузки (это не обязательно, можно поднять интерфейсы и демон не перезагружая, но проверить как что поднимается все же нужно), проверяем доступность в обоих сетках, пропинговав локальные машины и хосты в интернете. Уже на данном этапе интернет доступен локальным компьютерам, единственное что нужно дополнительно настроить на них, так это указать на них шлюз по умолчанию 192.168.0.1 и в строке DNS-сервера также прописать 192.168.0.1 Пришла очередь поставить squid. Для начала обновляем колекцию портов. После успешного обновления переходим собственно к установке. #cd /usr/ports/www/squid31/ #make install clean После окончания установки идем править файл настройки squid, находящегося по адресу /usr/local/etc/squid/squid.conf Вот его содержание: # # Recommended minimum configuration: #Это минимум, который необходим для корректной работы прокси acl manager proto cache_object acl localhost src 127.0.0.1/32 #IPv6 Not Available:acl localhost src ::1/128 acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 #IPv6 Not Available:acl to_localhost dst ::1/128 # Example rule allowing access from your local networks. # Adapt to list your (internal) IP networks from where browsing # should be allowed #Здесь указываются подсетки, которые имеют доступ к нашей проксе, у нас подсетка 192.168.0.0, потому оставляем только ее #acl localnet src 10.0.0.0/8 # RFC1918 possible internal network #acl localnet src 172.16.0.0/12 # RFC1918 possible internal network acl localnet src 192.168.0.0/24 # Указываем сеть 192.168.0.1-254 #IPv6 Not Available:acl localnet src fc00::/7 # RFC 4193 local private network range #IPv6 Not Available:acl localnet src fe80::/10 # RFC 4291 link-local (directly plugged) machines acl SSL_ports port 443 acl Safe_ports port 80 # https acl Safe_ports port 21 # ftp acl Safe_ports port 443 # httpss 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 # https-mgmt acl Safe_ports port 488 # gss-https acl Safe_ports port 591 # filemaker acl Safe_ports port 777 # multiling https acl CONNECT method CONNECT # # Recommended minimum Access Permission configuration: # # Only allow cachemgr access from localhost https_access allow manager localhost https_access deny manager # Deny requests to certain unsafe ports https_access deny !Safe_ports # Deny CONNECT to other than secure SSL ports https_access deny CONNECT !SSL_ports # We strongly recommend the following be uncommented to protect innocent # web applications running on the proxy server who think the only # one who can access services on "localhost" is a local user #https_access deny to_localhost # # INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS # # Example rule allowing access from your local networks. # Adapt localnet in the ACL section to list your (internal) IP networks # from where browsing should be allowed https_access allow localnet https_access allow localhost # And finally deny all other access to this proxy https_access deny all # Squid normally listens to port 3128 - Порт, на котором будет висеть прокси https_port 127.0.0.1:3128 intercept #transparent для версий ниже 3.1 # We recommend you to use at least the following line. hierarchy_stoplist cgi-bin ? # Uncomment and adjust the following to add a disk cache directory. cache_dir ufs /var/squid/cache 500 16 256 cache_mem 256 MB # Leave coredumps in the first cache dir coredump_dir /var/squid/cache # Add any of your own refresh_pattern entries above these. refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern -i (/cgi-bin/|?) 0 0% 0 refresh_pattern . 0 20% 4320 Далее создаем кеш прокси. #/usr/local/sbin/squid -z Стартуем его #/usr/local/etc/rc.d/squid -start Если Squid успешно запустился - открываем любой бразуер, указываем нашу проксю вида 192.168.0.1:3128 и пробуем открыть например тот же google.com. Открылся? Замечательно, вписываем в /etc/rc.conf squid_enable="YES" И делаем его прозрачным, добавив правило в файрволл. ipfw add fwd 192.168.0.1,3128 tcp from 192.168.0.0/24 to any 80 После этого, на клиентском компьютере убираем прокси с браузера и пробуем открыть другую страницу. Паралелльно можно смотреть файл /var/log/squid/access.log, в котором фиксируются обращения к прокси. Если все работает, в логи появляются записи - поздравляю. Теперь все веб-запросы от клиентских компьютеров будут прозрачно кешироваться, экономя вам траффик. На этом первоначальная настройка гейта завершена. UPD. Иногда нужно раздавать интернет не всем в локальной сети, а некоторым пользователям. Тогда можно прикрутить к сквиду авторизацию. Это делается путем добавления в конфиг auth_param basic program /usr/local/libexec/squid/ncsa_auth /usr/local/etc/squid/internet_users auth_param basic children 5 auth_param basic realm Squid proxy-caching web server auth_param basic credentialsttl 2 hours auth_param basic casesensitive off acl squidusers proxy_auth REQUIRED https_access allow squidusers Далее создаем сам файлик с пользователями и паролями # htpasswd -c /etc/squid/internet_users synergix New password: ******* Re-type new password: ******* Adding password for user synergix Ключ -с необходимо указывать только один раз, при создании файла с паролями. В последующем добавлять пользователей нужно без этого ключа. Итак, мы получили файл с примерно таким содержимым. # cat /etc/squid/internet_users synergix:89XzEEI/P0e56 Где synergix - имя пользователя, а 89XzEEI/P0e56 - хеш его пароля. Для добавления нового пользователя в существующий файл необходимо выполнить следующую команду # htpasswd -b /etc/squid/internet_users second_user 1234567 Adding password for user second_user Посмотрим - # cat /etc/squid/internet_users syenrgix:89XzEEI/P0e56 second_user:EAJezc5eLXrV2 Выставим права для файла # chmod 440 /usr/local/etc/squid/internet_users # chown squid:squid /usr/local/etc/squid/internet_users И попросим Squid перечитать конфиг. #/usr/local/etc/rc.d/squid reload
|
Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь. Мы рекомендуем Вам зарегистрироваться либо зайти на сайт под своим именем.