kid
написал 3 марта 2005 года в 16:46 (1177 просмотров)
Ведет себя
неопределенно; открыл 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 но что бы я не делал не выходит никак.
Последние комментарии
- OlegL, 17 декабря в 15:00 → Перекличка 21
- REDkiy, 8 июня 2023 года в 9:09 → Как «замокать» файл для юниттеста в Python? 2
- fhunter, 29 ноября 2022 года в 2:09 → Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt? 6
- Иванн, 9 апреля 2022 года в 8:31 → Ассоциация РАСПО провела первое учредительное собрание 1
- Kiri11.ADV1, 7 марта 2021 года в 12:01 → Логи catalina.out в TomCat 9 в формате JSON 1
ecobeing.ru
Экология и вегетарианство на благо всем живым существам Планеты.
ну так настройки этого самого iptables покажи.
в общем случает, надо разрешить пересылать пакеты из внутренней сети на внешние адреса, порты: 25 — smtp (для отправки почты), 110 — pop3 (для приёма), 143 — imap (тоже получение), 993 — imaps (получение почты по SSL-шифрованному каналу), 995 — pop3s (получение почты по SSL-каналу).
все — по протоколу tcp.
что касается smtp, то более правильным будет установить на шлюзе почтовый сервер и настроить его на отсылку почты через сервер провайдера.
#!/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
iptables -t nat -A POSTROUTING -o eth0 -j SNAT 83.149.204.26
вот и всё что тебе нужно
некатит уже пробовал
Вообще-то, правило: iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth1 -j SNAT --to-source 83.149.204.26 — самое простое для твоего случая, в котором ничего не запрещено. Т.е. ходить должно всё и везде. Так что если «не катит», то варианта два:
1) либо у тебя косяки в твоём скрипте, а вышеуказанное правило ты задал после выполнения этого скрипта. Тогда тебе надо сначала сбросить правила iptables в цепочках, а потом уже писать правило для НАТа. Твоя последовательность действий такая:
2) либо ты вообще не можешь отправлять/получать почту с тех адресов, но дело не в тебе, а в провайдере или настройках удалённых серверов почты. Что делать в этом случае — это уже думать тебе. Может с провом связываться, а может подумать о получении/отправке почты с других серверов.