только для UBUNTU - с виндой кыш отсюда!
вопросы приветствуются - мне самому еще надо разобраться, потому пока буду отвечать и сам пойму.
Материалы для ознакомления в сети:
http://ru.wikipedia.org/wiki/Iptables
http://interface31.ru/tech_it/2009/11/l ... squid.html
http://www.linuxhorizon.ro/iproute2.html
http://help.ubuntu.ru/wiki/ip_balancing
http://forum.ubuntu.ru/index.php?topic=60258.0
скрипты взяты отсюда и допилены мной для нашей школьной реальности
1. Объявляю таблицы маршрутизации
файл /etc/iproute2/rt_tables
# reserved values
#
255 local
254 main
253 default
0 unspec
#
# local
#
#1 inr.ruhep
10 ED
11 STAR
# 1 - таблица для Департамента образования
# 2- таблица для Старлинк
2. Создаю файл /etc/nat
делаю файл исполняемым
пихаю в него следующее:
#!/bin/bash
echo "Preparing routing tables - 2 ISP"
# Описываем переменные, используемые в скрипте
IP_LOCAL1="192.168.0.1" # адрес нашего маршрутизатора в локальной сети.
IP_INET1="192.168.2.2" # адрес нашего маршрутизатора в сети ED.
IP_INET2="192.168.1.2" # адрес нашего марщрутизатора в сети STAR.
IF_LOCAL1="eth0" # имя интерфейса на локальную сеть
IF_INET1="eth1" # имя интерфейса на ED.
IF_INET2="eth2" # имя интерфейса на STAR.
NET_LOCAL1="192.168.0.0/24" # локальная сеть.
NET_INET1="192.168.2.0/24" # адрес сети в которой гейт ED
NET_INET2="192.168.1.0/24" # адрес сети в которой гейт STAR (а точнее Dlink-роутер).
GW_INET1="192.168.2.1" # гейт ED.
GW_INET2="192.168.1.1" # гейт STAR.
for interface in /proc/sys/net/ipv4/conf/*/rp_filter; do
echo "0" > ${interface}
done
# Настраиваем таблицы маршрутизации
ip route flush table ED #обнуляем первую таблицу маршрутов
ip route flush table STAR #обнуляем вторую таблицу маршрутов
ip rule delete table ED #удаляем наши таблицы, если они присутсвуют в текущей конфигурации (вдруг мы просто перезапускаем скрипт?)
ip rule delete table STAR #аналогично для второй.
ip rule delete table ED #и делаем это два раза, так как у нас два правила на каждую таблицу.
ip rule delete table STAR #аналогично для второй.
ip route add $NET_LOCAL1 dev $IF_LOCAL1 src $IP_LOCAL1 table ED
ip route add $NET_INET1 dev $IF_INET1 src $IP_INET1 table ED
ip route add $NET_INET2 dev $IF_INET2 src $IP_INET2 table ED
ip route add 127.0.0.0/8 dev lo table ED
ip route add default via $GW_INET1 table ED
ip route add $NET_LOCAL1 dev $IF_LOCAL1 src $IP_LOCAL1 table STAR
ip route add $NET_INET1 dev $IF_INET1 src $IP_INET1 table STAR
ip route add $NET_INET2 dev $IF_INET2 src $IP_INET2 table STAR
ip route add 127.0.0.0/8 dev lo table STAR
ip route add default via $GW_INET2 table STAR
ip route add $NET_INET1 dev $IF_INET1 src $IP_INET1 #заполняем основную таблицу адресов. сеть на ED
ip route add $NET_INET2 dev $IF_INET2 src $IP_INET2 #заполняем основную таблицу адресов. сеть на STAR
# А вот это важно для понимания! если понять что происходит в следующих строчках - то можно настраивать любые правила маршрутизации.
ip rule add from $IP_INET1 table ED #все пакеты от ip адреса первого провайдера маршрутизировать по таблице T1
ip rule add from $IP_INET2 table STAR #все пакеты от ip адреса второго провайдера маршрутизировать по таблице T2
ip rule add fwmark 10 table ED #все пакеты, которые имеют метку 10 маршрутизировать по таблице T1
ip rule add fwmark 11 table STAR #все пакеты, которые имеют метку 11 маршрутизировать по таблицу T2
ip route del default
ip route add default via $GW_INET1 #заполняем основную таблицу адресов. дефолтный гейт
#ip route add default via $GW_INET2
ip route flush cache #ну и на последок очистить кеш
# 2 ip в интернете, на которые задаем маршруты вручную. Чтобы проверять работает инет на интерфейсах или нет.
route add -host 212.188.4.10 gw $GW_INET1 $IF_INET1
route add -host 195.34.32.116 gw $GW_INET2 $IF_INET2
## Настраиваем распределение трафика
# Очистка таблиц и цепочек
iptables --flush
iptables --delete-chain
iptables --table nat --flush
iptables --table filter --flush
iptables --table mangle --flush
iptables --table nat --delete-chain
iptables --table filter --delete-chain
iptables --table mangle --delete-chain
# Назначение глобальных политик фаервола
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -F INPUT
iptables -F OUTPUT
iptables -F FORWARD
## Трафик по 80,8080,443(веб различный) и 110,25(почта) метим меткой 10(это на ED)
## ЕСЛИ ЗАРАБОТАЕТ ЗДЕСЬ ИЗМЕНИТЬ перенаправление на squid портов 80,8080 и 443 ибо фильтр контента
iptables -t mangle -A PREROUTING -s $NET_LOCAL1 -p tcp --dport 80 -j MARK --set-mark 10
#iptables -t mangle -A PREROUTING -s $NET_LOCAL1 -p tcp --dport 80 -j RETURN
iptables -t mangle -A PREROUTING -s $NET_LOCAL1 -p tcp --dport 8080 -j MARK --set-mark 10
#iptables -t mangle -A PREROUTING -s $NET_LOCAL1 -p tcp --dport 8080 -j RETURN
iptables -t mangle -A PREROUTING -s $NET_LOCAL1 -p tcp --dport 443 -j MARK --set-mark 10
#iptables -t mangle -A PREROUTING -s $NET_LOCAL1 -p tcp --dport 443 -j RETURN
iptables -t mangle -A PREROUTING -s $NET_LOCAL1 -p tcp --dport 110 -j MARK --set-mark 10
#iptables -t mangle -A PREROUTING -s $NET_LOCAL1 -p tcp --dport 110 -j RETURN
iptables -t mangle -A PREROUTING -s $NET_LOCAL1 -p tcp --dport 25 -j MARK --set-mark 10
#iptables -t mangle -A PREROUTING -s $NET_LOCAL1 -p tcp --dport 25 -j RETURN
## Трафик по 5190(аська) , а также весь, неописанный выше, метим меткой 11(это на STAR)
iptables -t mangle -A PREROUTING -s $NET_LOCAL1 -p tcp --dport 5190 -j MARK --set-mark 11
#iptables -t mangle -A PREROUTING -s $NET_LOCAL1 -p tcp --dport 5190 -j RETURN
iptables -t mangle -A PREROUTING -s $NET_LOCAL1 -j MARK --set-mark 11
## SNAT
iptables -t nat -A POSTROUTING -o $IF_INET1 -j SNAT --to-source $IP_INET1
iptables -t nat -A POSTROUTING -o $IF_INET2 -j SNAT --to-source $IP_INET2
/data/scripts/fw # тут запуск фаервола
echo "Routing OK"
exit 0
Скрипт фаервола
#!/bin/bash
echo "preparing iptables firewall..."
# Описываем переменные, используемые в скрипте
IP_LOCAL1="192.168.0.1" # адрес нашего маршрутизатора в локальной сети.
IP_INET1="192.168.2.2" # адрес нашего маршрутизатора в сети ED.
IP_INET2="192.168.1.2" # адрес нашего марщрутизатора в сети STAR.
IF_LOCAL1="eth0" # имя интерфейса на локальную сеть
IF_INET1="eth1" # имя интерфейса на ED.
IF_INET2="eth2" # имя интерфейса на STAR.
NET_LOCAL1="192.168.0.0/24" # локальная сеть.
NET_INET1="192.168.2.0/24" # адрес сети в которой гейт ED
NET_INET2="192.168.1.0/24" # адрес сети в которой гейт STAR (а точнее Dlink-роутер).
GW_INET1="192.168.2.1" # гейт ED.
GW_INET2="192.168.1.1" # гейт STAR.
UNPRIPORTS="1024:65535" # Номера непривилегированных портов
## Настраиваем iptables(общие правила и параметры)
# Загружаем модули, для корректной работы VPN, Active ftp, DCC которые будут идти через NAT.
modprobe ip_nat_ftp
modprobe ip_nat_pptp
modprobe ip_conntrack_ftp
echo "1" > /proc/sys/net/ipv4/ip_forward # Разрешаем форвардинг
echo "1" > /proc/sys/net/ipv4/ip_dynaddr # Разрешаем форвардинг для VPN
# Порты NETBIOS :
iptables -A FORWARD -p udp -m multiport --ports 135,136,137,138,139,445 -j ACCEPT # Разрешаем форвард NetBIOS
iptables -A FORWARD -p tcp -m multiport --ports 135,136,137,138,139,445 -j ACCEPT # чтобы при включенном vpn работали общие папки
# закрываем APACHE снаружи и открываем изнутри(все сайты(их несколько - и влом на каждом прописывать Allow From) веб-сервера доступены только из локальной
сети)
iptables -A INPUT -p tcp -i $IF_INET1 -m multiport --ports 80,8080,443 -j DROP
iptables -A INPUT -p tcp -i $IF_INET2 -m multiport --ports 80,8080,443 -j DROP
iptables -A INPUT -p tcp -i $IF_LOCAL1 -m multiport --ports 80,8080,443 -j ACCEPT
# Разрешаем все ранее запрошенные/установленные соединения
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state --state NEW -i ! $IF_INET1 -j ACCEPT
iptables -A INPUT -m state --state NEW -i ! $IF_INET2 -j ACCEPT
iptables -A FORWARD -i $IF_INET1 -o $IF_LOCAL1 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i $IF_INET2 -o $IF_LOCAL1 -m state --state ESTABLISHED,RELATED -j ACCEPT
# Разрешаем прохождение пакетов по интерфейсу обратной петли
iptables -A INPUT -i lo -j ACCEPT
# Statistics and auths for customers, ping tests
for net_ips in $NET_LOCAL1; do
iptables -A INPUT -p icmp -i $IF_LOCAL1 --icmp-type echo-request -j ACCEPT
iptables -A INPUT -p icmp -i $IF_INET1 --icmp-type echo-request -j ACCEPT
iptables -A INPUT -p icmp -i $IF_INET2 --icmp-type echo-request -j ACCEPT
done
#Траффик на сквид
#iptables -t nat -A PREROUTING -i eth0 -d ! 192.168.0.0/24 -p tcp -m multiport --dport 80,8080 -j DNAT --to 192.168.0.1:3128
# DNS сервер имен разрешаем.
iptables -A OUTPUT -p udp -m udp -o $IF_INET1 --dport 53 --sport $UNPRIPORTS -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp -o $IF_INET1 --dport 53 --sport $UNPRIPORTS -j ACCEPT
iptables -A INPUT -p udp -m udp -i $IF_INET1 --dport $UNPRIPORTS --sport 53 -j ACCEPT
iptables -A INPUT -p tcp -m tcp -i $IF_INET1 --dport $UNPRIPORTS --sport 53 -j ACCEPT
iptables -A OUTPUT -p udp -m udp -o $IF_INET2 --dport 53 --sport $UNPRIPORTS -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp -o $IF_INET2 --dport 53 --sport $UNPRIPORTS -j ACCEPT
iptables -A INPUT -p udp -m udp -i $IF_INET2 --dport $UNPRIPORTS --sport 53 -j ACCEPT
iptables -A INPUT -p tcp -m tcp -i $IF_INET2 --dport $UNPRIPORTS --sport 53 -j ACCEPT
# Не знаю, будет ли FTP. Если подниму - открою эти правила для доступа
# 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
# Пока закрываю доступ по VPN пока не настроен VPN сервер
# Разрешаем VPN для определенных адресов и запрещаем остальным
#iptables -A INPUT -s 93.157.124.11 -i $IF_INET1 -p tcp --dport 1723 -j ACCEPT
#iptables -A INPUT -s 91.204.149.84 -i $IF_INET1 -p tcp --dport 1723 -j ACCEPT
#iptables -A INPUT -i $IF_INET1 -p tcp --dport 1723 -j DROP
#iptables -A INPUT -s 93.157.124.11 -i $IF_INET2 -p tcp --dport 1723 -j ACCEPT
#iptables -A INPUT -s 91.204.149.84 -i $IF_INET2 -p tcp --dport 1723 -j ACCEPT
#iptables -A INPUT -i $IF_INET2 -p tcp --dport 1723 -j DROP
#iptables -A INPUT -s 93.157.124.11 -p tcp --dport 1723 -m state --state NEW -j ACCEPT
#iptables -A INPUT -s 91.204.149.84 -p tcp --dport 1723 -m state --state NEW -j ACCEPT
#iptables -A INPUT -p tcp --dport 1723 -j DROP
# Разрешаем доступ к pptp-серверу для всех
#iptables -A INPUT -p tcp --dport 1723 -m state --state NEW -j ACCEPT
# Пока закрываю доступ по SSH извне ибо не помню домашний адрес
# Разрешаем доступ по ssh на внешние интерфейсы только с определенных адресов, с остальных закрываем
#iptables -A INPUT -s 93.157.124.11 -i $IF_INET1 -p tcp --dport 22 -j ACCEPT
#iptables -A INPUT -i $IF_INET1 -p tcp --dport 22 -j DROP
#iptables -A INPUT -s 93.157.124.11 -i $IF_INET2 -p tcp --dport 22 -j ACCEPT
#iptables -A INPUT -i $IF_INET2 -p tcp --dport 22 -j DROP
#iptables -A INPUT -s 93.157.124.11 -p tcp --dport 22 -j ACCEPT
#iptables -A INPUT -p tcp --dport 22 -j DROP
# Разрешаем работу почтовых клиентов(учитываем, что почтовый траффик идет у нас через ED, т.е. eth0, IF_INET1)
iptables -A INPUT -i $IF_INET1 -p tcp --dport 110 -j ACCEPT
iptables -A INPUT -i $IF_INET1 -p tcp --dport 25 -j ACCEPT
#iptables -A INPUT -i $IF_INET2 -p tcp --dport 110 -j ACCEPT
#iptables -A INPUT -i $IF_INET2 -p tcp --dport 25 -j ACCEPT
iptables -A INPUT -i $IF_LOCAL1 -p tcp --dport 110 -j ACCEPT
iptables -A INPUT -i $IF_LOCAL1 -p tcp --dport 25 -j ACCEPT
# Отключены форварды на почтовые порты пока не поднят почтовый сервер
# Форвард 25 порта на MS Exchange 2003(SBS)
#iptables -t nat -A PREROUTING -p tcp -d $IP_INET1 --dport 25 -j DNAT --to-destination 192.168.0.110:25
#iptables -t nat -A PREROUTING -p tcp -d $IP_INET2 --dport 25 -j DNAT --to-destination 192.168.0.110:25
#iptables -A FORWARD -i $IF_INET1 -d 192.168.0.110 -p tcp --dport 25 -j ACCEPT
#iptables -A FORWARD -i $IF_INET2 -d 192.168.0.110 -p tcp --dport 25 -j ACCEPT
# Форвард 110 порта на MS Exchange 2003(SBS)
#iptables -t nat -A PREROUTING -p tcp -d $IP_INET1 --dport 110 -j DNAT --to-destination 192.168.0.110:110
#iptables -t nat -A PREROUTING -p tcp -d $IP_INET2 --dport 110 -j DNAT --to-destination 192.168.0.110:110
#iptables -A FORWARD -i $IF_INET1 -d 192.168.0.110 -p tcp --dport 110 -j ACCEPT
#iptables -A FORWARD -i $IF_INET2 -d 192.168.0.110 -p tcp --dport 110 -j ACCEPT
# Форвард Рабочего места SBS
#iptables -t nat -A PREROUTING -p tcp -d $IP_INET1 --dport 80 -j DNAT --to-destination 192.168.0.110:80
#iptables -t nat -A PREROUTING -p tcp -d $IP_INET1 --dport 443 -j DNAT --to-destination 192.168.0.110:443
#iptables -t nat -A PREROUTING -p tcp -d $IP_INET1 --dport 444 -j DNAT --to-destination 192.168.0.110:444
#iptables -A FORWARD -i $IF_INET1 -d 192.168.0.110 -p tcp --dport 80 -j ACCEPT
#iptables -A FORWARD -i $IF_INET1 -d 192.168.0.110 -p tcp --dport 443 -j ACCEPT
#iptables -A FORWARD -i $IF_INET1 -d 192.168.0.110 -p tcp --dport 444 -j ACCEPT
#iptables -t nat -A PREROUTING -p tcp -d $IP_INET2 --dport 80 -j DNAT --to-destination 192.168.0.110:80
#iptables -t nat -A PREROUTING -p tcp -d $IP_INET2 --dport 443 -j DNAT --to-destination 192.168.0.110:443
#iptables -t nat -A PREROUTING -p tcp -d $IP_INET2 --dport 444 -j DNAT --to-destination 192.168.0.110:444
#iptables -A FORWARD -i $IF_INET2 -d 192.168.0.110 -p tcp --dport 80 -j ACCEPT
#iptables -A FORWARD -i $IF_INET2 -d 192.168.0.110 -p tcp --dport 443 -j ACCEPT
#iptables -A FORWARD -i $IF_INET2 -d 192.168.0.110 -p tcp --dport 444 -j ACCEPT
# Закрываем известные троянские порты:
iptables -A FORWARD -p udp -m multiport --sport 16355,21111,1349,26274,29891,31337,31338,47262 -j DROP
iptables -A FORWARD -p tcp -m multiport --sport 555,666,1001,1025,1026,1028,1243,2000,5000,6667,6670,6711 -j DROP
iptables -A FORWARD -p tcp -m multiport --sport 6969,7000,12345,123456,21554,22222,27374,29559,31337,31338 -j DROP
## Запрещаем часть рекламы(режем известные серверы рекламы)
iptables -A FORWARD -j DROP -s 194.67.32.247
iptables -A FORWARD -j REJECT -d 194.67.32.247
iptables -A FORWARD -j DROP -s 81.222.128.0/24
iptables -A FORWARD -j REJECT -d 81.222.128.0/24
iptables -A FORWARD -j DROP -s 80.68.240.245
iptables -A FORWARD -j REJECT -d 80.68.240.245
iptables -A FORWARD -j DROP -s 81.19.80.0/26
iptables -A FORWARD -j REJECT -d 81.19.80.0/26
iptables -A FORWARD -j DROP -s 85.12.15.12
iptables -A FORWARD -j REJECT -d 85.12.15.12
iptables -A FORWARD -j DROP -s 80.68.242.108
iptables -A FORWARD -j REJECT -d 80.68.242.108
iptables -A FORWARD -j DROP -s 88.212.200.101
iptables -A FORWARD -j REJECT -d 88.212.200.101
iptables -A FORWARD -j DROP -s 88.212.200.102
iptables -A FORWARD -j REJECT -d 88.212.200.102
iptables -A FORWARD -j DROP -s 88.212.200.103
iptables -A FORWARD -j REJECT -d 88.212.200.103
iptables -A FORWARD -j DROP -s 88.212.200.104
iptables -A FORWARD -j REJECT -d 88.212.200.104
iptables -A FORWARD -j DROP -s 88.212.200.105
iptables -A FORWARD -j REJECT -d 88.212.200.105
iptables -A FORWARD -j DROP -s 88.212.200.106
iptables -A FORWARD -j REJECT -d 88.212.200.106
iptables -A FORWARD -j DROP -s 88.212.200.107
iptables -A FORWARD -j REJECT -d 88.212.200.107
iptables -A FORWARD -j DROP -s 88.212.200.108
iptables -A FORWARD -j REJECT -d 88.212.200.108
iptables -A FORWARD -j DROP -s 200.124.141.73
iptables -A FORWARD -j REJECT -d 200.124.141.73
iptables -A FORWARD -j DROP -s 213.95.1.55
iptables -A FORWARD -j REJECT -d 213.95.1.55
iptables -A FORWARD -j DROP -s 78.140.139.98
iptables -A FORWARD -j REJECT -d 78.140.139.98
iptables -A FORWARD -j DROP -s 87.98.205.19
iptables -A FORWARD -j REJECT -d 87.98.205.19
iptables -A FORWARD -j DROP -s 91.194.91.210
iptables -A FORWARD -j REJECT -d 91.194.91.210
iptables -A FORWARD -j DROP -s 208.43.125.105
iptables -A FORWARD -j REJECT -d 208.43.125.105
iptables -A FORWARD -j DROP -s 80.93.49.141
iptables -A FORWARD -j REJECT -d 80.93.49.141
iptables -A FORWARD -j DROP -s 80.93.58.59
iptables -A FORWARD -j REJECT -d 80.93.58.59
iptables -A FORWARD -j DROP -s 213.174.137.32
iptables -A FORWARD -j REJECT -d 213.174.137.32
iptables -A FORWARD -j DROP -s 213.174.136.0/24
iptables -A FORWARD -j REJECT -d 213.174.136.0/24
iptables -A FORWARD -j DROP -s 209.160.65.196
iptables -A FORWARD -j REJECT -d 209.160.65.196
iptables -A FORWARD -j DROP -s 83.229.248.167
iptables -A FORWARD -j REJECT -d 83.229.248.167
iptables -A FORWARD -j DROP -s 83.229.249.92
iptables -A FORWARD -j REJECT -d 83.229.249.92
echo "Iptables OK"
exit 0
после всего вышенаписанного добавляю в конец /etc/network/interfaces строку вида
push-up /data/scripts/nat
Интересно, будет ли работать?