Лабораторна робота №11, Створення та налаштування шлюзу Інтернет
Код роботи: 3761
Вид роботи: Лабораторна робота
Предмет: Комп’ютерні системи та мережі
Тема: №11, Створення та налаштування шлюзу Інтернет
Кількість сторінок: 14
Дата виконання: 2015
Мова написання: українська
Ціна: безкоштовно
Мета: Набути практичних вмінь та навиків при роботі та конфігуруванні Інтернет шлюзу під Лінукс та Windows на базі проксі-сервера Squid.
Короткі теоретичні відомості
SQUID – це програма, що одержує http/ftp запити клієнтів і по них звертається до ресурсів Інтернет. Застосування проксі-сервера (squid) дає можливість використовувати фіктивні IP-адреси у внутрішній мережі (Masquerading), збільшує швидкість обробки запиту при повторному звертанні (кешування), забезпечує додаткову безпеку. Нема рації встановлювати проксі на своїй домашній машині, тому що функції кешування виконує браузер. Проксі-сервер варто застосовувати лише в тому випадку, якщо у вашій мережі три-чотири комп'ютера, яким потрібний вихід в Інтернет. У цьому випадку запит від браузера до проксі-серверу обробляється швидше, ніж від проксі до ресурсів Інтернет, і в такий спосіб збільшується продуктивність. До того ж, ми можемо сміло установити розмір кеша в браузерах клієнтів рівним нулеві.
Squid - високопродуктивний кешуючий проксі-сервер для web-клієнтів, що підтримує FTP, gopher і HTTP об'єкти даних. На відміну від традиційного кешуючого ПО, Squid обслуговує всі запити як один неблокуємий процес вводу-виводу.
Squid зберігає індекс даних і особливо часто використовувані об'єкти в ОЗУ, кешує запити DNS, підтримує неблокуємі запити DNS і негативне кешування невдалих запитів.
Squid підтримує SSL, гнучкий контроль доступу і повне журналювання запитів. Використовуючи полегшений Internet Cache Protocol, Squid-кеші можуть працювати за принципом ієрархії, що дозволяє додатково зберігати смугу пропускання каналу.
Squid складається з основної серверної програми squid, програми обслуговування Доменної Служби Імен dnsserver, деяких програм використовуваних опціонально для зміни запиту і виконання аутентифікації, керування і клієнтських інструментів. Коли squid стартує, він запускає зазначений в конфігурації процесів dnsserver, кожний з яких може виконуватися самостійно, блокуючи запити Domain Name System (DNS). Це зменшує час чекання кешем відпрацювування DNS-запитів.
Squid виріс із заснованого ARPA проекту Harvest.
Кешування Internet-об'єктів.
Кешування Інтернет-об'єктів - це спосіб збереження запитаних Інтернет-об'єктів (даних доступних по протоколах HTTP, FTP і gopher) на системі, що ближче до ділянки, що формує запити на одержання об'єктів, чим до джерела їх утримуючого. Web-браузери можуть використовувати локальний кеш Squid у якості HTTP проксі-сервера, що зменшує час доступу і завантаження зовнішнього каналу.
Якими системами підтримується Squid
Це ПО розроблялося для застосування на різних сучасних Unix-системах, відомо, що Squid працює на наступних платформах
• Linux
• FreeBSD
• NetBSD
• BSDI
• OSF and Digital Unix
• IRIX
• SunOS/Solaris
• NeXTStep
• SCO Unix
• AIX
• HP-UX
• OS/2
• Windows 9x,NT,2000,XP
Встановлення та налаштування Squid під Лінукс.
Squid у вигляді rpm-пакету входить до складу дистрибутива RedHat 9.0 і автоматично інсталюється при виборі варіанту інсталяції Network OS. Перевірити, встановлений squid чи ні, можна за допомогою наступної rpm-команди:
rpm -q squid
Останню версію Squid можна завжди одержати на домашньому сайті Squid або его зеркалах. Squid можна проінсталювати за допомогою наступної rpm-команди:
rpm -ivh squid-2.3.STABLE4-10.i386.rpm
або розпакувати із вихідних кодів і перекомпілювати, але при цьому слід чітко встановити всі необхідні ключі.
Корисні ключі./configure (--help)
--prefix=/usr/local/squid (куди інсталювати архітектурно-залежні файли за умовчанням /usr/local/squid);
--enable-carp (Ввімкнути підтримку CARP, cache... routing protocol);
--enable-icmp (вимірювати шлях до кожного HTTP-серверу при запитах з допомогою ICMP);
--enable-delay-pools (управління обмеженням трафіку);
--enable-useragent-log (журналювати заголовок Useragent );
--Disable-wccp (Вимкнути Web Cache Coordination Protocol);
--enable-kill-parent-hack (допомагає зробити shutdown чисто);
--enable-snmp (Ввімкнути моніторинг SNMP );
--enable-arp-асl (ввести адресу ACL);
--enable-cachemgr-hostname=имя-хоста (cachemgr.cgi буде за умовчанням направлений на цей хост);
--enable-htcp (HTCP - варіант ICP по TCP);
--enable-forw-via-db (Enable Forw/Via database);
--Enable-cache-digests (Використання Cache Digests);
--enable-err-language=мова;
--enable-gnuregex (замість regex, погано працюючого в Linux);
--enable-poll (можна використовувати poll або select; poll швидше, але не на всіх платформах працює; звичайно вибір робиться автоматично.);
--Disable-poll
--disable-http-violations (ігнорувати всі рядки в конфігурації, які порушують стандарти HTTP);
--enable-ipf-transparent (дозволити підтримку transparent proxy для систем використовуючих IP-Filter - в Linux і без цього добре);
--Disable-ident-lookups
--disable-internal-dns (This prevents Squid from directly sending and receiving DNS messages, and instead enables old external 'dnsserver' processes);
--enable-truncate (обнуляти файли замість їх видалення: швидше, але вимагає багато inode; були проблеми, коли переповнювалася таблиця inode; напевно параметр minimum_object_size через це з'явився);
--enable-underscores (дозволяти підкреслення в іменах хостів, сподіваючись що резолвер їх не обрізатиме);
--enable-heap-replacement (використовувати поліпшені алгоритми заміщення кешу замість стандартного LRU);
--enable-dlmalloc (своя бібліотека malloc, не швидка але без memore leak);
--enable-splaytree (прискорення обробки ACL);
Ключі запуску squid
-a (порт для вхідних HTTP запитів);
-d (відладка на stderr);
-f ім'я-файлу-конфігурації;
-h (help);
-k
reconfigure (посилка сигналу HUP)
rotate (оновити журнали; USR1)
shutdown (TERM)
interrupt (shutdown без паузи; INT)
kill (навіть не закривши журнали; KILL)
debug (почати/закінчити повне трасування; USR2)
check (ZERO)
-s (level 0 debugging to syslog на додаток до файлу)
-u (порт для вхідних ICP запитів)
-v (надрукувати версію)
-z (створити дисковий кеш при першому запуску)
-D (не робити DNS-тест при запуску)
-F (відновлення після збою не у фоновому режимі)
-N (не ставати фоновим процесом)
-V (підтримка віртуальних хостів для режиму акселерації - аналогічно "httpd_accel_host virtual" в конфігураційному файлі)
-X (включити відладку при розборі конфігураційного файлу)
-Y (більш швидке відновлення після збоїв)
Конфігурування Squid
Поведінкою Squid'a можна управляти конфігураційними параметрами, вказаними в його конфігураційному файлі squid.conf; цей файл як правило розташовується в каталозі /etc/squid.
Перше, що треба змінити це http_port, який визначає адресу сокета, на якому Squid слухатиме клієнтські запити; за умовчанням це 3128, але може використовуватися будь-яке значення, вказане користувачем. Разом із значенням порту, можна задати IP-адресу машини, на якій працює Squid; його теж можна змінити: http_port 192.168.0.1:8080
Вищенаведеним оголошенням Squid прив’язується до IP-адреси 192.168.0.1 і порту 8080. Адреса порту може бути будь-якою, але треба бути упевненим, що ніякі інші додатки не використовують цей порт. Схожими конфігураційними рядками можна встановити порти запитів для інших сервісів.
Доступ.
За умовчанням, Squid не дає ніяких прав доступу клієнтам, а для того, щоб права були, необхідно модифікувати настройки управління доступом. Потрібно вказати правила, що дозволяють доступ. Прокрутіть файл squid.conf і введіть наступні рядки прямо за рядком http_acess deny all.
асl mynetwork 192.168.0.1/255.255.255.0
http_access allow mynetwork
mynetwork це асl-ім'я, а наступний рядок - це правило, вживане до даного асl тобто mynetwork. 192.168.0.1 описує адресу мережі маскою котра є 255.255.255.0. mynetwork дає ім'я групі машин в мережі, а правило -- дозволяє доступ клієнтам. Цих змін разом з установкою http_port'а достатньо для того, щоб пустити Squid в роботу. Після внесення змін Squid може бути запущений командою
service squid start
Зауваження:
Squid може бути запущений автоматично у момент завантаження системи, шляхом включення його в ntsysv або setup (System Service Menu). Після кожної зміни конфігураційного файлу, поточний процес Squid'a повинен бути зупинений і для того, щоб зміни набули чинності -- запущений знову. Ці кроки можуть бути виконані наступними командами:
Перед першим запуском слід створити кеш, для цього повинен бути створений каталог, зазначений в Squid.conf, і на нього слід встановити права та власника користувача squid.
Після цього слід виконати команду squid –z.
Конфігурація клієнтської машини
Оскільки запитам клієнта призначений певний порт проксі-сервера, клієнти повинні бути конфігуровані відповідним чином. Припустимо, що машини вже приєднані до мережі (причому з правильними IP-адресами) і можуть пінгувати Linux-сервер.
порядок виконання команд:
su -
apt-get install squid
відкриваємо файл /etc/squid/squid.conf і приступаємо до налаштування
http_port 3128 transparent
cache_dir ufs /var/spool/squid 4096 32 256
#acl localnet src 10.0.0.0/24 # RFC1918 possible internal network
#acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
acl localnet src 192.168.10.0/24 # RFC1918 possible internal network
http_access allow localnet
memory_pools on
memory_pools_limit 50 MB
error_directory /usr/share/squid/errors/Russian-koi8-u
/usr/sbin/squid -z
/etc/init.d/squid restart
1. Файли журналів
Всі журнальні файли (log files) Squid'а знаходяться в каталозі /var/log/squid; там зберігається журнал кешування(cache.log), журнал доступу (access.log) і менеджера зберігання (store.log). Файл access.log містить інформацію про запити клієнтів, їх активності і береже запис для кожного HTTP і ICP запиту, одержаного проксі-сервером: IP-адреса клієнта, метод запиту, запитаний URL і т.д. Дані цього файлу можуть бути використані для аналізу інформації про доступ до Інтернету. Існує безліч програм таких як sarg, calamaris, Squid-Log-Analyzer, які можуть проводити аналіз даних і складати відповідні звіти в HTML-форматі. Звіт може будуватися щодо користувачів, відвіданих сайтів, IP-адрес і т.д.
Розташування журнальних файлів може бути змінено наступними опціями
cache_access_log Для access.log
cache_log Для cache.log
cache_store_log Для store.log (Управління зберіганням)
pid_filename Файл, PID Squid'a.
Методи аутентифікації
За умовчанням Squid дозволяє будь-якому користувачу дістати доступ до Інтернету без жодної перевірки його особи. Для того, щоб надати доступ до Інтернет, тільки користувачам має на це право (з будь-якої машини в мережі), Squid надає можливість аутентифікації за допомогою зовнішньої програми, яка вимагає вірного імені користувача і пароля. Це досягається за допомогою використовування ACL proxy_auth і програми аутентифікації authenticate_program, яка примушує користувача ввести ім'я і пароль, перш ніж надасть доступ до Мережі. Доступні декілька програм, які Squid може використовувати для перевірки автентичності:
Необхідно вказати програми аутентифікації за допомогою опції authenticate_program, заздалегідь переконавшися, що відповідна програма встановлена і правильно працює.
Зміни у файлі squid.conf тепер також повинні враховувати цю програму аутентифікації.
асl pass proxy_auth REQUIRED
асl mynetwork src 192.168.0.1/255.255.255.0
http_access deny !mynetwork
http_access allow pass
http_access deny all
This uses PAM authentication program and all users need to authenticate before асcessing Internet.
Дл я зміни процесу аутентифікації можуть використовуватися опції подібні authenticate_ttl і authenticate_ip_ttl.
Розглянемо найбільш популярну конфігурацію на сьогоднішній день: squid3 - проксі сервер для ubuntu server. За допомогою проксі сервера, можна не тільки надати централізований доступ до інтернету, але і лімітувати його, закривати доступ до певних сайтів, відкривати доступ тільки до дозволених сайтам, кешувати статичні дані (css, картинки, банери...) і багато іншого.
Для установки проксі сервера будемо використовувати вже готовий сервер з ubuntu 14.04 та налаштованими службами DHCP і DNS. І так, приступимо.
Відкриваємо доступ до інтернету для комп'ютерів в локальній мережі
Для початку нам потрібно відкрити повний доступ до інтернету для всіх комп'ютерів в нашій локальній мережі. Для цього скористаємося NATом. NAT - технологія дозволяє пускати весь мережевий трафік через одну адресу. Тобто всі запити до інтернету в локальній мережі, будуть оброблятися саме сервером.
Створимо файл з налаштуваннями
sudo touch /etc/nat
Внесемо в цей файл наступне:
#!/bin/sh
#Включаєм форвардинг пакетів
echo 1 > /proc/sys/net/ipv4/ip_forward
#Дозволяємо трафік на lo (локальний інтерфейс)
iptables -A INPUT -i lo -j ACCEPT
#Дозволяємо доступ з внутрішньої мережі назовні
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
#Включаємо NAT
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.0/24 -j MASQUERADE
#Дозволяємо відповіді з зовнішньої мережі
iptables -A FORWARD -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
#Забороняємо доступ ззовні у внутрішню мережу
iptables -A FORWARD -i eth0 -o eth1 -j REJECT
Збережемо файл і присвоїмо йому права на виконання:
sudo chmod +x /etc/nat
Добавимо запуск NATу (стрічку post-up /etc/nat) в файл з мережевими настройками:
sudo nano /etc/network/interfaces
Ваш файл повинен виглядати так:
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address192.168.1.104
netmask255.255.255.0
gateway192.168.1.1
auto eth1
iface eth1 inet static
address192.168.0.1
netmask255.255.255.0
post-up /etc/nat
Зберігаємо, закриваємо і перезавантажуємо сервер:
sudo reboot
У такому вигляді, все готово для роздачі інтернету комп'ютерам в мережі. Якщо зараз включити клієнтський комп'ютер, він отримає IP адресу від DHCP сервера, а також отримає настройки шлюзу (192.168.0.1), відповідно повинен з'явиться інтернет. Якщо інтернет з'явився, рухаємося далі, якщо ні, перевіряємо що зробили не так.
Встановлення та налаштування Squid3
Тепер нам потрібно встановити Squid3 - сам проксі сервер. У статті описані базові настройки, для більш поглибленої настройки, раджу почитати документацію по squid.
Встановлюємо пакет squid3
sudo aptitude install squid3
Після установки відкриваємо файл /etc/squid3/squid.conf
sudo nano /etc/squid3/squid.conf
В першу чергу знайдемо стрічку http_port 3128 і добавимо до неї значення intercept і IP адрес серверу, щоби вийшло ось так: http_port 192.168.0.1:3128 intercept
Це робиться для того, щоб у подальшому нам не доводилося налаштовувати проксі сервер на всіх клієнтських машинах (проксі буде прозорим).
Тепер, потрібно вказати мережу в якій працюватиме наш проксі сервер, для цього розкоментуємо рядок acl localnet src 192.168.0.0/16 # RFC1918 possible internal network і вкажемо префікс маски мережі 24 замість 16 (так як у нас маска 255.255.255.0). У підсумку все повинно виглядати так:
acl localnet src 192.168.0.0/24 # RFC1918 possible internal network
Дозволяємо доступ до проксі із внутрішньої мережі, розкоментувавши стрічку
http_access allow localnet
Тепер налаштуємо кешування. Потрібно знайти рядок cache_dir ufs / var / spool / squid3 100 16256, розкоментувати її і поміняти значення на такі:
cache_dir ufs /var/spool/squid3 2048 16 256
Далі розкоментуємо стрічку maximum_object_size 4 MB, тим самим вкажемо максимальний розмір кешуємого об’єкта.
Далі розкоментуємо стрічку maximum_object_size_in_memory 512 KB, тим самим вказуємо максимальний об’єм кешуємого об’єкта в пам’яті.
Далі розкоментуємо стрічку cache_mem 256 MB і замінимо значення з 256 на 1024, тим самим вказуємо допустимий об’єм пам’яті.
Кеш очищається при перезагрузці сервера.
Теперь включимо ведення логів, для цього розкоментовуємо стрічку access_log daemon:/var/log/squid3/access.log squid і добавимо нижче logfile_rotate 31(файли логів будуть зберігатися 31 день, після будуть перезаписуватися самі старі).
На цьому базову настройку squid3 можна завершити. Перезапустимо squid3
sudo service squid3 restart
Тепер проксі сервер налаштований і запущений, але для того щоб трафік користувачів йшов саме через нього, потрібно звернути весь http трафік на squid. Для цього додаємо в / etc / nat рядок
# Завертаємо http на проксі
iptables -t nat -A PREROUTING -i eth1 ! -d 192.168.0.0/24 -p tcp -m multiport --dport 80,8080 -j DNAT --to 192.168.0.1:3128
Теперь файл /etc/nat має наступний вигляд:
#!/bin/sh
#Включаємо форвардинг пакетів
echo 1 > /proc/sys/net/ipv4/ip_forward
#Дозволяємо трафік на lo
iptables -A INPUT -i lo -j ACCEPT
#Дозволяємо доступ на зовні
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
#Включаємо NAT
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.0/24 -j MASQUERADE
#Дозволяємо відповіді з внутрішньої мережі
iptables -A FORWARD -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
#Забороняємо доступ ззовні у внутрішню мережу
iptables -A FORWARD -i eth0 -o eth1 -j REJECT
# Завертаємо http на проксі
iptables -t nat -A PREROUTING -i eth1 ! -d 192.168.0.0/24 -p tcp -m multiport --dport 80,8080 -j DNAT --to 192.168.0.1:3128
Має бути робочий проксі сервер.
Порядок виконання роботи:
1 Встановити та сконфігурувати проксі-сервер Squid під Linux для свого комп’ютера.
2 Виконати тестування роботи проксі –сервера
3 Оформити звіт.