iptables (прозрачный прокси и все такое...)

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС.

Модераторы: SLEDopit, Модераторы разделов

ska
Сообщения: 202
ОС: ALTLinux School Master

iptables

Сообщение ska »

Вот собственно если в конфиге есть строчка с таким редиректом то клиенты не могут законнектиться (я ее пока закомментировал)
Клиентам приходится указывать в браузере ай пи прокси и порт 8090

Код: Выделить всё

#!/bin/bash

IPTABLES=/sbin/iptables

$IPTABLES -F INPUT
$IPTABLES -F OUTPUT
$IPTABLES -F FORWARD

$IPTABLES -X

$IPTABLES -P FORWARD DROP
$IPTABLES -P INPUT ACCEPT
$IPTABLES -P OUTPUT ACCEPT

$IPTABLES -t nat -F

$IPTABLES -A FORWARD -i eth0 -o eth3 -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A FORWARD -i eth3 -o eth0 -m state --state NEW,ESTABLISHED -j ACCEPT
#$IPTABLES -t nat -A PREROUTING -p tcp -m tcp --dport 80 -j REDIRECT --to-port 8090
$IPTABLES -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Спасибо сказали:
Аватара пользователя
DaemonTux
Сообщения: 1480
Статус: Юный падаван
ОС: Gentoo

Re: iptables

Сообщение DaemonTux »

Конфиг кальмара (squid) в студию
Vladivostok Linux User Group
Спасибо сказали:
ska
Сообщения: 202
ОС: ALTLinux School Master

Re: iptables

Сообщение ska »

Вот тут моя тема была авторизация в squid

Клиенты цепляются к дансгардиан а он цепляется к сквиду
Спасибо сказали:
Аватара пользователя
unax
Сообщения: 275
ОС: Linux

Re: iptables

Сообщение unax »

У меня следующая проблема..
Предположим есть шлюз на 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 -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 -t nat -A POSTROUTING -o $VINTERFACE -j MASQUERADE

Что еще добавить?
Спасибо сказали:
patrius
Сообщения: 337
ОС: Debian (4 & 5) -> Gentoo

Re: iptables

Сообщение patrius »

Код: Выделить всё

$IPTABLES -I FORWARD -i $IINTERFACE -d $HOME_NETWORK -j DROP

перед этой строкой должно быть правило, которое пропускает пакеты уже установленных соединений.
для более точной диагностики рекомендую iptables -ULOG
Спасибо сказали:
Аватара пользователя
unax
Сообщения: 275
ОС: Linux

Re: iptables

Сообщение unax »

patrius писал(а):
05.10.2010 14:58
перед этой строкой должно быть правило, которое пропускает пакеты уже установленных соединений.
для более точной диагностики рекомендую iptables -ULOG


всеравно не работает чота( С локальных компьютеров не пускает на ppptp vpn
добавил вроде .. вот

Код: Выделить всё

  $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 - виртуальный интерфейс, созданное подключение..
подробнее:

Код: Выделить всё

config_eth2=( "null" )
config_ppp0="ppp"
link_ppp0="eth2"
plugins_ppp0="pppoe"
username_ppp0='логи'
password_ppp0='пароль'
pppd_ppp0="
'usepeerdns'
'noauth'
'updetach'
'defaultroute'
'default-asyncmap'
'ipcp-accept-remote'
'ipcp-accept-local'
'mru' 1492
'mtu' 1492
'persist'
'maxfail' 0
'lcp-echo-interval' 15
'lcp-echo-failure' 3 "


может каких-то правил не хватает для OINTERFACE
Спасибо сказали:
patrius
Сообщения: 337
ОС: Debian (4 & 5) -> Gentoo

Re: iptables

Сообщение patrius »

решение похожей проблемы тут
unax, тебе я вно не хватает понимания работы iptables, почитай Руководство по iptables (Iptables Tutorial 1.1.19)
Для точной диагностики рекомендую (если не сделано раньше) убедиться в вине iptables. Т.Е. очистить правила FORWARD и перевести политику в ACCEPT. После этого соединения должны устанавливаться. Если этого не произошло, значит вина не (только) iptables. проверяй настройки.
Спасибо сказали:
ska
Сообщения: 202
ОС: ALTLinux School Master

Re: iptables

Сообщение ska »

а как же я?
Спасибо сказали:
patrius
Сообщения: 337
ОС: Debian (4 & 5) -> Gentoo

Re: iptables

Сообщение patrius »

ska писал(а):
08.10.2010 06:48
а как же я?

все сказанное в теме в равной степени относится и к тебе.
Кроме того.
Объясни по человечиски, что именно не получается.
Спасибо сказали:
Аватара пользователя
unax
Сообщения: 275
ОС: Linux

Re: iptables

Сообщение unax »


как-то плохо получатся настаивать iptables..
Помощи прошу, не могу нормально настроить..
Вот сваял скрипт в нем задаются правила..


#!/sbin/runscript

IPTABLES=/sbin/iptables
IPTABLESSAVE=/sbin/iptables-save
IPTABLESRESTORE=/sbin/iptables-restore
FIREWALL=/etc/firewall.rules
# Параметры сети
UNPRIVPORTS="1024:65535"
DNS1=***
DNS2=***

LOCAL_NET=10.1.1.0/24 # локальная сеть
LAN_IP=10.1.1.11 # внутренний ip шлюза
WAN_IP=***** # внещний ip

inet=`cat /etc/firewall/inet.list | grep -v "#"` # локальные адреса открытые в глобал
в файле просто перечисляются адреса
cat /etc/firewall/inet.list
10.1.1.52
10.1.1.5
10.1.1.2
10.1.1.6

inet_ports=`cat /etc/firewall/inet_ports.list | grep -v "#"` # порты разрешенные
nat_ip_ports=`cat /etc/firewall/nat_ip_ports.list | grep -v "#" | grep -i :` # натирование портов на адреса

IINTERFACE=eth0 # внутренний
OINTERFACE=eth2 # шнурок провайдера
VINTERFACE=ppp0 # виртуальный, поднятое pppoe

opts="${opts} showstatus panic save restore showoptions rules"

depend()
{
need net.eth2
}

rules()
{
stop
ebegin "Install firewall"

$IPTABLES -t nat -F
$IPTABLES -F
$IPTABLES -t nat -X
$IPTABLES -X

# Политика 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 $?
}

stop()
{
ebegin "Stopping firewall"
$IPTABLES -F
$IPTABLES -t nat -F
$IPTABLES -X
$IPTABLES -P FORWARD ACCEPT
$IPTABLES -P INPUT ACCEPT
$IPTABLES -P OUTPUT ACCEPT
eend $?
}

showstatus()
{
ebegin "Status"
$IPTABLES -L -n -v --line-numbers
einfo "NAT status"
$IPTABLES -L -n -v --line-numbers -t nat
eend $?
}

panic()
{
ebegin "Setting panic rules"
$IPTABLES -F
$IPTABLES -X
$IPTABLES -t nat -F
$IPTABLES -P FORWARD DROP
$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT DROP
$IPTABLES -A INPUT -i lo -j ACCEPT
$IPTABLES -A OUTPUT -o lo -j ACCEPT
eend $?
}

save()
{
ebegin "Saving Firewall rules"
$IPTABLESSAVE > $FIREWALL
eend $?
}

restore()
{
ebegin "Restoring Firewall rules"
$IPTABLESRESTORE < $FIREWALL
eend $?
}

restart()
{
svc_stop; svc_start
}

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"
}


Вообщем спросить мне не у кого, а мануалы курил вроде же делаю правильно.. но что то не работает
Если кто хорошо понимает буду раб советам и рекомендациям.
Спасибо сказали:
Аватара пользователя
DaemonTux
Сообщения: 1480
Статус: Юный падаван
ОС: Gentoo

Re: iptables

Сообщение DaemonTux »

я так понимаю у вас gentoo.
А что /etc/init.d/iptables уже не модно? Зачем городить свой велосипед?

$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


зачем в правиле
Vladivostok Linux User Group
Спасибо сказали:
Аватара пользователя
unax
Сообщения: 275
ОС: Linux

Re: iptables

Сообщение unax »

DaemonTux писал(а):
22.10.2010 03:59
я так понимаю у вас gentoo.
А что /etc/init.d/iptables уже не модно? Зачем городить свой велосипед?

Конечно gentoo ;)
не нужно s ага..Но это не решает проблему. напомню: основная в том, что только разрешеные ip не получается в глобал выпускать а все остальные не должны в глобал ходить кроме как за DNSом(это сделано)
Да вот свои хочется написать, дабы лучше понимать, а то тут есть потребность. ipfw конечно бы решил... но хочется gentoo.

Спасибо сказали:
Аватара пользователя
taaroa
Сообщения: 1319

Re: iptables

Сообщение taaroa »

unax писал(а):
22.10.2010 05:02
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 порт.

:wq
Спасибо сказали: