Вот собственно если в конфиге есть строчка с таким редиректом то клиенты не могут законнектиться (я ее пока закомментировал)
Клиентам приходится указывать в браузере ай пи прокси и порт 8090
У меня следующая проблема..
Предположим есть шлюз на gentoo, за ним есть машины с windows, эти машины цепляются к какому то серверу VPN (pptp) который лежит за пределами шлюза. Вот что-то в iptables шюза не пускает машины к впн, затыкаются на проверки логина/пароля, очевидный затык на gre, но в iptables есть строчки:
$IPTABLES -P INPUT ACCEPT
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -P FORWARD DROP
$IPTABLES -I INPUT 1 -i $IINTERFACE -j ACCEPT
$IPTABLES -I INPUT 1 -i lo -j ACCEPT
$IPTABLES -A INPUT -p UDP --dport bootps -i ! $IINTERFACE -j REJECT
$IPTABLES -A INPUT -p UDP --dport domain -i ! $IINTERFACE -j REJECT
$IPTABLES -A INPUT -p TCP --dport ssh -i $OINTERFACE -j DROP
$IPTABLES -A INPUT -p gre -j ACCEPT
$IPTABLES -A OUTPUT -p gre -j ACCEPT
$IPTABLES -A INPUT -p TCP -i ! $IINTERFACE -d 0/0 --dport 0:1023 -j DROP
$IPTABLES -A INPUT -p UDP -i ! $IINTERFACE -d 0/0 --dport 0:1023 -j DROP
+$IPTABLES -A INPUT -i $IINTERFACE --source $HOME_NETWORK --match state --state NEW,ESTABLISHED -j ACCEPT
+$IPTABLES -A OUTPUT -o $IINTERFACE --destination $HOME_NETWORK --match state --state NEW,ESTABLISHED -j ACCEPT
$IPTABLES -I FORWARD -i $IINTERFACE -d $HOME_NETWORK -j DROP
$IPTABLES -A FORWARD -i $IINTERFACE -s $HOME_NETWORK -j ACCEPT
$IPTABLES -A FORWARD -i $VINTERFACE -d $HOME_NETWORK -j ACCEPT
$IPTABLES -A FORWARD -i $OINTERFACE -d $HOME_NETWORK -j ACCEPT
+$IPTABLES -A FORWARD -i $IINTERFACE --source $HOME_NETWORK --destination 0.0.0.0/0 --match state --state NEW,ESTABLISHED -j ACCEPT
+$IPTABLES -A FORWARD -i $VINTERFACE --destination $HOME_NETWORK --match state --state ESTABLISHED -j ACCEPT
$IPTABLES -t nat -A POSTROUTING -o $VINTERFACE -j MASQUERADE
IINTERFACE - Локальная сеть
OINTERFACE=eth2 - физический интерфейс в который приходит провайдорский шнурок с PPPoE
VINTERFACE=ppp0 - виртуальный интерфейс, созданное подключение..
подробнее:
решение похожей проблемы тут unax, тебе я вно не хватает понимания работы iptables, почитай Руководство по iptables (Iptables Tutorial 1.1.19)
Для точной диагностики рекомендую (если не сделано раньше) убедиться в вине iptables. Т.Е. очистить правила FORWARD и перевести политику в ACCEPT. После этого соединения должны устанавливаться. Если этого не произошло, значит вина не (только) iptables. проверяй настройки.
# Политика drop
$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -P FORWARD DROP
# разрешение локальной сети
$IPTABLES -A INPUT -i $IINTERFACE -j ACCEPT
$IPTABLES -A INPUT -s $LOCAL_NET -j ACCEPT
$IPTABLES -A INPUT -p ALL -s 127.0.0.1 -i lo -j ACCEPT
$IPTABLES -A INPUT -p ALL -s $LAN_IP -i lo -j ACCEPT
$IPTABLES -A INPUT -p ALL -s $WAN_IP -i lo -j ACCEPT
$IPTABLES -A OUTPUT -p ALL -d 127.0.0.1 -o lo -j ACCEPT
$IPTABLES -A OUTPUT -p ALL -s $WAN_IP -j ACCEPT
$IPTABLES -A OUTPUT -p ALL -s $LAN_IP -j ACCEPT
$IPTABLES -A OUTPUT -p ALL -s 127.0.0.1 -j ACCEPT
это верно? $IPTABLES -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPTABLES -t nat -A POSTROUTING -s $LOCAL_NET -o $VINTERFACE -j SNAT --to-source $WAN_IP
# Разрешать ответы DNS
$IPTABLES -A INPUT -p UDP -s $DNS1 -m state --state ESTABLISHED --sport 53 -j ACCEPT
$IPTABLES -A INPUT -p TCP -s $DNS1 --sport 53 --dport $UNPRIVPORTS -m state --state ESTABLISHED -j ACCEPT
$IPTABLES -A INPUT -p UDP -s $DNS2 -m state --state ESTABLISHED --sport 53 -j ACCEPT
$IPTABLES -A INPUT -p TCP -s $DNS2 --sport 53 --dport $UNPRIVPORTS -m state --state ESTABLISHED -j ACCEPT
$IPTABLES -A FORWARD -p UDP -s $LOCAL_NET -d $DNS1 --dport 53 -j ACCEPT
$IPTABLES -A FORWARD -p UDP -s $DNS1 -d $LOCAL_NET --sport 53 -m state --state ESTABLISHED -j ACCEPT
$IPTABLES -A FORWARD -p TCP -s $LOCAL_NET -d $DNS1 --dport 53 -j ACCEPT
$IPTABLES -A FORWARD -p UDP -s $LOCAL_NET -d $DNS2 --dport 53 -j ACCEPT
$IPTABLES -A FORWARD -p UDP -s $DNS2 -d $LOCAL_NET --sport 53 -m state --state ESTABLISHED -j ACCEPT
$IPTABLES -A FORWARD -p TCP -s $LOCAL_NET -d $DNS2 --dport 53 -j ACCEPT
#защита
$IPTABLES -A INPUT -m state --state INVALID -j DROP
$IPTABLES -A FORWARD -m state --state INVALID -j DROP
$IPTABLES -A INPUT -p tcp --tcp-flags SYN,ACK SYN,ACK -m state --state NEW -j REJECT --reject-with tcp-reset
$IPTABLES -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
$IPTABLES -A OUTPUT -p tcp ! --syn -m state --state NEW -j DROP
$IPTABLES -A INPUT -p UDP -s 0/0 --destination-port 138 -j DROP
$IPTABLES -A INPUT -p UDP -s 0/0 --destination-port 113 -j REJECT
$IPTABLES -A INPUT -p UDP -s 0/0 --source-port 67 --destination-port 68 -j ACCEPT
$IPTABLES -A INPUT -p UDP -j RETURN
$IPTABLES -A OUTPUT -p UDP -s 0/0 -j ACCEPT
$IPTABLES -A INPUT --fragment -p ICMP -j DROP
$IPTABLES -A OUTPUT --fragment -p ICMP -j DROP
ebegin "access ICMP"
# icmp
$IPTABLES -A INPUT -p icmp -j ACCEPT
$IPTABLES -A INPUT -p icmp -j DROP
$IPTABLES -A FORWARD -p icmp -j ACCEPT
$IPTABLES -A FORWARD -p icmp -j DROP
$IPTABLES -A INPUT -p icmp -j ACCEPT
$IPTABLES -A FORWARD -p icmp -j ACCEPT
ebegin "Install forward"
при такой запеси когда форвард на подсеть то в в глобал достучаться $IPTABLES -A FORWARD -s $LOCAL_NET -j ACCEPT
$IPTABLES -A FORWARD -d $LOCAL_NET -m state --state RELATED,ESTABLISHED -j ACCEPT а мне надо только с разрешенных адресов, вот таким циклом.. но так уже не работает
# for ip in $inet
# {
# $IPTABLES -A FORWARD -p ALL -s $ip -j ACCEPT
# $IPTABLES -A FORWARD -p ALL -d $ip -m state --state RELATED,ESTABLISHED -j ACCEPT
# }
ebegin "create NAT"
#nat
for str in $nat_ip_ports
{
tmp=$(echo $str | tr ":" "\n")
index=0;
param[0]=''
for part in $tmp
{
let "index+=1"
case "$index" in
[1] ) param[$index]=$part ;;
[2] ) param[$index]=$part ;;
[3] ) param[$index]=$part ;;
[4] ) param[$index]=$part ;;
esac
} из файла все читается нормально и в правило нужные значения подставляются
в файле такие строки допустим
tcp:80:10.1.1.5:80
tcp:21:10.1.1.3:21
tcp:22:10.1.1.3:22
if [ "$index" = "4" ]; then
$IPTABLES -A INPUT -d ${param[3]} -p ${param[1]} --dport ${param[2]} -j ACCEPT этот форвард наверно не надо #$IPTABLES -A FORWARD -s ${param[3]} -s ${param[1]} --dport ${param[2]} -j ACCEPT
#$IPTABLES -A FORWARD -d ${param[3]} -p ${param[1]} --dport ${param[2]} -j ACCEPT
$IPTABLES -t nat -I PREROUTING -p ${param[1]} --dport ${param[2]} -i $VINTERFACE -j DNAT --to ${param[3]}:${param[4]}
ebegin "for: $tmp"
fi
}
ebegin "Setup accessed ports" порты читаются из файла все хорошо, ну а правила вроде так и должны быть
cat /etc/firewall/inet_ports.list
21
22
53
80
123
443
445
783
995
1024:65355
# разрешить порты с глобала
for port in $net_ports
{
$IPTABLES -A INPUT -i $VINTERFACE -d $WAN_IP -p tcp --dport $port -j ACCEPT
$IPTABLES -A INPUT -i $VINTERFACE -d $WAN_IP -p udp --dport $port -j ACCEPT
} разрешени тех же портов для локальных адресов с прямым доступом или это не надо
for port in $inet_ports
{
for ip in $inet
{
$IPTABLES -A INPUT -d $ip -p tcp --dport $port -j ACCEPT
$IPTABLES -A INPUT -d $ip -p udp --dport $port -j ACCEPT
}
}
eend $?
}
остальное это все куски функционала скрипта, для порядку тоже предоставлю.. start()
{
ebegin "Starting firewall"
if [ -e "${FIREWALL}" ]; then
restore
else
einfo "${FIREWALL} does not exists. Using default rules."
rules
fi
eend $?
}
showoptions()
{
echo "Usage: $0 {start|save|restore|panic|stop|restart|showstatus}"
echo "start) will restore setting if exists else force rules"
echo "stop) delete all rules and set all to accept"
echo "rules) force settings of new rules"
echo "save) will store settings in ${FIREWALL}"
echo "restore) will restore settings from ${FIREWALL}"
echo "showstatus) Shows the status"
}
Вообщем спросить мне не у кого, а мануалы курил вроде же делаю правильно.. но что то не работает
Если кто хорошо понимает буду раб советам и рекомендациям.
я так понимаю у вас gentoo.
А что /etc/init.d/iptables уже не модно? Зачем городить свой велосипед?
Конечно gentoo
не нужно s ага..Но это не решает проблему. напомню: основная в том, что только разрешеные ip не получается в глобал выпускать а все остальные не должны в глобал ходить кроме как за DNSом(это сделано)
Да вот свои хочется написать, дабы лучше понимать, а то тут есть потребность. ipfw конечно бы решил... но хочется gentoo.
...почему не pf? И если кому то лень скомандовать man iptables, узнать о такой полезной вещи как трассировка соединений (в том числе -p 47), то есть возможность просто использовать Gentoo/FreeBSD.
В качестве "костыля" могу посоветовать emerge net-misc/ferm. После чтения документации, теста и успешной загрузки правил делаем iptables-save. profit.
p.s. ferm is a tool to maintain complex firewalls, without having the trouble to rewrite the complex rules over and over again. ferm allows the entire firewall rule set to be stored in a separate file, and to be loaded with one command. The firewall configuration resembles structured programming-like language, which can contain levels and lists.
p.p.s. GRE это прежде всего стандартный протокол за номером 47, и имеет все те же права для поддержки что и другие, а PPTP это вообще TCP 1723 порт.