Нужна помощь. я не так силен в Linux'е. Устроился администратором и тут начальство решеило перейти на Linux, после кончины предыдущего сервера Мастдая.Написал скрипт но нет уверенности что он правильный. А начальство наседает. помогите
Условие было такое:
набор создания таблицы маршрутов (используя пакет iproute2),
конфигурирования сетевых интерфейсов и правил для iptablesЛокальная сеть 10.0.0.0/16,
доступные внешние адреса 82.179.92.1/255.255.255.240
имеется интерфейс eth0 с провайдером интернет услуг на котором поднят канальный адрес/сеть
62.183.98.113/255.255.255.252
Локальная сеть подключена к интерфейсу eth1 в локальной сети сервер имеет адрес 10.0.0.1
Требования:1) Траффик идущий в интернет не должен иметь адрес источника из сети канальных адресов
выданных провайдером 62.183.98.113/255.255.255.252
2) Сервер должен быть доступен из интернет по адресу 82.179.92.6
3) К интерфейсу eth1 подключены сервера с адресами 82.179.92.4 и 82.179.92.8 нужно обеспечить их
доступность из интернет по этим адресам.
4) Весь HTTP траффик от пользователей локальной сети завернуть
на проски сервер прозрачно настроенный и работающий на этом сервере на порту 3128
прокси сервер настроен так что пакеты исходящие от него имеют адрес источника 82.179.92.7
6) Сделать исключение для пользователей с адресами 10.0.1.62/255.255.255.240 с этих адресов должны быть
доступны напрямую все порты и хосты TCP пакеты от этих пользовтелей должны отправляться в интернет с
адресом источника 82.179.92.3
7) Для пользователей 10.0.3.1/28 сделать доступными порты ICQ,SSH (5190,22)Вот скрипт:
#!/bin/bash
IPTABLES="/usr/sbin/iptables"
#IP_NET "82.179.92.1/28"#INET_IFACE "eth0"
#IP_CANAL "62.183.98.113/30"#LAN_IFACE "eth1"
#LAN_IP_RANGE "10.0.0.1/16"
#LAN_IP "10.0.0.1"$IPTABLES -F INPUT
$IPTABLES -F OUTPUT
$IPTABLES -F FORWARD$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT DROP
$IPTABLES -P FORWARD DROP$IPTABLES -N network
$IPTABLES -N allowed
$IPTABLES -N tcp_packets
$IPTABLES -N udp_packets
$IPTABLES -N icmp_packets# ОШИБОЧНЫЕ ПАКЕТЫ ТСР
$IPTABLES -A bad_tcp_packets -p tcp --tcp-flags SYN,ACK SYN,ACK \ -m state --state NEW -j REJECT --reject-with tcp-reset
$IPTABLES -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j LOG \ --log-prefix "New not syn:"
$IPTABLES -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j DROP# ПРОВЕРКА ТСР
$IPTABLES -A allowed -p TCP --syn -j ACCEPT
$IPTABLES -A allowed -p TCP -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A allowed -p TCP -j DROP# TCP правила
$IPTABLES -A tcp_packets -p TCP -s 0/0 --dport 80 -j allowed
$IPTABLES -A tcp_packets -p TCP -s 0/0 --sport 80 -j allowed# UDP ports
$IPTABLES -A udp_packets -p UDP -s 0/0 --destination-port 53 -j ACCEPT
$IPTABLES -A udp_packets -p UDP -s 0/0 --source-port 53 -j ACCEPT# ICMP rules
$IPTABLES -A icmp_packets -p ICMP -s 0/0 --icmp-type 8 -j ACCEPT
$IPTABLES -A icmp_packets -p ICMP -s 0/0 --icmp-type 11 -j ACCEPT# INPUT
# Проверка плохих пакетов$IPTABLES -A INPUT -p tcp -j bad_tcp_packets
# Локальная сеть
$IPTABLES -A INPUT -p ALL -i eth1 -s 10.0.0.1/16 -j ACCEPT
# Распределение IP по пакетам
$IPTABLES -A INPUT -p ALL -d 82.179.92.1/28 -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A INPUT -p TCP -i eth0 -j tcp_packets
$IPTABLES -A INPUT -p UDP -i eth0 -j udp_packets
$IPTABLES -A INPUT -p ICMP -i eth0 -j icmp_packets#log
$IPTABLES -A INPUT -m limit --limit 3/minute --limit-burst 3 -j LOG \
--log-level DEBUG --log-prefix "IPT INPUT packet died: "#END INPUT
#eth
$IPTABLES -A INPUT -p tcp -m multiport --dport 53,80 -i eth0 -j ACCEPT
$IPTABLES -A INPUT -p tcp -s 82.179.92.6 -m multiport --dport 53,80 -i eth0 -j ACCEPT$IPTABLES -A INPUT -p tcp -m multiport --dport 53,80 -i eth1 -j ACCEPT
$IPTABLES -A INPUT -p tcp -s 82.179.92.4 -m multiport --dport 53,80 -i eth1 -j ACCEPT
$IPTABLES -A INPUT -p tcp -s 82.179.92.8 -m multiport --dport 53,80 -i eth1 -j ACCEPT
$IPTABLES -A FORWARD -i eth1 -o eth0 -m state --state NEW, ESTABLISHED -j ACCEPT
#FORWARD
#Проверка плохих пакетов$IPTABLES -A FORWARD -p tcp -j bad_tcp_packets
#Правила
$IPTABLES -A FORWARD -i eth1 -j ACCEPT
$IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT#log
$IPTABLES -A FORWARD -m limit --limit 3/minute --limit-burst 3 -j LOG \
--log-level DEBUG --log-prefix "IPT FORWARD packet died: "#END FORWARD
#OUTPUT
#Плохие пакеты$IPTABLES -A OUTPUT -p tcp -j bad_tcp_packets
# правила
$IPTABLES -A OUTPUT -p ALL -s 82.179.92.1/28 -j ACCEPT
# log
$IPTABLES -A OUTPUT -m limit --limit 3/minute --limit-burst 3 -j LOG \
--log-level DEBUG --log-prefix "IPT OUTPUT packet died:"#POSTROUTING
$IPTABLES -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 82.179.92.6# ПРЕДОТВРАЩЕНИЕ ИСПОЛЬЗОВАНИЯ КАНАЛЬНЫХ АДРЕСОВ
$IPTABLES -t nat -A PREROUTING -p tcp -s 62.183.98.113/30 -j RETURN
$IPTABLES -A FORWARD -s 62.183.98.113/30 -j network
$IPTABLES -t nat -A POSTROUTING -s 62.183.98.113/30 -j SNAT --to-source 82.179.92.6#Прозрачная прокся
$IPTABLES -t nat -A POSTROUTING -s 10.0.0.1/16 -d ! 82.179.92.3 -p tcp -m multiport --dports 80,53 -j SNAT --to-sourse 82.179.92.7:3128
#прямое подключение
$IPTABLES -t nat -A POSTROUTING -p tcp -m multiport --dport 80,53,22,5920 -s 10.0.1.62/28 -j SNAT --to-source 82.179.92.3#ICQ, SSH
$IPTABLES -t nat -A POSTROUTING -s 10.0.3.1/28 -p tcp -m multiport --dport 22,5190 -j SNAT --to-source 82.179.92.6#локальные сервера
$IPTABLES -t nat -A PREROUTING -p tcp -d 82.179.92.4 -m multiport -dport 80,53 -j DNAT --to-destination 10.0.0.1
$IPTABLES -t nat -A PREROUTING -p tcp -d 82.179.92.8 -m multiport -dport 80,53 -j DNAT --to-destination 10.0.0.1$IPTABLES -A INPUT -j network
Оцените пожалуйста и помогите найти логические ошибки буду все выходные над ним сидеть за два дня сделать нужно.
> $IPTABLES -t nat -A POSTROUTING -s 10.0.0.1/16 -d ! 82.179.92.3 -p tcp -m multiport --dports 80,53 -j SNAT --to-sourse 82.179.92.7:312853 порт зачем заворачиваешь на свид?!
Можешь взять за основу
http://www.sys-adm.org.ua/www/squid-transparent.php#c4
спасибо попробую посмотри может чего заметишь еще я пока в Linux'е продолжаю разбираться. Я писал по IPTABLES 1.1.19 без проверки
>[оверквотинг удален]
>-m multiport --dports 80,53 -j SNAT --to-sourse 82.179.92.7:3128
>
>#прямое подключение
>$IPTABLES -t nat -A POSTROUTING -p tcp -m multiport --dport 80,53,22,5920 -s
>10.0.1.62/28 -j SNAT --to-source 82.179.92.3
>
>#ICQ, SSH
>$IPTABLES -t nat -A POSTROUTING -s 10.0.3.1/28 -p tcp -m multiport --dport
>22,5190 -j SNAT --to-source 82.179.92.6
>цепочка POSTROUTING неправильно написана, т.к. пакет проходит в цепочке до первого удовлетворения условиям. У вас все пакеты подподают под:
>$IPTABLES -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 82.179.92.6и пойдут в интернет с адресом 82.179.92.6. Нужно сменить порядок правил!
И всяково рода фильтрацию: -p tcp -m multiport --dport 80,53,22,5920 лучше производить в цепочке FORWARD: $IPTABLES -s 10.0.1.62/28 -p tcp -m multiport --dport 80,53,22,5920 -j ACCEPT
>#локальные сервера
>$IPTABLES -t nat -A PREROUTING -p tcp -d 82.179.92.4 -m multiport -dport
>80,53 -j DNAT --to-destination 10.0.0.1
>$IPTABLES -t nat -A PREROUTING -p tcp -d 82.179.92.8 -m multiport -dport
>80,53 -j DNAT --to-destination 10.0.0.1Это тоже не совсем понятно, если у Вас имеются реальные ип зачем их DNAT'ить и тем более на локальный адрес
>#локальные сервера
>$IPTABLES -t nat -A PREROUTING -p tcp -d 82.179.92.4 -m multiport -dport
>80,53 -j DNAT --to-destination 10.0.0.1
>$IPTABLES -t nat -A PREROUTING -p tcp -d 82.179.92.8 -m multiport -dport
>80,53 -j DNAT --to-destination 10.0.0.13) К интерфейсу eth1 подключены сервера с адресами 82.179.92.4 и 82.179.92.8 нужно обеспечить их
доступность из интернет по этим адресам.это я пытался третий пункт реализовать я реально не понимаю, как его сделать в Linux'e
Что значит подключены сервера? Если имеется ввиду что доступны через локалку, то вам надо прописать route, iptables/netfilter здесь не нужен. У провайдера прописано что обращение к 82.179.92.1/255.255.255.240 должно идти к вам, а дальше уже ваша задача правильно прописать маршрут.