IT-Mehanika - Налаштування шлюзу в локальній мережі, лімітування швидкості, фаєрвол
1. Введення
Багато хто часто задається питанням як швидко налаштувати роздачу інтернету на кілька комп'ютерів у локальній мережі, прокинути порти всередину мережі,
а також забезпечити безпеку шлюзу. Також іноді необхідно зробити ліміт швидкості доступу для деяких комп'ютерів,
не у всіх гумовий канал в інтернет, а комп'ютерів може бути багато, та й якщо швидкість не ділити між ними можуть виникати проблеми з якістю
послуг, таких як якщо один абонент запустить торрент клієнт, відкриє сотню з'єднань, інші абоненти в цей момент відчують різке
падіння швидкості, і явно не будуть раді. У цій статті розказано, які програми допоможуть вам вирішити ці проблеми, налаштувати фіксований доступ.
в інтернет для комп'ютерів вашої локальної мережі та вирішити проблеми зі швидкістю доступу раз і назавжди.
Для налаштування всіх необхідних сервісів я використовував одну програму стороннього розробника (Master Shaper), решта всіх необхідних програм присутні в штатних репозитаріях Ubuntu Linux.
2. Налаштування iptables (firewall & nat)
Почнемо мабуть з налаштування NAT і фаєрволу, так само увімкнемо форвардинг і виправимо деякі параметри SYSCTL, для виділення потрібної кількості ресурсів, якщо у вас, наприклад, більше 5000 комп'ютерів у локальній мережі.
OUT="eth0" # Ім'я вихідного інтерфейсу, що дивиться в інтернет. OUTADDR="1.1.1.1" # Адреса вихідного інтерфейсу IN="eth1" # Ім'я вхідного інтерфейсу, що дивиться в локальну мережу INADDR="2.2.2.2" # Адреса вхідного інтерфейсу NETWORK= "10.0.0.0/8" # Адресація вашої локальної мережі ANYWHERE="0.0.0.0/0" # Призначення будь-яке. PORTS="1024:65535" # Порти, які вважаються локальними MULTICAST="224.0.0.0/4" #Мультикаст пакети, якщо у вас не використовується залиште як є, # якщо використовується IP TV тоді треба видалити цей пункт
################################################## ############################################ # Тут прописані параметри запуску \ зупинки \ статусу скрипта. краще не чіпайте =) # Зупинка скрипта case "$1" in stop) echo "Shutting down firewall."
iptables --flush iptables --delete-chain iptables --table nat --flush iptables --table filter --flush iptables --table nat --delete-chain iptables --table filter --delete-chain
iptables -t filtr -P INPUT ACCEPT iptables -t filtr -P OUTPUT ACCEPT iptables -t filter -P FORWARD ACCEPT
echo ".done" ;; status) echo $"Table: filter" iptables --list echo $"Table: nat" iptables -t nat --list ;; restartreload) $0 stop $0 start ;;
# Очищення таблиць і ланцюжків iptables --flush iptables --delete-chain iptables --table nat --flush iptables --table filter --flush iptables --table nat --delete-chain iptables --table filter --delete-chain
# Призначення глобальних політик фаєрволу iptables -P INPUT DROP iptables -P OUTPUT ACCEPT iptables -P FORWARD ACCEPT iptables -F INPUT iptables -F OUTPUT iptables -F FORWARD
# Завантажуємо модулі для коректної роботи VPN, Active ftp, DCC in IRC які будуть йти через нат. modprobe ip_nat_ftp modprobe ip_nat_pptp modprobe ip_conntrack_ftp modprobe ip_conntrack_irc
# Зміна параметрів SYSCTL # Увімкнення форвардингу echo 1 > /proc/sys/net/ipv4/ip_forward # Увімкнення форвардингу для VPN echo 1 > /proc/sys/net/ipv4/ip_dynaddr # Збільшення розміру черг echo 32000000 >/proc/sys/net/ipv4/netfilter/ip_conntrack_max # Час очікування до закриття з'єднання echo 14400 > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established # Час очікування до посилки FIN пакета echo 60 > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_fin_wait # Час очікування до відправки FIN пакета echo 10 > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_syn_sent # Для захисту від syn флуду echo 1 > /proc/sys/net/ipv4/tcp_syncookies # Збільшуємо розмір backlog черги echo 1280 > /proc/sys/net/ipv4/tcp_max_syn_backlog # Число початкових SYN та SYNACK пересилок для TCP з'єднання echo 4 > /proc/sys/net/ipv4/tcp_synack_retries echo 4 > /proc/sys/net/ipv4/tcp_syn_retries #Які порти використовувати як локальні TCP та UDP порти echo "16384 61000" > /proc/sys/net/ipv4/ip_local_port_range #Скільки секунд очікувати прийому FIN до повного закриття сокету echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout # Як часто посилати повідомлення про підтримку keep alive з'єднання echo 1800 > /proc/sys/net/ipv4/tcp_keepalive_time # Скільки пакетів перевірки keepalive надсилати, перш ніж з'єднання буде закрито. echo 2 > /proc/sys/net/ipv4/tcp_keepalive_probes # Забороняємо TCP window scaling echo 0 > /proc/sys/net/ipv4/tcp_window_scaling # Забороняємо selective acknowledgements, RFC2018 echo 0 > /proc/sys/net/ipv4/tcp_sack # Забороняємо TCP timestamps, RFC1323 echo 0 > /proc/sys/net/ipv4/tcp_timestamps # Викриваємо розмір буфера для прийому та надсилання даних через сокети. echo 1048576 > /proc/sys/net/core/rmem_max echo 1048576 > /proc/sys/net/core/rmem_default echo 1048576 > /proc/sys/net/core/wmem_max echo 1048576 >/proc/sys/net/core/wmem_default # Через якийсь час знищити закрите з'єднання на нашій стороні echo 1 > /proc/sys/net/ipv4/tcp_orphan_retries
# Тимчасовий eth0 повністю вимкнено #iptables -A INPUT -i $OUT -j DROP
# Адміністратори - повний контроль (навіть небезпечний) для admin_ips в $ADMINS; робити
iptables -A INPUT -s $admin_ips -m state --state NEW -j ACCEPT done
# Безшумне скидання скритного сканування # Усі біти очищено iptables -A INPUT -p icmp --icmp-type timestamp-request -j DROP iptables -A INPUT -p tcp --tcp- flags ALL NONE -j DROP # SYN і FIN обидва встановлені iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP # SYN і RST обидва встановлені iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP # FIN і RST обидва встановлені iptables -A INPUT -p tcp --tcp-flags FIN ,RST FIN,RST -j DROP # FIN — єдиний встановлений біт без очікуваного супроводжуючого ACK iptables -A INPUT -p tcp --tcp-flags ACK,FIN FIN -j DROP # PSH — єдиний встановлений біт, без очікуваного супровідного ACK iptables -A INPUT -p tcp --tcp-flags ACK,PSH PSH -j DROP # URG — єдиний встановлений біт, без очікуваного супровідного ACK iptables -A INPUT -p tcp --tcp-flags ACK,URG URG -j DROP
# Multicast - ігнорувати iptables -A INPUT -s $MULTICAST -j DROP iptables -A INPUT -d $MULTICAST -j DROP
# будь-які встановлені чи пов’язані недоліки вітаються iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Loopback iptables -A INPUT -i lo -j ACCEPT
# Статистика та авторизація для клієнтів, тести ping для net_ips у $NETWORK; робити
iptables -A INPUT -p icmp -i $IN --icmp-type echo-request -j ACCEPT iptables -A INPUT -p icmp -i $OUT --icmp-type echo-request -j ACCEPT
############ Відкриваємо потрібні нам порти. # FTP iptables -A INPUT -p tcp --dport 21 -m state --state NEW -j ACCEPT # PASSIVE FTP iptables -t filtr -A INPUT -p tcp -m tcp --dport 50000:50500 -m state --state NEW -j ACCEPT iptables -t filtr -A INPUT -p udp -m udp --dport 50000:50500 -m state --state NEW -j ACCEPT # APACHE iptables -A INPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type timestamp-reply -j DROP
########### NAT Вписуємо сюди IP своїх комп'ютерів у локальній мережі.
iptables -t nat -A POSTROUTING -s 2.2.2.10 -o $OUT -j MASQUERADE iptables -t nat -A POSTROUTING -s 2.2.2.11 -o $OUT -j MASQUERADE iptables -t nat -A POSTROUTING -s 2.2.2.12 -o $OUT -j MASQUERADE iptables -t nat -A POSTROUTING -s 2.2.2.13 -o $OUT -j MASQUERADE iptables -t nat -A POSTROUTING -s 2.2.2.14 -o $OUT -j MASQUERADE
############ PORT FORWARD Сюди вписуємо прокидання портів локальну мережу.
iptables -t nat -A PREROUTING -p tcp -d $OUTADDR --dport 8230 -j DNAT --to-destination 2.2.2.10:8230 iptables -t filtr -A FORWARD -i $OUT -d 2.2.2.10 -p tcp --dport 8230 -j ACCEPT
echo "--> IPTABLES firewall loaded/activated
;;; *) echo "Usage: firewall (startstoprestartstatus) EXTIF INTIF" exit 1 esac
Після налаштування цього скрипта під себе у вас вийде фаєрвол із політикою DROP, та NAT.
3. Встановлення та налаштування Shaper.
Завантажте з сайту розробника дистрибутив програми Master Shaper. В архіві ви знайдете докладний опис продукту, а так інструкції з використання та встановлення. Програма має WEB інтерфейс для роботи та налаштування, а також серверну частину. Master Shaper дозволяє створювати тарифи, можливе налаштуванняпріоритезація трафіку, дуже гнучка і функціональна система. Налаштування та встановлення займе у вас зовсім небагато часу.