Пренаправление smtp траффика на другой интерфейс.
Добрый день,я настраиваю шлюз с тремя интерфейсами. Один из которых смотрит в локальную сеть,а два других в сторону интернет. На шлюзе установлен iptables для NAT. Необходимо отправить исходящий траффик по протоколу smtp через другой интерфейс. Можно ли обойтись только средствами iptables не прибегая к созданию дополнительных таблиц маршрутизации?
eth2 192.168.2.0/24 адрес в локальной сети 192.168.2.225
eth0 192.168.1.0/24 адрес в сети 192.168.1.3 шлюз 192.168.1.1 #Первый интерфейс и его шлюз по умолчанию
eth3 93.168.230.236/30 адрес в сети 93.168.230.238 шлюз 93.168.230.237 #второй интерфейс на который будет перенаправляться почта.
192.168.2.198 адрес моего компьютера
Если добавить в сценарий iptables
$IPT -t mangle -A PREROUTING -i eth2 -s 192.168.2.198 -p tcp -m tcp --dport 25 -j MARK --set-mark 11
$IPT -A FORWARD -i eth2 -s 192.168.2.198 -o eth3 -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A FORWARD -i eth2 -s 192.168.2.198 -o eth3 -p tcp --dport 25 -m state --state NEW -j ACCEPT
$IPT -A FORWARD -i eth3 -o eth2 -d 192.168.2.198 -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -t nat -A POSTROUTING -o eth3 -j SNAT --to-source 93.168.230.238
Или вообще вот так
$IPT -A FORWARD -i eth2 -s 192.168.2.198 -o eth3 -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A FORWARD -i eth2 -s 192.168.2.198 -o eth3 -p tcp --dport 25 -m state --state NEW -j ACCEPT
$IPT -A FORWARD -i eth3 -o eth2 -d 192.168.2.198 -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -t nat -A POSTROUTING -o eth3 -j SNAT --to-source 93.168.230.238
То будет работать?
Или все же придется таблицы маршрутов настраивать и помечать пакеты фаерволлом?
Привожу файлы конфигураций.
/etc/conf.d/net
config_eth0=( "192.168.1.3/24" ) routes_eth0=( "default via 192.168.1.1" ) config_eth3=( "93.168.230.238/30" ) routes_eth3=( "93.168.230.236/30 via 93.168.230.237" ) config_eth2=( "192.168.2.225/24" )
NAT_Firewall
IPT="/sbin/iptables" IF_LPB="lo" IP_LPB="127.0.0.1" IF_LAN="eth2" IP_LAN="192.168.2.225" LAN="192.168.2.0/24" IF_WAN="eth0" IP_WAN="192.168.1.3" WAN=”192.168.1.0./24” IF_WAN2="eth3" IP_WAN2="93.168.230.238" WAN2=”93.168.230.236/30” IP_ADM="192.168.2.198" IP_DNS1="192.168.2.3" IP_DNS2="192.168.2.4" CLASS_A="10.0.0.0/8" CLASS_B="172.16.0.0/22" CLASS_C="192.168.0.0/16" CLASS_D_MULTICAST="224.0.0.0/4" CLASS_E_RESERVED_NET="240.0.0.0/5" INTBC="192.168.2.255" EXTBC="192.168.1.255" if [ "$1" = "start" ] then echo "Starting firewall..." $IPT -Z $IPT -F $IPT -P INPUT DROP $IPT -P OUTPUT DROP $IPT -P FORWARD DROP $IPT -N bad_packets $IPT -N icmp_in $IPT -N icmp_out $IPT -A INPUT -i lo -j ACCEPT $IPT -A OUTPUT -o lo -j ACCEPT $IPT -t nat -A POSTROUTING -o $IF_WAN -j SNAT --to-source $IP_WAN $IPT -A FORWARD -i $IF_LAN -s $LAN -o $IF_WAN -m state --state ESTABLISHED,RELATED -j ACCEPT $IPT -A FORWARD -i $IF_LAN -s $LAN -o $IF_WAN -p tcp -m multiport --dport 25,110,995,465,587,1688 -m state --state NEW -j ACCEPT $IPT -A FORWARD -i $IF_LAN -s $LAN -o $IF_WAN -p tcp --dport 21 --sport 1024:65535 -m state --state NEW -j ACCEPT $IPT -A FORWARD -i $IF_WAN -o $IF_LAN -d $LAN -m state --state ESTABLISHED,RELATED -j ACCEPT $IPT -A FORWARD -i $IF_WAN -o $IF_LAN -d $LAN -p tcp --sport 20 --dport 1024:65535 -m state --state NEW -j ACCEPT $IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT $IPT -A INPUT -i $IF_LAN -s $LAN -p tcp -m multiport --dport 3128,80 -m state --state NEW -j ACCEPT $IPT -A INPUT -i $IF_LAN -s $IP_ADM -p tcp --dport 22 -m state --state NEW -j ACCEPT $IPT -A INPUT -i $IF_LAN -s $LAN -p tcp --dport 514 -m state --state NEW -j ACCEPT $IPT -A INPUT -i $IF_LAN -s $LAN -p udp --dport 514 -m state --state NEW -j ACCEPT $IPT -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT $IPT -A OUTPUT -o $IF_WAN -p tcp --dport 80 -m state --state NEW -j ACCEPT $IPT -A OUTPUT -o $IF_WAN -p tcp --dport 8080 -m state --state NEW -j ACCEPT $IPT -A OUTPUT -o $IF_WAN -p tcp --dport 443 -m state --state NEW -j ACCEPT $IPT -A OUTPUT -o $IF_WAN -p tcp --dport 21 -m state --state NEW -j ACCEPT $IPT -A OUTPUT -o $IF_WAN -p tcp --dport 873 -m state --state NEW -j ACCEPT $IPT -A OUTPUT -o $IF_WAN -p udp --dport 873 -m state --state NEW -j ACCEPT $IPT -A OUTPUT -o $IF_WAN -p tcp --dport 5190 -m state --state NEW -j ACCEPT $IPT -A OUTPUT -o $IF_WAN -p tcp --dport 5222 -m state --state NEW -j ACCEPT $IPT -A OUTPUT -o $IF_WAN -p tcp --dport 5223 -m state --state NEW -j ACCEPT $IPT -A OUTPUT -o $IF_LAN -p tcp -d 192.168.2.3 --dport 389 -m state --state NEW -j ACCEPT $IPT -A OUTPUT -o $IF_LAN -p udp -d 192.168.2.3 --dport 389 -m state --state NEW -j ACCEPT $IPT -A OUTPUT -o $IF_LAN -p tcp -d 192.168.2.4 --dport 389 -m state --state NEW -j ACCEPT $IPT -A OUTPUT -o $IF_LAN -p udp -d 192.168.2.4 --dport 389 -m state --state NEW -j ACCEPT $IPT -A OUTPUT -o $IF_LAN -p tcp -d 192.168.2.3 --dport 88 -m state --state NEW -j ACCEPT $IPT -A OUTPUT -o $IF_LAN -p udp -d 192.168.2.3 --dport 88 -m state --state NEW -j ACCEPT $IPT -A OUTPUT -o $IF_LAN -p tcp -d 192.168.2.4 --dport 88 -m state --state NEW -j ACCEPT $IPT -A OUTPUT -o $IF_LAN -p udp -d 192.168.2.4 --dport 88 -m state --state NEW -j ACCEPT $IPT -A OUTPUT -o $IF_LAN -p udp -m multiport --dport 137,138,139,445 -m state --state NEW -j ACCEPT $IPT -A OUTPUT -o $IF_LAN -p tcp -m multiport --dport 139,445 -m state --state NEW -j ACCEPT $IPT -A OUTPUT -o $IF_LAN -p udp -d $IP_DNS1 --dport 53 --sport $UNPRIVPORTS -m state --state NEW -j ACCEPT $IPT -A OUTPUT -o $IF_LAN -p tcp -d $IP_DNS1 --dport 53 --sport $UNPRIVPORTS -m state --state NEW -j ACCEPT $IPT -A OUTPUT -o $IF_LAN -p udp -d $IP_DNS2 --dport 53 --sport $UNPRIVPORTS -m state --state NEW -j ACCEPT $IPT -A OUTPUT -o $IF_LAN -p tcp -d $IP_DNS2 --dport 53 --sport $UNPRIVPORTS -m state --state NEW -j ACCEPT $IPT -A OUTPUT -o $IF_WAN -p udp --dport 123 -m state --state NEW -j ACCEPT $IPT -A OUTPUT -o $IF_WAN -p udp --dport 1024: -m state --state NEW -j ACCEPT $IPT -A icmp_in -p icmp --icmp-type destination-unreachable -m state --state NEW -j ACCEPT $IPT -A icmp_in -p icmp --icmp-type 4 -m state --state NEW -j ACCEPT $IPT -A icmp_in -p icmp --icmp-type echo-request -m limit --limit 180/minute -m state --state NEW -j ACCEPT $IPT -A icmp_in -p icmp --icmp-type time-exceeded -m state --state NEW -j ACCEPT $IPT -A icmp_in -p icmp --icmp-type 12 -m state --state NEW -j ACCEPT $IPT -A icmp_out -p icmp --icmp-type destination-unreachable -m state --state NEW -j ACCEPT $IPT -A icmp_out -p icmp --icmp-type 4 -j ACCEPT $IPT -A icmp_out -p icmp --icmp-type 8 -m limit --limit 180/minute -m state --state NEW -j ACCEPT $IPT -A icmp_out -p icmp --icmp-type time-exceeded -m state --state NEW -j ACCEPT $IPT -A icmp_out -p icmp --icmp-type 12 -j ACCEPT $IPT -A bad_packets -p tcp ! --syn -m state --state NEW -j ULOG --ulog-prefix "NEW not --syn" $IPT -A bad_packets -p tcp ! --syn -m state --state NEW -j DROP $IPT -A bad_packets -f -j LOG --log-prefix "Fragmented packets" $IPT -A bad_packets -f -j DROP $IPT -A bad_packets -s 10.0.0.0/8 -j LOG --log-prefix "illegal_souce_address" $IPT -A bad_packets -s 10.0.0.0/8 -j DROP $IPT -A bad_packets -s 172.16.0.0/12 -j LOG --log-prefix "illegal_souce_address" $IPT -A bad_packets -s 172.16.0.0/12 -j DROP $IPT -A bad_packets -s 169.254.0.0/16 -j LOG --log-prefix "illegal_souce_address" $IPT -A bad_packets -s 169.254.0.0/16 -j DROP $IPT -A bad_packets -s 192.0.2.0/16 -j LOG --log-prefix "illegal_souce_address" $IPT -A bad_packets -s 192.0.2.0/16 -j DROP $IPT -A bad_packets -s 224.0.0.0/4 -j LOG --log-prefix "illegal_souce_address" $IPT -A bad_packets -s 224.0.0.0/4 -j DROP $IPT -A bad_packets -s 240.0.0.0/5 -j LOG --log-prefix "illegal_souce_address" $IPT -A bad_packets -s 240.0.0.0/5 -j DROP $IPT -A bad_packets -s $BROADCAST_SRC -j DROP $IPT -A bad_packets -d $BROADCAST_DEST -j DROP $IPT -A bad_packets -i $IF_WAN -d $BROADCAST_DEST -j DROP $IPT -A bad_packets -i $IF_LAN -d $INTBC -j DROP $IPT -A bad_packets -o $IF_LAN -d $INTBC -j DROP $IPT -A bad_packets -i $IF_WAN -d $EXTBC -j DROP $IPT -A bad_packets -o $IF_WAN -d $EXTBC -j DROP $IPT -I INPUT -j bad_packets $IPT -A INPUT -j icmp_in $IPT -I OUTPUT -j bad_packets $IPT -A OUTPUT -j icmp_out $IPT -I FORWARD -j bad_packets echo "Firewall started" elif [ "$1" = "stop" ] then echo "Stopping firewall..." $IPT -P INPUT ACCEPT $IPT -P OUTPUT ACCEPT $IPT -P FORWARD ACCEPT $IPT -t nat -P PREROUTING ACCEPT $IPT -t nat -P POSTROUTING ACCEPT $IPT -t nat -P OUTPUT ACCEPT $IPT -t mangle -P PREROUTING ACCEPT $IPT -t mangle -P OUTPUT ACCEPT $IPT -F $IPT -t nat -F $IPT -t mangle -F $IPT -X $IPT -t nat -X $IPT -t mangle -X echo "Firewall stopped" fi
Routing
#!/bin/sh ip route flush table T1 #обнуляем первую таблицу маршрутов ip route flush table T2 #обнуляем вторую таблицу маршрутов ip route add 192.168.1.0/24 dev eth0 src 192.168.1.3 table T1 #заполняю в первую таблицу инф. о сети первого провайдера ip route add 192.168.2.0/24 dev eth2 table T1 #заполняю в первую таблицу инф. о том, что у нас существует локальная сеть ip route add 127.0.0.0/8 dev lo table T1 #заполняю в первую таблицу инф. о существовании лупбека ip route add default via 192.168.1.1 table T1 #заполняю в первую таблицу дефолтный гейт на первого провайдера ip route add 93.168.230.236/30 dev eth3 src 93.168.230.238 table T2 #заполняю во вторую таблицу инф. о сети второго провайдера ip route add 192.168.2.0/24 dev eth2 table T2 #заполняю во вторую таблицу инф. о том, что существует локальная сеть. ip route add 127.0.0.0/8 dev lo table T2 #заполняем вторую таблицу инф. о существовании лупбека. ip route add default via 93.168.230.237 table T2 #закидываем вторую таблицу дефолтный гейт на второго провайдера ip rule delete table T1 #удаляем наши таблицы, если они присутсвуют в текущей конфигурации (вдруг мы просто перезапускаем скрипт?) ip rule delete table T2 #аналогично для второй. ip rule delete table T1 #и делаем это два раза, так как у нас два правила на каждую таблицу. ip rule delete table T2 #аналогично для второй. ip rule add from 192.168.1.3 table T1 ip rule add from 93.168.230.238 table T2 ip rule add fwmark 10 table T1 #все пакеты, которые имеют метку 10 маршрутизировать по таблице T1 ip rule add fwmark 11 table T2 #все пакеты, которые имеют метку 11 маршрутизировать по таблицe T2 ip route flush cache #ну и на последок очистить кеш $IPT -t mangle -A PREROUTING -i eth2 -s 192.168.2.198 -p tcp -m tcp --dport 25 -j MARK --set-mark 11 $IPT -t mangle -A PREROUTING -i eth2 -s 192.168.2.198 -p tcp -m multiport --dport 80,443 -j MARK --set-mark 10 $IPT -A FORWARD -i eth2 -s 192.168.2.198 -o eth3 -m state --state ESTABLISHED,RELATED -j ACCEPT $IPT -A FORWARD -i eth2 -s 192.168.2.198 -o eth3 -p tcp --dport 25 -m state --state NEW -j ACCEPT $IPT -A FORWARD -i eth3 -o eth2 -d 192.168.2.198 -m state --state ESTABLISHED,RELATED -j ACCEPT $IPT -A FORWARD -i eth2 -s 192.168.2.198 -o eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT $IPT -A FORWARD -i eth2 -s 192.168.2.198 -o eth0 -p tcp -m multiport --dport 80,443 -m state --state NEW -j ACCEPT $IPT -A FORWARD -i eth0 -o eth2 -d 192.168.2.198 -m state --state ESTABLISHED,RELATED -j ACCEPT #Правило NAT для T2 $IPT -t nat -A POSTROUTING -o eth3 -m mark --mark 11 -j SNAT --to-source 93.168.230.238 #Правило NAT для T1 $IPT -t nat -A POSTROUTING -o eth0 -m mark --mark 10 -j SNAT --to-source 192.168.1.3 exit 0
- Для комментирования войдите или зарегистрируйтесь
Beelzebub написал(а): ip
Обьясните пожалуйста, что нужно указывать в моем случае, адрес машины в локальной сети или ip адрес который смотрит в интернет?
Много текста, сильно
Много текста, сильно внимательно не читал. Однако, судя по приведенным вами конфигам почтовый траффик и так побежит через указанный вами интерфейс. Т.е. - вы УЖЕ добились того, чего хотели. Не совсем понятна суть вопроса... :)
Не знаю, подойдёт ли Вам,
но тут господин slepnoga приводит красивый пример
альтернативного перенаправления трафика, с помощью
net-firewall/xtables-addons
.Но - сколько я не пытался собрать этот пакет - не получается. Скорее всего - дело в установленных
на машине
sys-kernel/zen-sources
.дело скорее всего в
дело скорее всего в установленных linux-headers, вернее в их версии.
Compute:
Bosch M2.8.1 -> custom Bosch M2.8.3 clone from Russia.
Speed about 260 km,Ram 2 pers.,HDD - 70 kg,210 FLOPS ;)
Спасибо за ответы. Буду
Спасибо за ответы. Буду тестировать.
Я понимаю, что не совсем в
Я понимаю, что не совсем в тему, но , имхо, smtp прокси был бы гораздо уместнее и наверно таки вменяемее. При работе на L3 с L7 у меня всегда один вопрос к писателям правил - какие гарантии того, что l7 протокол не пойдет по другим каналан/портам, и что это именно тот l7 протокол, который нам надо :)
P.S маил.ру:2525, гмаил:456 гмаил:5чтототут, и .т.д
Compute:
Bosch M2.8.1 -> custom Bosch M2.8.3 clone from Russia.
Speed about 260 km,Ram 2 pers.,HDD - 70 kg,210 FLOPS ;)
Спасибо за ответы, буду
Спасибо за ответы, буду тестировать.
Хм,
Млин, у меня с gentoo-sources net-firewall/ipset не собирался...