#!/bin/bash
inet="ppp0"
echo "1" > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv4/ip_dynaddr
modprobe iptable_nat
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
iptables -F
iptables -F -t nat
iptables -F -t mangle
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
#Маскардинг в инет и локалку
iptables --table nat --append POSTROUTING --out-interface vlan3 -j MASQUERADE
iptables --table nat --append POSTROUTING --out-interface vlan4 -j MASQUERADE
iptables --table nat --append POSTROUTING --out-interface ppp0 -j MASQUERADE
iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
#iptables -A FORWARD -i vlan3 -s 192.168.3.250 -o ppp0 -j DROP
#iptables -A FORWARD -i vlan3 -s 192.168.3.249 -o ppp0 -j DROP
#Разрешаем гулять всем подсетям
iptables -A FORWARD -i vlan4 -o vlan3 -j ACCEPT
iptables -A FORWARD -i vlan3 -o vlan4 -j ACCEPT
# разрешаем локальный траффик для локальной сети
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A INPUT -i vlan3 -j ACCEPT
iptables -A OUTPUT -o vlan3 -j ACCEPT
iptables -A INPUT -i vlan4 -j ACCEPT
iptables -A OUTPUT -o vlan4 -j ACCEPT
# ICMP разрешаем пинг с локальной сети провайдера до сервера
iptables -A INPUT -i $inet -p icmp -j ACCEPT
iptables -A OUTPUT -o $inet -p icmp -j ACCEPT
# Отбрасывать все пакеты, которые не могут быть идентифицированы и поэтому не могут иметь определенного статуса.
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A FORWARD -m state --state INVALID -j DROP
# Принимать все пакеты, которые инициированы из уже установленного соединения, и имеющим признак ESTABLISHED.
# Состояние ESTABLISHED говорит о том, что это не первый пакет в соединении.
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
# Приводит к связыванию системных ресурсов, так что реальных обмен данными становится не возможным.
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
iptables -A OUTPUT -p tcp ! --syn -m state --state NEW -j DROP
#Разрешаем ICMP пакеты для vlan3, vlan4 в интернет
iptables -A FORWARD -i ppp0 -o vlan3 -p icmp -j ACCEPT
iptables -A FORWARD -i vlan3 -o ppp0 -p icmp -j ACCEPT
iptables -A FORWARD -i ppp0 -o vlan4 -p icmp -j ACCEPT
iptables -A FORWARD -i vlan4 -o ppp0 -p icmp -j ACCEPT
# Разрешаем dns серверу
#
#iptables -A INPUT -i $inet -p udp --sport 53 -j ACCEPT
#iptables -A OUTPUT -o $inet -p udp --dport 53 -j ACCEPT
iptables -A INPUT -i $inet -p udp --sport 53 -j ACCEPT
iptables -A OUTPUT -o $inet -p udp --dport 53 -j ACCEPT
#Разрешаем серверу http и dydns
iptables -A INPUT -i $inet -p tcp --sport 80 -j ACCEPT
iptables -A OUTPUT -o $inet -p tcp --dport 80 -j ACCEPT
#Разрешаем серверу https
iptables -A INPUT -i eth1 -p tcp --dport 443 -j ACCEPT
iptables -A OUTPUT -o eth1 -p tcp --sport 443 -j ACCEPT
#Разрешаем FTP
iptables -A INPUT -i $inet -p tcp --sport 21 --dport 21 -j ACCEPT
iptables -A OUTPUT -o $inet -p tcp --sport 21 --dport 21 -j ACCEPT
#Разрешаем SSH
iptables -A INPUT -i $inet -p tcp --sport 22 --dport 22 -j ACCEPT
iptables -A OUTPUT -o $inet -p tcp --sport 22 --dport 22 -j ACCEPT
##################### Разрешаем доступ в инет и в локалку ##################
NUMBERS_I="192.168.1.186 192.168.1.173 192.168.1.174 192.168.1.177 192.168.1.178 192.168.1.179 192.168.1.180 192.168.1.190"
for number_i in `echo $NUMBERS_I`
do
echo $number_i
echo "ok"
iptables -A FORWARD -s $number_i -o $inet -p tcp -m multiport --dport 80,443,110,25,143,5190,20,21,50225,2106,7772,50110,50025,3389 -j ACCEPT
iptables -A FORWARD -i $inet -d $number_i -p tcp -m multiport --sport 80,443,110,25,143,5190,20,21,50225,2106,7772,50110,50025,3389 -j ACCEPT
iptables -A FORWARD -s $number_i -o $inet -p udp -m multiport --dport 80,443,110,25,143,5190,20,21,50225,2106,7772,50110,50025,3389 -j ACCEPT
iptables -A FORWARD -i $inet -d $number_i -p udp -m multiport --sport 80,443,110,25,143,5190,20,21,50225,2106,7772,50110,50025,3389 -j ACCEPT
done
#############################################################################
###################### Разрешаем все для admin.mgkb1.local ##################
iptables -t mangle -A FORWARD -s 192.168.1.173 -o ppp0 -j MARK --set-mark 100
iptables -t mangle -A FORWARD -i ppp0 -d 192.168.1.173 -j MARK --set-mark 100
iptables -A FORWARD -s 192.168.1.173 -o ppp0 -j ACCEPT
iptables -A FORWARD -i ppp0 -d 192.168.1.173 -j ACCEPT
#############################################################################
################### Разрешаем временно выгрузку Паруса ######################
#iptables -t mangle -A FORWARD -s 192.168.1.177 -o ppp0 -j MARK --set-mark 100
#iptables -t mangle -A FORWARD -i ppp0 -d 192.168.1.177 -j MARK --set-mark 100
#iptables -A FORWARD -s 192.168.1.177 -o ppp0 -j ACCEPT
#iptables -A FORWARD -i ppp0 -d 192.168.1.177 -j ACCEPT
#############################################################################
NUMBERS_I2="192.168.3.10 192.168.3.123 192.168.3.249 192.168.3.250 192.168.3.253 192.168.3.246 192.168.3.245 192.168.3.244"
for number_i2 in `echo $NUMBERS_I2`
do
##Ну а тут разрешаем пользователям внутренней сети доступ в инет и в локалку
echo $number_i2
echo "ok"
iptables -A FORWARD -s $number_i2 -o $inet -p tcp -m multiport --dport 80,443,110,25,143,5190,20,21 -j ACCEPT
iptables -A FORWARD -i $inet -d $number_i2 -p tcp -m multiport --sport 80,443,110,25,143,5190,20,21 -j ACCEPT
iptables -A FORWARD -s $number_i2 -o $inet -p udp -m multiport --dport 80,443,110,25,143,5190,20,21,53 -j ACCEPT
iptables -A FORWARD -i $inet -d $number_i2 -p udp -m multiport --sport 80,443,110,25,143,5190,20,21,53 -j ACCEPT
done
#Режем входящую
NUMBERS_VLAN="vlan3 vlan4"
for number_vl in `echo $NUMBERS_VLAN`
do
echo $number_vl
#Даём всем инет но min
iptables -t mangle -A FORWARD -i $number_vl -o $inet -j MARK --set-mark 90
iptables -t mangle -A FORWARD -i $inet -o $number_vl -j MARK --set-mark 90
tc qdisc del dev $number_vl root
tc qdisc add dev $number_vl root handle 1: htb
tc class add dev $number_vl parent 1: classid 1:1 htb rate 100Mbit
tc class add dev $number_vl parent 1:1 classid 1:100 htb rate 100Mbit ceil 100Mbit prio 20
tc class add dev $number_vl parent 1:1 classid 1:90 htb rate 200Kbit ceil 300Kbit prio 90
tc class add dev $number_vl parent 1:1 classid 1:60 htb rate 600Kbit ceil 700Kbit prio 60
tc class add dev $number_vl parent 1:1 classid 1:80 htb rate 1Mbit ceil 2Mbit prio 80
tc class add dev $number_vl parent 1:1 classid 1:70 htb rate 150Kbit ceil 200Kbit prio 1
tc class add dev $number_vl parent 1:1 classid 1:10 htb rate 1Mbit ceil 3Mbit prio 10
tc qdisc add dev $number_vl parent 1:100 handle 100: sfq perturb 10
tc qdisc add dev $number_vl parent 1:90 handle 90: sfq perturb 10
tc qdisc add dev $number_vl parent 1:80 handle 80: sfq perturb 10
tc qdisc add dev $number_vl parent 1:70 handle 70: sfq perturb 10
tc qdisc add dev $number_vl parent 1:60 handle 60: sfq perturb 10
tc qdisc add dev $number_vl parent 1:10 handle 10: sfq perturb 10
tc filter add dev $number_vl parent 1:0 protocol ip prio 1 handle 100 fw classid 1:100
tc filter add dev $number_vl parent 1:0 protocol ip prio 1 handle 90 fw classid 1:90
tc filter add dev $number_vl parent 1:0 protocol ip prio 1 handle 80 fw classid 1:80
tc filter add dev $number_vl parent 1:0 protocol ip prio 1 handle 70 fw classid 1:70
tc filter add dev $number_vl parent 1:0 protocol ip prio 1 handle 60 fw classid 1:60
tc filter add dev $number_vl parent 1:0 protocol ip prio 1 handle 10 fw classid 1:10
done
#Даём начальнику по max
iptables -t mangle -A FORWARD -s 192.168.1.173 -j MARK --set-mark 10
iptables -t mangle -A FORWARD -d 192.168.1.173 -j MARK --set-mark 10
###############Максимум входящей скорости отдел кадров ######################
iptables -t mangle -A FORWARD -s 192.168.1.177 -j MARK --set-mark 10
iptables -t mangle -A FORWARD -d 192.168.1.177 -j MARK --set-mark 10
#############################################################################
#Между подсетями на 100
iptables -t mangle -A FORWARD -i vlan3 -o vlan4 -j MARK --set-mark 100
iptables -t mangle -A FORWARD -i vlan4 -o vlan3 -j MARK --set-mark 100
#Кому необходим интернет на средней скорости + приоритет на портах
NUMBERS_N="192.168.1.174"
for number_n in `echo $NUMBERS_N`
do
iptables -t mangle -A FORWARD -s $number_n -p tcp -m multiport --dport 80,443,110,25,143,5190,20,21,50225,2106,7772 -j MARK --set-mark 80
iptables -t mangle -A FORWARD -d $number_n -p tcp -m multiport --sport 80,443,110,25,143,5190,20,21,50225,2106,7772 -j MARK --set-mark 80
iptables -t mangle -A FORWARD -s $number_n -p udp -m multiport --dport 80,443,110,25,143,5190,20,21,50225,2106,7772 -j MARK --set-mark 80
iptables -t mangle -A FORWARD -d $number_n -p udp -m multiport --sport 80,443,110,25,143,5190,20,21,50225,2106,7772 -j MARK --set-mark 80
done
#Даём 150 - 200 Kbit/s
NUMBERS_MAX="192.168.1.186 192.168.1.178 192.168.1.177 192.168.1.179 192.168.1.180 192.168.1.190"
for number_mx in `echo $NUMBERS_MAX`
do
iptables -t mangle -A FORWARD -s $number_mx -j MARK --set-mark 70
iptables -t mangle -A FORWARD -d $number_mx -j MARK --set-mark 70
done
#Даем 200 - 300 Kbit/s
NUMBERS_MAX1="192.168.3.10 192.168.3.123 192.168.3.250 192.168.3.249"
for number_mx1 in `echo $NUMBERS_MAX1`
do
iptables -t mangle -A FORWARD -s $number_mx1 -j MARK --set-mark 90
iptables -t mangle -A FORWARD -d $number_mx1 -j MARK --set-mark 90
done
#Даем 500 - 600 Kbit/s
NUMBERS_MAX2="192.168.3.253 192.168.3.246 192.168.3.245 192.168.3.244"
for number_mx2 in `echo $NUMBERS_MAX2`
do
iptables -t mangle -A FORWARD -s $number_mx2 -j MARK --set-mark 60
iptables -t mangle -A FORWARD -d $number_mx2 -j MARK --set-mark 60
done
#Режем исходящую
tc qdisc del dev $inet root
tc qdisc add dev $inet root handle 1: htb
tc class add dev $inet parent 1: classid 1:1 htb rate 100Mbit
tc class add dev $inet parent 1:1 classid 1:90 htb rate 200Kbit ceil 300Kbit prio 90
tc class add dev $inet parent 1:1 classid 1:80 htb rate 1Mbit ceil 2Mbit prio 80
tc class add dev $inet parent 1:1 classid 1:70 htb rate 150Kbit ceil 200Kbit prio 1
tc class add dev $inet parent 1:1 classid 1:60 htb rate 600Kbit ceil 700Kbit prio 60
tc class add dev $inet parent 1:1 classid 1:10 htb rate 150Kbit ceil 200Kbit prio 10
tc qdisc add dev $inet parent 1:90 handle 90: sfq perturb 10
tc qdisc add dev $inet parent 1:80 handle 80: sfq perturb 10
tc qdisc add dev $inet parent 1:70 handle 70: sfq perturb 10
tc qdisc add dev $inet parent 1:60 handle 60: sfq perturb 10
tc qdisc add dev $inet parent 1:10 handle 10: sfq perturb 10
tc filter add dev $inet parent 1:0 protocol ip prio 1 handle 90 fw classid 1:90
tc filter add dev $inet parent 1:0 protocol ip prio 1 handle 80 fw classid 1:80
tc filter add dev $inet parent 1:0 protocol ip prio 1 handle 70 fw classid 1:70
tc filter add dev $inet parent 1:0 protocol ip prio 1 handle 60 fw classid 1:60
tc filter add dev $inet parent 1:0 protocol ip prio 1 handle 10 fw classid 1:10