nixp.ru v3.0

24 января 2017,
вторник,
06:08:34 MSK

DevOps с компанией «Флант»
kid написал 3 марта 2005 года в 16:46 (585 просмотров) Ведет себя неопределенно; открыл 1 тему в форуме, оставил 2 комментария на сайте.

Привет всем! Вот возникла проблема которую никак не могу решть.

Есть сетка 192.168.0.0/24 на границе шлюз debian

localnet=eth1 192.168.0.1

outsidenet=eth0 83.149.204.26

включен форвардин между карточками

проблема в следующем : пользователи из локальной сети не могут отправлять и получать почту. для почты используем

smtp сервер провайдера с адресом ххх.ххх.ххх.ххх

pop3 тоже сервер но другого прова с адресом yyy.yyy.yyy.yyy.

понимаю что надо рыть в направлении snat и dnat но что бы я не делал не выходит никак.

Genie

ну так настройки этого самого iptables покажи.

в общем случает, надо разрешить пересылать пакеты из внутренней сети на внешние адреса, порты: 25 — smtp (для отправки почты), 110 — pop3 (для приёма), 143 — imap (тоже получение), 993 — imaps (получение почты по SSL-шифрованному каналу), 995 — pop3s (получение почты по SSL-каналу).

все — по протоколу tcp.

что касается smtp, то более правильным будет установить на шлюзе почтовый сервер и настроить его на отсылку почты через сервер провайдера.

kid

#!/bin/bash

IF_INT=«eth1»

IF_EXT=«eth0»

IPADDR=`ifconfig $IF_EXT |awk '/inet addr/ {print($2)}’|awk -F«:» —

'{print($2)}’`

IPINT=`ifconfig $IF_INT |awk '/inet addr/ {print($2)}’|awk -F«:» —

'{print($2)}’`

EXT_MASK=`ifconfig $IF_EXT|awk '/Mask/ {print($4)}’|awk -F«:» —

'{print($2)}’`

INT_MASK=`ifconfig $IF_INT|awk '/Mask/ {print($4)}’|awk -F«:» —

'{print($2)}’`

LOCALNET=«192.168.0.0/24»

ROUTER=`ifconfig|awk '/inet addr/ {print($2)}’|awk -F«:» — '{print($2)}’`

IPT=«/sbin/iptables»

ECHO=«/bin/echo»

TRUSTED_HOSTS=`cat /etc/trusted_hosts`

MASQUERADE_HOSTS=`cat /etc/masq_hosts`

# Open port for local to external

USER_PORTS="21 110 5190 6112 443 9091 9092 1024»

USER_ICMP=«echo-request»

# Open port for external connection

PUBLIC_PORTS="21 22 25 110 80»

PUBLIC_ICMP=«echo-request»

case «$1» in

’stop’)

# Clear all chains/tables

$IPT -F

$IPT -t nat -F

$IPT -t mangle -F

$IPT -X TCP_FLAGS

$IPT -X $IF_EXT

$IPT -P INPUT ACCEPT

$IPT -P FORWARD ACCEPT

$IPT -P OUTPUT ACCEPT

;;

’start’)

$IPT -P INPUT DROP

$IPT -P FORWARD DROP

$IPT -P OUTPUT ACCEPT

# All for himself, but througth loopback

for host in $ROUTER

do

$IPT -A INPUT -s $host -i lo -j ACCEPT

done

# Trusted hosts allow all

for host in $TRUSTED_HOSTS

do

$IPT -A FORWARD -d $host -m state —state ESTABLISHED,RELATED -j

ACCEPT

$IPT -A FORWARD -s $host -j ACCEPT

$IPT -t nat -A POSTROUTING -s $host -o $IF_EXT -j SNAT —to

$IPADDR

done

# Accept only right packets

$IPT -A INPUT -m state —state ESTABLISHED,RELATED -j ACCEPT

for host in $MASQUERADE_HOSTS

do

$IPT -t nat -A POSTROUTING -p icmp -s $host -o $IF_EXT -j SNAT

—to $IPADDR

$IPT -A FORWARD -d $host -m state —state ESTABLISHED,RELATED -j

ACCEPT

for port in $USER_PORTS

do

for proto in tcp udp

do

$IPT -t nat -A POSTROUTING -p $proto -s $host -o $IF_EXT

—dport $port -j SNAT —to $IPADDR

done

done

$IPT -A FORWARD -s $host -j ACCEPT

done

# Paranoia :-)

$IPT -N TCP_FLAGS

$IPT -F TCP_FLAGS

$IPT -A TCP_FLAGS -p tcp —tcp-flags ALL FIN,URG,PSH -j DROP

$IPT -A TCP_FLAGS -p tcp —tcp-flags SYN,RST SYN,RST -j DROP

$IPT -A TCP_FLAGS -p tcp —tcp-flags SYN,FIN SYN,FIN -j DROP

$IPT -A TCP_FLAGS -p tcp —tcp-option 64 -j DROP

$IPT -A TCP_FLAGS -p tcp —tcp-option 128 -j DROP

$IPT -A INPUT -i $IF_EXT -p tcp -j TCP_FLAGS

# Rules for outside

for port in $PUBLIC_PORTS

do

for proto in tcp udp

do

$IPT -A INPUT -p $proto —dport $port -m state —state NEW -j

ACCEPT

done

done

for type in $PUBLIC_ICMP

do

$IPT -A INPUT -p icmp —icmp-type $type -j ACCEPT

done

# Rules for inside

$IPT -A INPUT -s $LOCALNET -j ACCEPT

$IPT -N $IF_EXT

$IPT -A $IF_EXT -m state —state ESTABLISHED,RELATED -j ACCEPT

$IPT -A $IF_EXT -m state —state NEW -i ! $IF_EXT -j ACCEPT

$IPT -A $IF_EXT -i $IF_EXT -m limit -j LOG —log-prefix «Bad packet

from $IF_EXT:»

;;

*)

echo «usage $0 start|stop»

;;

esac

mcmxx

iptables -t nat -A POSTROUTING -o eth0 -j SNAT 83.149.204.26

вот и всё что тебе нужно

kid

некатит уже пробовал

fly4life
kid
некатит уже пробовал

Вообще-то, правило: iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth1 -j SNAT —to-source 83.149.204.26 — самое простое для твоего случая, в котором ничего не запрещено. Т.е. ходить должно всё и везде. Так что если «не катит», то варианта два:

1) либо у тебя косяки в твоём скрипте, а вышеуказанное правило ты задал после выполнения этого скрипта. Тогда тебе надо сначала сбросить правила iptables в цепочках, а потом уже писать правило для НАТа. Твоя последовательность действий такая:

iptables -F
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth1 -j SNAT --to-source 83.149.204.26

2) либо ты вообще не можешь отправлять/получать почту с тех адресов, но дело не в тебе, а в провайдере или настройках удалённых серверов почты. Что делать в этом случае — это уже думать тебе. Может с провом связываться, а может подумать о получении/отправке почты с других серверов.

ecobeingecobeing.ru
Экология и вегетарианство на благо всем живым существам Планеты.