Linux в якості шлюзу між локальними мережами та інтернет, бібліотека линукс порталу

Linux в якості шлюзу між локальними мережами та Інтернет

3. Постановка завдання.
Необхідно частини машин з першої мережі дати доступ в інтернет і в другу мережу. Друга мережа доступу в інтернет і в першу мережа не має. Обидві мережі повинні мати доступ в реальну мережу (в ній знаходяться уеб-, фтп- і поштові сервери організації). З інтернет повинен бути доступ в реальну мережу до уеб- і smtp-серверів.

6. Маршрутизація.
Маршрутизація - це те, що роблять з пакетом маршрутизатори при подорожі цього пакета по мережі. Іншими словами - це процес вибору шляху для передачі пакета далі до одержувача і відправка його цим шляхом. Це окрема велика тема, особливо якщо взяти до уваги маршрутизацію всередині автономних систем, але нас зараз це не цікавить. Нам досить знати, що є якийсь маршрутизатор, який знає все за межами нашої мережі. Зазвичай це маршрутизатор провайдера і обзивається він зазвичай default gateway. На нашому шлюзі треба обов'язково вказати його, інакше це буде однією з причин, по якій ми в інтернет не потрапимо.

уеб-сервер організації - 193.193.1.2
поштовий сервер організації - 193.193.1.3
фтп-сервер організації - 193.193.1.4

За допомогою команди

перевіряємо здатність ядра нашого шлюзу маршрутизировать трафік між мережами. Якщо результатом роботи команди буде "1", то все нормально. Якщо "0", то треба скомандновать таку річ:

# Echo 1> / proc / sys / net / ipv4 / ip_forward

і знову перевірити за допомогою попередньої команди. Якщо все одно "0", то ваше поточне ядро ​​не підтримує форвардного пакетів між інтерфейсами (що необхідно для маршрутизації) і його треба збирати заново. Можливо, у вашому дистрибутиві вже є готове ядро ​​з підтримкою маршрутизації (про це можна дізнатися з документації до дистрибутива) - тоді має сенс його проинсталлировать і завантажитися з ним.
тепер скомандуйте

Якщо у висновку зустрінеться фраза на зразок "Perhabs iptables or your kernel needs to be upgraded", це означає, що ваше ядро ​​зібрано без підтримки NAT і пакетного фільтра. Рада той же, що і в попередньому випадку - або ядро ​​є в дистрибутиві, або те що доведеться перебудувати.
Далі створюємо файл, який буде містити команди конфігурації NAT і фільтра. Назвати його можна як завгодно, нехай це буде iptables.conf. Вставляємо такі рядки:

# Щоразу очищаємо все ланцюжка правил в використовуваних таблицях
iptables -F INPUT
iptables -F FORWARD
iptables -F OUTPUT
iptables -t nat -F POSTROUTING

# Встановлюємо правила (політики) за замовчуванням
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

# Дозволяємо всім доступ на уеб-сервер
iptables -A FORWARD -d 193.193.1.2 -p tcp --dport 80 -j ACCEPT
# Забороняємо все інше на уеб-сервер крім icmp (пінг, traceroute і все таке)
iptables -A FORWARD -d 193.193.1.2 -p. icmp -j DROP

# Дозволяємо всім доступ на пошту по smtp
iptables -A FORWARD -d 193.193.1.3 -p tcp --dport 25 -j ACCEPT
# Дозволяємо локалка забирати пошту по POP3
iptables -A FORWARD -s 192.168.1.0/24 -d 193.193.1.3 -p tcp --dport 110 -j ACCEPT
iptables -A FORWARD -s 192.168.2.0/24 -d 193.193.1.3 -p tcp --dport 110 -j ACCEPT
# Забороняємо все інше на пошту крім icmp (пінг, traceroute і все таке)
iptables -A FORWARD -d 193.193.1.3 -p. icmp -j DROP

# Дозволяємо локалка доступ на фтп-сервер організації
iptables -A FORWARD -s 192.168.1.0/24 -d 193.193.1.4 -p tcp --dport 20 -j ACCEPT
iptables -A FORWARD -s 192.168.1.0/24 -d 193.193.1.4 -p tcp --dport 21 -j ACCEPT
iptables -A FORWARD -s 192.168.2.0/24 -d 193.193.1.4 -p tcp --dport 20 -j ACCEPT
iptables -A FORWARD -s 192.168.2.0/24 -d 193.193.1.4 -p tcp --dport 21 -j ACCEPT
# Забороняємо все інше на фтп крім icmp (пінг, traceroute і все таке)
iptables -A FORWARD -d 193.193.1.4 -p. icmp -j DROP

# Цим же машинам можна ходити в інтернет
# Але нам не треба, що вони маскарад і при заході в нашу реальну мережу
iptables -t nat -A POSTROUTING -s 192.168.1.1 -d. 1.1.1.0/192 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 192.168.1.2 -d. 1.1.1.0/192 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 192.168.1.3 -d. 1.1.1.0/192 -j MASQUERADE


Опис iptables є тут -
Ну і на всіх машинах організації цей шлюз треба вказати як шлюз. Якщо на цьому ж шлюзі буде заведений свій DNS-сервер, то його теж треба буде вказати. Якщо передбачається робота з DNS-сервером провайдера, то прописати треба буде саме його, а не наш шлюз.
Потім треба дати цьому скрипту права на виконання і прописати його куди-небудь, що запускало б його при кожному старті.

10. ВАЖЛИВО.
Не використовуйте цей приклад в реальній роботі. НІ В ЯКОМУ РАЗІ. Це всього лише приклад, ілюстрація. Його можна взяти за основу, але настійно рекомендується доопрацювати. У цьому прикладі передбачається, що на самому шлюзі не запущене взагалі ніяких мережевих служб, тобто висновок команди netstat -antpu порожній. Це добре і до цього треба прагнути, але це не завжди можливо (в силу різних причин). Тут також для ланцюжків вказана політика за замовчуванням ACCEPT, що теж не завжди добре (в даному випадку це дозволяє будь-кому, а не тільки довіреною вузлів з локалки, використовувати цей шлюз в якості шлюзу), хоча і значно спрощує настройку. По-хорошому політику треба ставити в DROP і прописувати окремі правила для прийому icmp і DNS трафіку (як мінімум). Ну і напевно ще є щось, що я просто не врахував.

12. Зауваження.
За прикладом - ezhikov.

Всі статті розділу "Мережа"

Схожі статті