Настройка шлюза в локальной сети, лимитирование скорости (shaper), фаервол (iptables).
1. Введение Многие часто задаются вопросом как быстро настроить раздачу инетернета на несколько копьютеров в локальной сети, пробросить порты внутрь сети, а так же обеспечить безопасность шлюза. Так же иногда необходимо сделать лимит скорости доступа для некоторых компьтеров, не у всех же резиновый канал в интернет, а компьютеров может быть много, да и если скорость не делить между ними могут возникать проблемы с качеством поставляемых услуг, таких как если один абонент запустит торрент клиент, откроет сотню соединений, остальные абоненты в этот момент ощутят резкое падение скорости, и явно не будут рады. В этой статье рассказано какие программы помогут вам решить эти проблемы, настроить фиксированный доступ в интернет для компьютеров вашей локальной сети и решить проблемы со скоростью доступа раз и навсегда.
Для настройки всех необходимых сервисов я использовал одну программу стороннего разработчика (Master Shaper), все остальные необходимые программы присутствуют в штатных репозитариях Ubuntu Linux.
2. Настройка iptables (firewall & nat)
Начнем пожалуй с настройки NAT и фаервола, так же включим форвардинг и исправим некоторые параметры SYSCTL, для выделения нужного количества ресурсов, если у вас к примеру более 5000 компьютеров в локальной сети.
Реализовать все это можно с помощью одного скрипта, который приведен ниже, все парамтры с комментариями.
Код:
#!/bin/bash
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 тогда надо удалить этот пункт
ADMINS="2.2.2.3 2.2.2.4" # IP адреса администраторов, имеют полный доступ на сервер, без каких либо ограничений.
############################################################################################## # Здесь прописаны параметры запуска\остановки\статуса скрипта. лучше не трогайте =) # Остановка скрипта 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 filter -P INPUT ACCEPT iptables -t filter -P OUTPUT ACCEPT iptables -t filter -P FORWARD ACCEPT
echo "...done" ;; status) echo $"Table: filter" iptables --list echo $"Table: nat" iptables -t nat --list ;; restart|reload) $0 stop $0 start ;;
############################################################################################## # Запуск скрипта start) echo "Starting Firewall..." echo ""
# Очистка таблиц и цепочек 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 # Зaпрещаем 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
# Temporary eth0 completely disabled #iptables -A INPUT -i $OUT -j DROP
# Admins - full control (even dagerous) for admin_ips in $ADMINS; do
iptables -A INPUT -s $admin_ips -m state --state NEW -j ACCEPT done
##############################################################################################
# Silently Drop Stealth Scans # All of the bits are cleared iptables -A INPUT -p icmp --icmp-type timestamp-request -j DROP iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP # SYN and FIN are both set iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP # SYN and RST are both set iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP # FIN and RST are both set iptables -A INPUT -p tcp --tcp-flags FIN,RST FIN,RST -j DROP # FIN is the only bit set, without the expected accompanying ACK iptables -A INPUT -p tcp --tcp-flags ACK,FIN FIN -j DROP # PSH is the only bit set, without the expected accompanying ACK iptables -A INPUT -p tcp --tcp-flags ACK,PSH PSH -j DROP # URG is the only bit set, without the expected accompanying ACK iptables -A INPUT -p tcp --tcp-flags ACK,URG URG -j DROP
##############################################################################################
# Multicast - ignore iptables -A INPUT -s $MULTICAST -j DROP iptables -A INPUT -d $MULTICAST -j DROP
# any established or related conns are welcome iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Loopback iptables -A INPUT -i lo -j ACCEPT
# Statistics and auths for customers, ping tests for net_ips in $NETWORK; do
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
done
############ Открываем нужные нам порты. # FTP iptables -A INPUT -p tcp --dport 21 -m state --state NEW -j ACCEPT # PASSIVE FTP iptables -t filter -A INPUT -p tcp -m tcp --dport 50000:50500 -m state --state NEW -j ACCEPT iptables -t filter -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
########### OUTPUT
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 filter -A FORWARD -i $OUT -d 2.2.2.10 -p tcp --dport 8230 -j ACCEPT
echo "...done"
echo "--> IPTABLES firewall loaded/activated <--"
##--------------------------------End Firewall---------------------------------##
;; *) echo "Usage: firewall (start|stop|restart|status) EXTIF INTIF" exit 1 esac
exit 0
После настройки этого скрипта под себя у вас выйдет фаервол с политикой DROP, и NAT.
3. Установка и настройка Shaper.
Скачайте с сайта разработчика дистрибутив программы Master Shaper . В архиве вы найдете подробное описание продукта, а так инструкции по использованию и установки. Программа имеет WEB интерфейс для работы и настройки, а так же серверную часть. Master Shaper позволяет создавать тарифы, возможна настройка приоритезации трафика, очень гибкая и функциональная система. Настройка и установка займет у вас совсем не много времени.
|