LinuxForum.Fans
Тема

Squid и почта через NAT

Автор: maybik 16 сообщений 6346 просмотров
#179713

Вобщем начну, проблема с почтой. стоит squid , настроил правила через nat чтобы пропускал порты 25 и 110, но почта к сожалению никак не работает. прочитал много форумов, но решения пока не найдено.

ниже некоторые настройки сети:
прокси сервер на базе openSuse 11.4 ,

ip выхода в интернет 79.171.125.199,
ip выхода в локальную сеть 10.0.0.0/24

на локальны машинах интернет через прокси работает.

iptables -L выдает следующее :
____________________________________________________
Chain INPUT (policy ACCEPT)
target prot opt source destination

Chain FORWARD (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- 10.0.0.0/24 vps190215.ukrdomen.com tcp dpt:smtp
ACCEPT tcp -- vps190215.ukrdomen.com 10.0.0.0/24 tcp spt:smtp
ACCEPT tcp -- 10.0.0.0/24 vps190215.ukrdomen.com tcp dpt:pop3
ACCEPT tcp -- vps190215.ukrdomen.com 10.0.0.0/24 tcp spt:pop3

Chain OUTPUT (policy ACCEPT)
target prot opt source destination
_________________________________________________________________

для разрешения портов использовал команды:

linux-lz44:~ # echo "1" >/proc/sys/net/ipv4/ip_forward

linux-lz44:~ # iptables -A FORWARD -p tcp -s 10.0.0.0/24 -d mail.cl.com.ua --dport 25 -j ACCEPT

linux-lz44:~ # iptables -A FORWARD -p tcp -s mail.cl.com.ua -d 10.0.0.0/24 --sport 25 -j ACCEPT

linux-lz44:~ # iptables -A FORWARD -p tcp -s 10.0.0.0/24 -d mail.cl.com.ua --dport 110 -j ACCEPT

linux-lz44:~ # iptables -A FORWARD -p tcp -s mail.cl.com.ua -d 10.0.0.0/24 --sport 110 -j ACCEPT

linux-lz44:~ # iptables -t nat -A POSTROUTING -p tcp -s 10.0.0.0/24 --dport 110 -j MASQUERADE

linux-lz44:~ # iptables -t nat -A POSTROUTING -p tcp -s 10.0.0.0/24 --dport 25 -j MASQUERADE

linux-lz44:~ # sysctl net.ipv4.ip_forward=1


но к сожалению почта так и не отправляется с локальных компьютеров. Просьба помочь. что еще и где посмотреть

#180133

эм... как повашему связаны смтп с поп3 и прокси?

#180138

хотя если по сути, то согласно iptables. у вас порты пробрасываются корректно... вроде бы... проверьте, резолвятся ли адреса у клиентов, ибо скорее всего проблема в этом

#180193

По памяти не скажу, но завтра выложу свой конфиг iptables при котором у меня и почта ходит по портам и нэт через сквид.

#180366
kisil написал:
По памяти не скажу, но завтра выложу свой конфиг iptables при котором у меня и почта ходит по портам и нэт через сквид.

спасибо, буду благодарен.

#180368
osorkon написал:
эм... как повашему связаны смтп с поп3 и прокси?

никак не связан, поэтому описываю проброс через iptables.

а какие адреса проверить, вы имеете ввиду?

#180484

Прошу прощения что не скинул скрипт, забегалса на работе. Если не спешно обязательно скину в воскресенье.

#180880
kisil написал:
Прошу прощения что не скинул скрипт, забегалса на работе. Если не спешно обязательно скину в воскресенье.

спасибо, все еще будет полезно посмотреть Ваш скрипт

#181114

Я сделал вот так

Показать


IPT="/usr/sbin/iptables"
INET_IFACE="ppp0"
INET_IP="ххх.ххх.ххх.ххх"

LAN="192.168.0.0/24"

echo 1 > /proc/sys/net/ipv4/ip_forward

$IPT -F
$IPT -X

$IPT -P INPUT DROP
$IPT -P FORWARD DROP
$IPT -P OUTPUT ACCEPT
#обратная петля пропускаем
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT
#отбрасываем плохие пакеты
$IPT -A INPUT -m state --state INVALID -j DROP
$IPT -A FORWARD -m state --state INVALID -j DROP
#принимаем хорошые
$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

#Принимаем пакеты от внутреней сети, ведь по умолчанию политика на входное соединение DROP
$IPT -A INPUT -p tcp -i eth1 -s $LAN -j ACCEPT
$IPT -A INPUT -p udp -i eth1 -s $LAN -j ACCEPT
$IPT -A INPUT -p icmp -i eth1 -s $LAN -j ACCEPT
$IPT -A INPUT -p tcp -s $LAN -i eth1 --dport 53 -j ACCEPT
$IPT -A INPUT -p udp -s $LAN -i eth1 --dport 53 -j ACCEPT

#А вот это именно разрешение ходить определёным компютерам на определёные порты в нет напримую
$IPT -A FORWARD -p tcp -s 192.168.0.57 --dport 25 -o ppp0 -j ACCEPT
$IPT -A FORWARD -p tcp -s 192.168.0.57 --dport 110 -o ppp0 -j ACCEPT
$IPT -A FORWARD -p tcp -s 192.168.0.177 --dport 25 -o ppp0 -j ACCEPT
$IPT -A FORWARD -p tcp -s 192.168.0.177 --dport 110 -o ppp0 -j ACCEPT
$IPT -A FORWARD -p tcp -s 192.168.0.145 --dport 25 -o ppp0 -j ACCEPT
$IPT -A FORWARD -p tcp -s 192.168.0.145 --dport 110 -o ppp0 -j ACCEPT
#Этому компу вообще открытый выход в интернет через NAT
$IPT -A FORWARD -s 192.168.0.4 -o ppp0 -j ACCEPT

# И собственно сам NAT
$IPT -t nat -A POSTROUTING -o $INET_IFACE -j SNAT --to-source $INET_IP

Вот так и у меня это прекрасно работает.

#181402
maybik написал:
[quote=osorkon]эм... как повашему связаны смтп с поп3 и прокси?

никак не связан, поэтому описываю проброс через iptables.

а какие адреса проверить, вы имеете ввиду?[/quote]

адреса поп3 и смтп сервера
просто на клиентской машине сделайте nslookup <smtp_server> и nslookup <pop3/imap_server>
если адреса резолвятся корректно, тогда я бы tcpdump'ом прослушал оба интерфейса в момент попытки принять/отправить почту. если пакетики видны на локальном интерфейсе но не видны на "внешнем" то причина правила iptables или ip_forward 0

#181514
osorkon написал:
[quote=maybik][quote=osorkon]эм... как повашему связаны смтп с поп3 и прокси?

никак не связан, поэтому описываю проброс через iptables.

а какие адреса проверить, вы имеете ввиду?[/quote]

адреса поп3 и смтп сервера
просто на клиентской машине сделайте nslookup <smtp_server> и nslookup <pop3/imap_server>
если адреса резолвятся корректно, тогда я бы tcpdump'ом прослушал оба интерфейса в момент попытки принять/отправить почту. если пакетики видны на локальном интерфейсе но не видны на "внешнем" то причина правила iptables или ip_forward 0[/quote]

спасибо за разъяснение, буду пробовать . о результате отпишусь

#181735
kisil написал:
Я сделал вот так
Показать


IPT="/usr/sbin/iptables"
INET_IFACE="ppp0"
INET_IP="ххх.ххх.ххх.ххх"

LAN="192.168.0.0/24"

echo 1 > /proc/sys/net/ipv4/ip_forward

$IPT -F
$IPT -X

$IPT -P INPUT DROP
$IPT -P FORWARD DROP
$IPT -P OUTPUT ACCEPT
#обратная петля пропускаем
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT
#отбрасываем плохие пакеты
$IPT -A INPUT -m state --state INVALID -j DROP
$IPT -A FORWARD -m state --state INVALID -j DROP
#принимаем хорошые
$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

#Принимаем пакеты от внутреней сети, ведь по умолчанию политика на входное соединение DROP
$IPT -A INPUT -p tcp -i eth1 -s $LAN -j ACCEPT
$IPT -A INPUT -p udp -i eth1 -s $LAN -j ACCEPT
$IPT -A INPUT -p icmp -i eth1 -s $LAN -j ACCEPT
$IPT -A INPUT -p tcp -s $LAN -i eth1 --dport 53 -j ACCEPT
$IPT -A INPUT -p udp -s $LAN -i eth1 --dport 53 -j ACCEPT

#А вот это именно разрешение ходить определёным компютерам на определёные порты в нет напримую
$IPT -A FORWARD -p tcp -s 192.168.0.57 --dport 25 -o ppp0 -j ACCEPT
$IPT -A FORWARD -p tcp -s 192.168.0.57 --dport 110 -o ppp0 -j ACCEPT
$IPT -A FORWARD -p tcp -s 192.168.0.177 --dport 25 -o ppp0 -j ACCEPT
$IPT -A FORWARD -p tcp -s 192.168.0.177 --dport 110 -o ppp0 -j ACCEPT
$IPT -A FORWARD -p tcp -s 192.168.0.145 --dport 25 -o ppp0 -j ACCEPT
$IPT -A FORWARD -p tcp -s 192.168.0.145 --dport 110 -o ppp0 -j ACCEPT
#Этому компу вообще открытый выход в интернет через NAT
$IPT -A FORWARD -s 192.168.0.4 -o ppp0 -j ACCEPT

# И собственно сам NAT
$IPT -t nat -A POSTROUTING -o $INET_IFACE -j SNAT --to-source $INET_IP

Вот так и у меня это прекрасно работает.

а у Вас squid transparent или нет? в этом может быть загвоздка?

#181807

судя по скрипту прокси у человека нет вообще. да и не имеет он никакого отношения к работе почты в целом и к вашей проблеме в частности. проверяйте пробрасываются ли у вас 25й и 110й порт. проблема 98% в этом.

#181835
osorkon написал:
судя по скрипту прокси у человека нет вообще. да и не имеет он никакого отношения к работе почты в целом и к вашей проблеме в частности. проверяйте пробрасываются ли у вас 25й и 110й порт. проблема 98% в этом.

та это понятно что не пробрасывается порты 25 и 110, и nslookup это доказал. не находит почтовый сервер. вот еще возник вопрос. восстановил значения firewall по-умолчанию, прописал правила для портов 25 и 110 , а когда запустил iptables -L выдало следующий текст:

Показать
linux-lz44:/ # iptables -L
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere ctstate ESTABLISHED
ACCEPT icmp -- anywhere anywhere ctstate RELATED
input_ext all -- anywhere anywhere
input_ext all -- anywhere anywhere
input_ext all -- anywhere anywhere
input_ext all -- anywhere anywhere
LOG all -- anywhere anywhere limit: avg 3/min burst 5 LOG level warning tcp-options ip-options prefix `SFW2-IN-ILL-TARGET '
DROP all -- anywhere anywhere

Chain FORWARD (policy DROP)
target prot opt source destination
TCPMSS tcp -- anywhere anywhere tcp flags:SYN,RST/SYN TCPMSS clamp to PMTU
forward_ext all -- anywhere anywhere
forward_ext all -- anywhere anywhere
forward_ext all -- anywhere anywhere
LOG all -- anywhere anywhere limit: avg 3/min burst 5 LOG level warning tcp-options ip-options prefix `SFW2-FWD-ILL-ROUTING '
DROP all -- anywhere anywhere
ACCEPT all -- 10.1.1.9 anywhere
ACCEPT all -- anywhere anywhere
ACCEPT tcp -- 10.0.0.0/24 vps190215.ukrdomen.com tcp dpt:smtp
ACCEPT tcp -- vps190215.ukrdomen.com 10.0.0.0/24 tcp spt:smtp
ACCEPT tcp -- 10.0.0.0/24 vps190215.ukrdomen.com tcp dpt:pop3
ACCEPT tcp -- vps190215.ukrdomen.com 10.0.0.0/24 tcp spt:pop3

Chain OUTPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere

Chain forward_ext (3 references)
target prot opt source destination
ACCEPT icmp -- anywhere anywhere ctstate RELATED,ESTABLISHED icmp echo-reply
ACCEPT icmp -- anywhere anywhere ctstate RELATED,ESTABLISHED icmp destination-unreachable
ACCEPT icmp -- anywhere anywhere ctstate RELATED,ESTABLISHED icmp time-exceeded
ACCEPT icmp -- anywhere anywhere ctstate RELATED,ESTABLISHED icmp parameter-problem
ACCEPT icmp -- anywhere anywhere ctstate RELATED,ESTABLISHED icmp timestamp-reply
ACCEPT icmp -- anywhere anywhere ctstate RELATED,ESTABLISHED icmp address-mask-reply
ACCEPT icmp -- anywhere anywhere ctstate RELATED,ESTABLISHED icmp protocol-unreachable
ACCEPT icmp -- anywhere anywhere ctstate RELATED,ESTABLISHED icmp redirect
DROP all -- anywhere anywhere PKTTYPE = multicast
DROP all -- anywhere anywhere PKTTYPE = broadcast
LOG tcp -- anywhere anywhere limit: avg 3/min burst 5 tcp flags:FIN,SYN,RST,ACK/SYN LOG level warning tcp-options ip-options prefix `SFW2-FWDext-DROP-DEFLT '
LOG icmp -- anywhere anywhere limit: avg 3/min burst 5 LOG level warning tcp-options ip-options prefix `SFW2-FWDext-DROP-DEFLT '
LOG udp -- anywhere anywhere limit: avg 3/min burst 5 ctstate NEW LOG level warning tcp-options ip-options prefix `SFW2-FWDext-DROP-DEFLT '
DROP all -- anywhere anywhere

Chain input_ext (4 references)
target prot opt source destination
ACCEPT udp -- anywhere anywhere PKTTYPE = broadcast udp dpt:mdns
ACCEPT udp -- anywhere anywhere PKTTYPE = broadcast udp dpt:mdns
ACCEPT udp -- anywhere anywhere PKTTYPE = broadcast udp dpt:svrloc
ACCEPT udp -- anywhere anywhere PKTTYPE = broadcast udp dpt:netbios-ns
ACCEPT udp -- anywhere anywhere PKTTYPE = broadcast udp dpt:netbios-dgm
DROP all -- anywhere anywhere PKTTYPE = broadcast
ACCEPT icmp -- anywhere anywhere icmp source-quench
ACCEPT icmp -- anywhere anywhere icmp echo-request
LOG tcp -- anywhere anywhere limit: avg 3/min burst 5 tcp dpt:smtp flags:FIN,SYN,RST,ACK/SYN LOG level warning tcp-options ip-options prefix `SFW2-INext-ACC-TCP '
ACCEPT tcp -- anywhere anywhere tcp dpt:smtp
LOG tcp -- anywhere anywhere limit: avg 3/min burst 5 tcp dpt:ndl-aas flags:FIN,SYN,RST,ACK/SYN LOG level warning tcp-options ip-options prefix `SFW2-INext-ACC-TCP '
ACCEPT tcp -- anywhere anywhere tcp dpt:ndl-aas
ACCEPT udp -- anywhere anywhere udp dpt:mdns
ACCEPT udp -- anywhere anywhere udp dpt:mdns
ACCEPT udp -- anywhere anywhere udp dpt:svrloc
ACCEPT udp -- anywhere anywhere udp dpt:netbios-ns
ACCEPT udp -- anywhere anywhere udp dpt:netbios-dgm
DROP all -- anywhere anywhere PKTTYPE = multicast
DROP all -- anywhere anywhere PKTTYPE = broadcast
LOG tcp -- anywhere anywhere limit: avg 3/min burst 5 tcp flags:FIN,SYN,RST,ACK/SYN LOG level warning tcp-options ip-options prefix `SFW2-INext-DROP-DEFLT '
LOG icmp -- anywhere anywhere limit: avg 3/min burst 5 LOG level warning tcp-options ip-options prefix `SFW2-INext-DROP-DEFLT '
LOG udp -- anywhere anywhere limit: avg 3/min burst 5 ctstate NEW LOG level warning tcp-options ip-options prefix `SFW2-INext-DROP-DEFLT '
DROP all -- anywhere anywhere

Chain reject_func (0 references)
target prot opt source destination
REJECT tcp -- anywhere anywhere reject-with tcp-reset
REJECT udp -- anywhere anywhere reject-with icmp-port-unreachable
REJECT all -- anywhere anywhere reject-with icmp-proto-unreachable

смутила строчка перед которой идут мои правила, насчет Drop all . Возможно из-за нее не идет?..Хотя вроде нет, вроде не должно это мешать.

#182111

я, по равде говоряя, мало что понял из листинга по той простой причине что мне привычнее смотреть на правила в скрипте а не в выводе iptables. но то что я понял достаточно что бы сделать вывод: "так никто не строит"(с)
1. нет смысла ставить для цепочки политику по умолчанию дропать и тут же писать

text
ACCEPT     all  --  anywhere             anywhere

2. насколько я знаю icmp имеют state только new и estableshed так что строка

text
ACCEPT     icmp --  anywhere             anywhere            ctstate RELATED

теряет смысл.
3. дурным тоном является ставить разрешающие правила ПЕРЕД запрещающими... лучше наоборот.
4. проброс 25/110 портов я увидел. гда маскарадинг?
5. проблема с резолвом ip <-> fqdn вы решили?
будьте последовательны в решении проблемы и все будет ок

#182147

maybik выше скрипт если выполнить на шлюзе то почта должна работать.
Прозрачный прокси легко добавив токо одну строку в тот скрипт.

Не забываем ещё для почты открывать 993 порт.

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

Войдите или зарегистрируйтесь, чтобы ответить.