Давно ломаю голову...Есть сервер - на нем два интерфейса один с реальным ip в инет (пусть будет 122.188.122.188), другой с фэйковым (192.168.0.1). На сервере стоит squid, dns и iptables.
Фаервольные правила следующие:
iptables -t nat -A POSTROUTING -s 192.168.0.0/16 --out-interface eth1 -j SNAT --to-source 122.188.122.188
iptables -t filter -A INPUT -p tcp -s 192.168.0.0/16 -d 192.168.0.1 --dport 3128 -i eth0 -j ACCEPT
iptables -t filter -A INPUT -p tcp -s 192.168.0.0/16 -d 0.0.0.0/0 --dport 25 -i eth0 -j ACCEPT
iptables -t filter -A INPUT -p tcp -s 192.168.0.0/16 -d 0.0.0.0/0 --dport 110 -i eth0 -j ACCEPT
iptables -t filter -A FORWARD -p tcp -s 192.168.0.0/16 -d 0.0.0.0/0 --dport 25 -i eth0 -j ACCEPT
iptables -t filter -A FORWARD -p tcp -s 192.168.0.0/16 -d 0.0.0.0/0 --dport 110 -i eth0 -j ACCEPTПроблема следующая:
Трафик http и https через проксю идет нормально. А вот почта pop3 и smtp у клиентов не идет.
Почему?Думаю, что не въехал где-то в маршрутизацию...
>Давно ломаю голову...
>
>Есть сервер - на нем два интерфейса один с реальным ip в
>инет (пусть будет 122.188.122.188), другой с фэйковым (192.168.0.1). На сервере
>стоит squid, dns и iptables.
>
>Фаервольные правила следующие:
>
>iptables -t nat -A POSTROUTING -s 192.168.0.0/16 --out-interface eth1 -j
>SNAT --to-source 122.188.122.188
>iptables -t filter -A INPUT -p tcp -s 192.168.0.0/16 -d 192.168.0.1 --dport
>3128 -i eth0 -j ACCEPT
>iptables -t filter -A INPUT -p tcp -s 192.168.0.0/16 -d 0.0.0.0/0 --dport
>25 -i eth0 -j ACCEPT
>iptables -t filter -A INPUT -p tcp -s 192.168.0.0/16 -d 0.0.0.0/0 --dport
>110 -i eth0 -j ACCEPT
>iptables -t filter -A FORWARD -p tcp -s 192.168.0.0/16 -d 0.0.0.0/0 --dport
>25 -i eth0 -j ACCEPT
>iptables -t filter -A FORWARD -p tcp -s 192.168.0.0/16 -d 0.0.0.0/0 --dport
>110 -i eth0 -j ACCEPT
>
>Проблема следующая:
>
>Трафик http и https через проксю идет нормально. А вот почта pop3
>и smtp у клиентов не идет.
>Почему?
>
>Думаю, что не въехал где-то в маршрутизацию...про iptables не скажу... но вот где тут маршрутизация?
мне кажется проблема именно в правилах, маршрутизация тут элементарная, ошибиться сложно даже если захотеть этого :)
При том, что внешний мой ip - 122.188.122.188, а ip шлюза у моего провайдера - 122.188.122.189 и eth0 смотрит внутрь, а eth1 наружу.
Маршрутизация следующая:
Destination Gateway Genmask Flags Metric Ref Use Iface
122.188.122.0 * 255.255.255.0 U 0 0 0 eth1
192.168.0.0 * 255.255.0.0 U 0 0 0 eth0
127.0.0.0 * 255.0.0.0 U 0 0 0 lo
default 122.188.122.189 0.0.0.0 UG 0 0 0 eth1
>При том, что внешний мой ip - 122.188.122.188, а ip шлюза у
>моего провайдера - 122.188.122.189 и eth0 смотрит внутрь, а eth1 наружу.Этот скрипт должен помочь.....
================================================================
#!/bin/bash
case "$1" in
start)
echo "Start IP-Paketfilter"modprobe ip_tables
modprobe ip_conntrack
modprobe ip_conntrack_irc
modprobe ip_conntrack_ftpiptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
iptables -t nat -X
iptables -t mangle -Xiptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROPiptables -N MY_REJECT
iptables -A MY_REJECT -p tcp -m limit --limit 7200/h -j LOG --log-prefix "REJECT TCP "
iptables -A MY_REJECT -p tcp -j REJECT --reject-with tcp-reset
iptables -A MY_REJECT -p udp -m limit --limit 7200/h -j LOG --log-prefix "REJECT UDP "
iptables -A MY_REJECT -p udp -j REJECT --reject-with icmp-port-unreachable
iptables -A MY_REJECT -p icmp -m limit --limit 7200/h -j LOG --log-prefix "DROP ICMP "
iptables -A MY_REJECT -p icmp -j DROP
iptables -A MY_REJECT -m limit --limit 7200/h -j LOG --log-prefix "REJECT OTHER "
iptables -A MY_REJECT -j REJECT --reject-with icmp-proto-unreachableiptables -N MY_DROP
iptables -A MY_DROP -m limit --limit 7200/h -j LOG --log-prefix "PORTSCAN DROP "
iptables -A MY_DROP -j DROPiptables -A INPUT -m state --state INVALID -m limit --limit 7200/h -j LOG --log-prefix "INPUT INVALID "
iptables -A OUTPUT -m state --state INVALID -m limit --limit 7200/h -j LOG --log-prefix "OUTPUT INVALID "
iptables -A FORWARD -m state --state INVALID -m limit --limit 7200/h -j LOG --log-prefix "FORWARD INVALID "iptables -A INPUT -m state --state INVALID -j DROP
iptables -A OUTPUT -m state --state INVALID -j DROP
iptables -A FORWARD -m state --state INVALID -j DROPiptables -A INPUT -p tcp --tcp-flags ALL NONE -j MY_DROP
iptables -A FORWARD -p tcp --tcp-flags ALL NONE -j MY_DROPiptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j MY_DROP
iptables -A FORWARD -p tcp --tcp-flags SYN,FIN SYN,FIN -j MY_DROPiptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j MY_DROP
iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN,RST -j MY_DROPiptables -A INPUT -p tcp --tcp-flags FIN,RST FIN,RST -j MY_DROP
iptables -A FORWARD -p tcp --tcp-flags FIN,RST FIN,RST -j MY_DROPiptables -A INPUT -p tcp --tcp-flags ACK,FIN FIN -j MY_DROP
iptables -A FORWARD -p tcp --tcp-flags ACK,FIN FIN -j MY_DROPiptables -A INPUT -p tcp --tcp-flags ACK,PSH PSH -j MY_DROP
iptables -A FORWARD -p tcp --tcp-flags ACK,PSH PSH -j MY_DROPiptables -A INPUT -p tcp --tcp-flags ACK,URG URG -j MY_DROP
iptables -A FORWARD -p tcp --tcp-flags ACK,URG URG -j MY_DROPiptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPTiptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
iptables -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i ! eth1 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT# HTTP
iptables -A INPUT -i eth1 -m state --state NEW -p tcp --dport 80 -j ACCEPT# HTTPS
iptables -A INPUT -i eth1 -m state --state NEW -p tcp --dport 443 -j ACCEPT# DNS
iptables -A INPUT -i eth1 -m state --state NEW -p tcp --dport 53 -j ACCEPT
iptables -A INPUT -i eth1 -m state --state NEW -p udp --dport 53 -j ACCEPTiptables -A INPUT -m state --state NEW -i eth0 -j ACCEPT
iptables -A INPUT -j MY_REJECT
iptables -A OUTPUT -j MY_REJECT
iptables -A FORWARD -j MY_REJECTecho 1 > /proc/sys/net/ipv4/ip_forward 2> /dev/null
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
echo 1 > /proc/sys/net/ipv4/tcp_syncookies 2> /dev/null
for i in /proc/sys/net/ipv4/conf/*; do echo 0 > $i/accept_source_route 2> /dev/null; done
for i in /proc/sys/net/ipv4/conf/*; do echo 0 > $i/accept_redirects 2> /dev/null; done
for i in /proc/sys/net/ipv4/conf/*; do echo 2 > $i/rp_filter 2> /dev/null; done
for i in /proc/sys/net/ipv4/conf/*; do echo 1 > $i/log_martians 2> /dev/null; done
for i in /proc/sys/net/ipv4/conf/*; do echo 0 > $i/bootp_relay 2> /dev/null; done
for i in /proc/sys/net/ipv4/conf/*; do echo 0 > $i/proxy_arp 2> /dev/null; done
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses 2> /dev/null
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts 2> /dev/null
echo 5 > /proc/sys/net/ipv4/icmp_ratelimit
echo 262144 > /proc/sys/net/ipv4/ipfrag_high_thresh
echo 196608 > /proc/sys/net/ipv4/ipfrag_low_thresh
echo 30 > /proc/sys/net/ipv4/ipfrag_time
echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout
echo 3 > /proc/sys/net/ipv4/tcp_retries1
echo 15 > /proc/sys/net/ipv4/tcp_retries2
;;
stop)
echo "Stop IP-Paketfilter"
# Tabelle flushen
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
iptables -t nat -X
iptables -t mangle -X
echo "Deaktiviere IP-Routing"
echo 0 > /proc/sys/net/ipv4/ip_forward# Default-Policies setzen
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
;;status)
echo "Tabelle filter"
iptables -L -vn
echo "Tabelle nat"
iptables -t nat -L -vn
echo "Tabelle mangle"
iptables -t mangle -L -vn
;;*)
echo "Ошибка"
echo "Syntax: $0 {start|stop|status}"
exit 1
;;esac
======================================================================
Ого :)А подробнее можно?
>При том, что внешний мой ip - 122.188.122.188, а ip шлюза у
>моего провайдера - 122.188.122.189 и eth0 смотрит внутрь, а eth1 наружу.
>
>Маршрутизация следующая:
>
>
>Destination Gateway
> Genmask
> Flags Metric Ref Use Iface
>122.188.122.0 *
> 255.255.255.0
> U 0
> 0 0
>eth1
>192.168.0.0 *
>
>255.255.0.0 U
>0 0
> 0 eth0
>127.0.0.0 *
>
> 255.0.0.0
> U 0
> 0
> 0 lo
>default 122.188.122.189
> 0.0.0.0
> UG 0
> 0 0 eth1... и что, http при этом пашет, а мыло нет? и дело в маршрутизации?
Да, все идет кроме почты. Наверное дело и не в маршрутизации...
>... и что, http при этом пашет, а мыло нет? и дело
>в маршрутизации?Все пакеты из локальной сети от твоих пользователей идут на твой сервер:
iptables -A INPUT -m state --state NEW -i eth0 -j ACCEPT
Все пакеты от твоего сервера идут к твоему провайдеру :
echo 1 > /proc/sys/net/ipv4/ip_forward 2> /dev/null
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADEТвои пользователи могут соединятся с любым сервером в интернете смотреть веб, отправлять и забирать почту и т.д.
Из интернета на твоём сервере открыты порты 53 DNS, 80 HTTP, 443 HTTPS
# HTTP
iptables -A INPUT -i eth1 -m state --state NEW -p tcp --dport 80 -j ACCEPT# HTTPS
iptables -A INPUT -i eth1 -m state --state NEW -p tcp --dport 443 -j ACCEPT# DNS
iptables -A INPUT -i eth1 -m state --state NEW -p tcp --dport 53 -j ACCEPT
iptables -A INPUT -i eth1 -m state --state NEW -p udp --dport 53 -j ACCEPT
.... или я что-то не правильно понял?
.... где находится Mail-Server в локалке или в интернете?
>Все пакеты из локальной сети от твоих пользователей идут на твой сервер:
>
>
> iptables -A INPUT -m state --state NEW -i eth0 -j
>ACCEPT
>
>Все пакеты от твоего сервера идут к твоему провайдеру :
>
> echo 1 > /proc/sys/net/ipv4/ip_forward 2> /dev/null
> iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
>
>Твои пользователи могут соединятся с любым сервером в интернете смотреть веб, отправлять
>и забирать почту и т.д.
>
>Из интернета на твоём сервере открыты порты 53 DNS, 80 HTTP, 443
>HTTPS
># HTTP
> iptables -A INPUT -i eth1 -m state --state
>NEW -p tcp --dport 80 -j ACCEPT
>
> # HTTPS
> iptables -A INPUT -i eth1 -m state --state
>NEW -p tcp --dport 443 -j ACCEPT
>
> # DNS
> iptables -A INPUT -i eth1 -m state --state
>NEW -p tcp --dport 53 -j ACCEPT
> iptables -A INPUT -i eth1 -m state --state
>NEW -p udp --dport 53 -j ACCEPT
>
>
>.... или я что-то не правильно понял?
>.... где находится Mail-Server в локалке или в интернете?Почтовый сервер есть локальный, но у пользователей нет доступа к внешним почтовым серверам через pop3, smtp и imap. Дело в том, что я не могу форвардить весь трафик через сервер, у меня на нем еще апач и биллинг.
Для маскарадинга я использую не masquerade, а snat в iptables, т.к. он быстрее обрабатывает запросы.
>Проблема следующая:
>
>Трафик http и https через проксю идет нормально. А вот почта pop3
>и smtp у клиентов не идет.
>Почему?
>
>Думаю, что не въехал где-то в маршрутизацию...
я конечно дико извиняюсь, но вы уверены что ващ проксипроксирует smtp и pop3 ?
Не в этом ли дело ?
>>Проблема следующая:
>>
>>Трафик http и https через проксю идет нормально. А вот почта pop3
>>и smtp у клиентов не идет.
>>Почему?
>>
>>Думаю, что не въехал где-то в маршрутизацию...
>я конечно дико извиняюсь, но вы уверены что ващ проксипроксирует smtp и
>pop3 ?
>Не в этом ли дело ?Может правила для DNS'а добавить?:
iptables -A INPUT -i eth0 -m state --state NEW -p tcp --dport 53 -j ACCEPT
iptables -A INPUT -i eth0 -m state --state NEW -p udp --dport 53 -j ACCEPT
а делать echo "1" /proc/sys/net/ipv4/ip_forward пробовал?
если iptables -P FORWARD DENY , то нужно еще:
iptables -A FORWARD -i eth1 -o eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT , иначе коннекта с внешними попами-имапами-смтпЯми не будет.
2 Edwin: Ну я думаю, что squid не может проксировать smtp и pop3. Может я ошибаюсь?2 Gennadi: Мой dns клиенты по всей видимости видят, т.к. по сайтам они ходят и по аське общаются.
2 Hunter: Нет у меня политика - accept всему, deny выборочно. Хотя я планирую это в будущем менять... но не сейчас. Доступ к проксе открывается и закрывается скриптами биллинга, путем редактирования правил фаервола.
" делать echo "1" /proc/sys/net/ipv4/ip_forward пробовал "
!!!! имхо проблема тут !сделай
iptables -F
echo "1" > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -s <your-ip> -d ! <server-ip> -j SNAT --to-source <ext-server-iface-ip>и попробуй со своего ипшника
ping rambler.ruесли заработает - то проблемы в правилах, если нет - то еще где-то :(
" делать echo "1" /proc/sys/net/ipv4/ip_forward пробовал "
!!!! имхо проблема тут !сделай
iptables -F
echo "1" > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -s <your-ip> -d ! <server-ip> -j SNAT --to-source <ext-server-iface-ip>и попробуй со своего ипшника
ping rambler.ruесли заработает - то проблемы в правилах, если нет - то еще где-то :(
>2 Edwin: Ну я думаю, что squid не может проксировать smtp и
>pop3. Может я ошибаюсь?
>
>2 Gennadi: Мой dns клиенты по всей видимости видят, т.к. по сайтам
>они ходят и по аське общаются.
>
>2 Hunter: Нет у меня политика - accept всему, deny выборочно. Хотя
>я планирую это в будущем менять... но не сейчас. Доступ к
>проксе открывается и закрывается скриптами биллинга, путем редактирования правил фаервола.Проверь очерёдность обработки правил в фаерволе.
Поставь разрешение smtp и pop3 в начале скрипта....PS: Незная реальной сети и невидя всех провил в скриптах - трудно что либо дельное посоветовать...
>Давно ломаю голову...
>
>Есть сервер - на нем два интерфейса один с реальным ip в
>инет (пусть будет 122.188.122.188), другой с фэйковым (192.168.0.1). На сервере
>стоит squid, dns и iptables.
>
>Фаервольные правила следующие:
>
>iptables -t nat -A POSTROUTING -s 192.168.0.0/16 --out-interface eth1 -j
>SNAT --to-source 122.188.122.188
>iptables -t filter -A INPUT -p tcp -s 192.168.0.0/16 -d 192.168.0.1 --dport
>3128 -i eth0 -j ACCEPT
>iptables -t filter -A INPUT -p tcp -s 192.168.0.0/16 -d 0.0.0.0/0 --dport
>25 -i eth0 -j ACCEPT
>iptables -t filter -A INPUT -p tcp -s 192.168.0.0/16 -d 0.0.0.0/0 --dport
>110 -i eth0 -j ACCEPT
>iptables -t filter -A FORWARD -p tcp -s 192.168.0.0/16 -d 0.0.0.0/0 --dport
>25 -i eth0 -j ACCEPT
>iptables -t filter -A FORWARD -p tcp -s 192.168.0.0/16 -d 0.0.0.0/0 --dport
>110 -i eth0 -j ACCEPT
>
>Проблема следующая:
>
>Трафик http и https через проксю идет нормально. А вот почта pop3
>и smtp у клиентов не идет.
>Почему?
>
>Думаю, что не въехал где-то в маршрутизацию...знач так:
1) у клиентов http и https пашет потому что через проксю - т. е. они общается не с инетом а ствоей тачкой(а она с инетом)
2)почта не пашет потому что у тя не разрешён форвардинг с eth0 в локалку 192.168.0.0
iptables -A forward -p TCP -i eth0 -d 192.168.0.0 -m state --state ESTABLISHED, RELATED -j ACCEPT
урлы резолвяться тока потому что через проксю ходишь
т. е. чтоб почта нормально работала нада ещё и днс пробрасывать
(ну или в локалке свой поднимать)
3)-d 0.0.0.0/0 - можешь не использовать вообще
4)если те нужно делать форвардинг то правила для цепочки input убери - они к форварду не имеют никакого отношения
+ включи форвардинг пакетов(echo 1 > /proc/sys/net/ipv4/ip_forward)
с этим: echo "1" > /proc/sys/net/ipv4/ip_forward - заработало!но у меня ощущение что весь трафик форвардится... я не прав?
>с этим: echo "1" > /proc/sys/net/ipv4/ip_forward - заработало!
>
>но у меня ощущение что весь трафик форвардится... я не прав?это просто включает в ядре форвардинг ип-пакетов.
правила для форвардинга определяются таблицей nat и цепочками forward
( или правилами masquerade для ipchains )
>это просто включает в ядре форвардинг ип-пакетов.
>правила для форвардинга определяются таблицей nat и цепочками forward
>( или правилами masquerade для ipchains )В таком случае, я думаю, лучше использовать политику по-умолчанию deny, а не accept, как сейчас у меня.
Всем большое спасибо за помощь!
>>это просто включает в ядре форвардинг ип-пакетов.
>>правила для форвардинга определяются таблицей nat и цепочками forward
>>( или правилами masquerade для ipchains )
>
>В таком случае, я думаю, лучше использовать политику по-умолчанию deny.в таблице нат - да, но с цепочкой форвард в дефолтовой таблице (филтер) поаккуратнее - ты закроешь форвардинг некоторых пакетов - например
lo->eth* и так далее - будут проблемы. Лучше сделай цепочку правил, разрешающих роутинг в Инет пользователей, а конце - правило, запрещающее форвардинг по всей сети пользователей - тогда будут работать только "правильные" юзеры и локальный форвардинг будет нормально работать.
>в таблице нат - да, но с цепочкой форвард в дефолтовой таблице
>(филтер) поаккуратнее - ты закроешь форвардинг некоторых пакетов - например
>lo->eth* и так далее - будут проблемы. Лучше сделай цепочку правил, разрешающих роутинг в Инет пользователей, а конце - правило, запрещающее форвардинг по всей сети пользователей - тогда будут работать только "правильные" юзеры и локальный форвардинг будет нормально работать.
Ок, попробую. Спасибо.