URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID10
Нить номер: 4198
[ Назад ]

Исходное сообщение
"Настройка  iptables"

Отправлено undel , 24-Мрт-09 01:19 
Имеется сервер доступа в интернет для локальной сети. На нем поднята transparent-прокся (Squid)и необходимо настроить iptables для работы этой прокси, приема/отправки почты и разрешения DNS.

Интерфейсы:
eth0 - карточка на материке(глючит, не используется)
eth1 - карта, по которой подключен Интернет(выставлен DHCP)
eth2 - локалка(статика)
ppp0 - соединение с провайдером по PPPoE

Сейчас конфиг:
****************************************************************************************

#!/bin/sh

#
# Конфигурация Интернет-интерфейса.
#

INET_IP="0/0"
INET_IFACE="ppp0"

#
# Конфигурация LAN-интерфейса
#

LAN_IP="192.168.100.253"
LAN_IP_RANGE="192.168.100.0/24"
LAN_IFACE="eth2"

#
# Конфигурация localhost.
#

LO_IFACE="lo"
LO_IP="127.0.0.1"

#
# Конфигурация IPTables.
#

IPTABLES="iptables"

#Загрузка модулей
/sbin/depmod -a

#
# Необходимые модули
#
/sbin/modprobe ip_tables
/sbin/modprobe ip_conntrack
/sbin/modprobe iptable_filter
/sbin/modprobe iptable_mangle
/sbin/modprobe iptable_nat
/sbin/modprobe ipt_LOG
/sbin/modprobe ipt_limit
/sbin/modprobe ipt_state
#
# Дополнительные модули
#
#/sbin/modprobe ipt_owner
#/sbin/modprobe ipt_REJECT
/sbin/modprobe ipt_MASQUERADE
#/sbin/modprobe ip_conntrack_ftp
#/sbin/modprobe ip_conntrack_irc
#/sbin/modprobe ip_nat_ftp
#/sbin/modprobe ip_nat_irc


#
# Включаем FORWARDинг
#

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


#
# Политика по умолчанию
#

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

#
# Создание собственных цепочек
#
$IPTABLES -N bad_tcp_packets
$IPTABLES -N allowed
$IPTABLES -N tcp_packets
$IPTABLES -N udp_packets
$IPTABLES -N icmp_packets

#
# Заполнение собственных цепочек
#

#
# Цепочка bad_tcp_packets
#

$IPTABLES -A bad_tcp_packets -p tcp --tcp-flags SYN,ACK SYN,ACK -m state --state NEW -j REJECT --reject-with tcp-reset
$IPTABLES -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j DROP

#
# Цепочка allowed
#

$IPTABLES -A allowed -p TCP --syn -j ACCEPT
$IPTABLES -A allowed -p TCP -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A allowed -p TCP -j DROP

#
# Порты TCP
#

$IPTABLES -A tcp_packets -p TCP -s 0/0 --dport 25 -j allowed
$IPTABLES -A tcp_packets -p TCP -s 0/0 --dport 110 -j allowed
$IPTABLES -A tcp_packets -p TCP -s 0/0 --dport 80 -j allowed

#
# Порты UDP
#

$IPTABLES -A udp_packets -p UDP -s 0/0 --destination-port 53 -j ACCEPT

#
# Правила ICMP
#

$IPTABLES -A icmp_packets -p ICMP -s 0/0 --icmp-type 8 -j ACCEPT
$IPTABLES -A icmp_packets -p ICMP -s 0/0 --icmp-type 11 -j ACCEPT

#
# Цепочка INPUT
#

$IPTABLES -A INPUT -p tcp -j bad_tcp_packets

#
# Правила для LAN (разрешаем все)
#

$IPTABLES -A INPUT -p ALL -i $LAN_IFACE -s $LAN_IP_RANGE -j ACCEPT
$IPTABLES -A INPUT -p ALL -i $LO_IFACE -s $LO_IP -j ACCEPT
$IPTABLES -A INPUT -p ALL -i $LO_IFACE -s $LAN_IP -j ACCEPT
$IPTABLES -A INPUT -p ALL -i $LO_IFACE -s $INET_IP -j ACCEPT

#
# Правила для пакетов из интернета
#

$IPTABLES -A INPUT -p ALL -d $INET_IP -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A INPUT -p TCP -i $INET_IFACE -j tcp_packets
$IPTABLES -A INPUT -p UDP -i $INET_IFACE -j udp_packets
$IPTABLES -A INPUT -p ICMP -i $INET_IFACE -j icmp_packets


#
# Цепочка FORWARD
#

$IPTABLES -A FORWARD -p tcp -j bad_tcp_packets

#
# FORWARDинг на всю локальную сеть.(Пользователи из локалки могут ходить в интернет)
#

$IPTABLES -A FORWARD -i $LAN_IFACE -j ACCEPT
$IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

#
# Цепочка OUTPUT
#

$IPTABLES -A OUTPUT -p tcp -j bad_tcp_packets

#
# Правила цепочки
#

$IPTABLES -A OUTPUT -p ALL -s $LO_IP -j ACCEPT
$IPTABLES -A OUTPUT -p ALL -s $LAN_IP -j ACCEPT
$IPTABLES -A OUTPUT -p ALL -s $INET_IP -j ACCEPT


#
# Включаем IP Forwarding и трансляцию адресов(или маскарадинг)
#

$IPTABLES -t nat -A POSTROUTING -o $INET_IFACE -j MASQUERADE

$IPTABLES -t nat -A PREROUTING -i $LAN_IFACE -p tcp --dport 3128 -j REDIRECT --to-port 8080 #редирект на havp для проверки трафика на вирусы

************************************************************************************

Данный конфиг не работает. В чем косяк?


Содержание

Сообщения в этом обсуждении
"Настройка  iptables"
Отправлено reader , 24-Мрт-09 12:42 
так а что не работает, как проверяете, как клиент настроен?

если не ошибаюсь, то havp не работает в прозрачном режиме.


"Настройка  iptables"
Отправлено undel , 24-Мрт-09 20:00 
>так а что не работает, как проверяете, как клиент настроен?
>
>если не ошибаюсь, то havp не работает в прозрачном режиме.

С самого шлюза инет есть, а с клиентов - нет. Судя по tcpdump маскарадинг не работает.
Про havp спасибо.


"Настройка  iptables"
Отправлено reader , 24-Мрт-09 20:34 
>>так а что не работает, как проверяете, как клиент настроен?
>>
>>если не ошибаюсь, то havp не работает в прозрачном режиме.
>
>С самогtcpо шлюза инет есть, а с клиентов - нет. Судя по
>tcpdump маскарадинг не работает.
>Про havp спасибо.

уверены?
iptables-save -c    до и после проверки и будите видеть какие правила сработали.
tcpdump запросы от клиентов видит?
чем проверяете? браузером? браузер настроен на работу через прокси? у клиента шлюз и DNS прописан?


"Настройка  iptables"
Отправлено undel , 25-Мрт-09 09:57 
>iptables-save -c    до и после проверки и будите видеть
>какие правила сработали.

спасибо, посмотрю
>tcpdump запросы от клиентов видит?

да.
>чем проверяете? браузером? браузер настроен на работу через прокси? у клиента шлюз
>и DNS прописан?

Браузером, пингом. Прокси прописан, шлюз и ДНС прописаны.
Еще имеется такая проблема, что при загрузке сервер неправильно выбирает гейт. По дефолту он выбирает карточку локальной сети. Если переподключить инет и -опустить-поднять интерфейсы, то гейт выбирается верно. Но даже когда сам начинает видеть инет, клиенты инет не видят. Веб после шаманства с роутингом начинает работать, а вот почта не ходит...



"Настройка  iptables"
Отправлено Undel , 25-Мрт-09 15:06 
итак... кажется, разобрался почти... вот стаким конфигом все работает, но пользователи могут почему-то ходить напрямую в Интернет минуя проксю, хотя последняя строка явно дропает весь трафик, который не подходит под правила.
************************************************************
#!/bin/sh

#
# Конфигурация Интернет-интерфейса.
#

INET_IP="0/0" #Ваш внешний IP - если динамический - то 0/0
INET_IFACE="ppp0" #Ваш интерфейс в интернет (ppp,ippp,eth)
#INET_BROADCAST="212.96.100.255" #Броадкаст(нужен, если есть статический ip в интернет)

#
# Конфигурация LAN-интерфейса
#

LAN_IP="192.168.100.253"
LAN_IP_RANGE="192.168.100.0/24"
LAN_IFACE="eth2"

#
# Конфигурация localhost.
#

LO_IFACE="lo"
LO_IP="127.0.0.1"

#
# Конфигурация IPTables.
#

IPTABLES="iptables"

#Загрузка модулей
/sbin/depmod -a

#
# Необходимые модули
#
/sbin/modprobe ip_tables
/sbin/modprobe ip_conntrack
/sbin/modprobe iptable_filter
/sbin/modprobe iptable_mangle
/sbin/modprobe iptable_nat
/sbin/modprobe ipt_LOG
/sbin/modprobe ipt_limit
/sbin/modprobe ipt_state
#
# Дополнительные модули
#
#/sbin/modprobe ipt_owner
#/sbin/modprobe ipt_REJECT
/sbin/modprobe ipt_MASQUERADE
#/sbin/modprobe ip_conntrack_ftp
#/sbin/modprobe ip_conntrack_irc
#/sbin/modprobe ip_nat_ftp
#/sbin/modprobe ip_nat_irc


#
# Включаем FORWARDинг
#

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


#
# Политика по умолчанию
#

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

#
# Создание собственных цепочек
#
$IPTABLES -N bad_tcp_packets
$IPTABLES -N allowed
$IPTABLES -N tcp_packets
$IPTABLES -N udp_packets
$IPTABLES -N icmp_packets

#
# Заполнение собственных цепочек
#

#
# Цепочка bad_tcp_packets
#

$IPTABLES -A bad_tcp_packets -p tcp --tcp-flags SYN,ACK SYN,ACK -m state --state NEW -j REJECT --reject-with tcp-reset
$IPTABLES -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j DROP

#
# Цепочка allowed
#

$IPTABLES -A allowed -p TCP --syn -j ACCEPT
$IPTABLES -A allowed -p TCP -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A allowed -p TCP -j DROP

#
# Порты TCP
#

$IPTABLES -A FORWARD -p TCP --dport 25 -j ACCEPT
$IPTABLES -A FORWARD -p TCP --dport 110 -j ACCEPT
$IPTABLES -A FORWARD -p TCP --sport 25 -j ACCEPT
$IPTABLES -A FORWARD -p TCP --sport 110 -j ACCEPT
$IPTABLES -A INPUT -p TCP --dport 3128 -j ACCEPT
$IPTABLES -A OUTPUT -p TCP --dport 3128 -j ACCEPT
#$IPTABLES -A tcp_packets -p TCP -s 0/0 --dport 80 -j allowed


#
# Порты UDP
#

$IPTABLES -A udp_packets -p UDP -s 0/0 --destination-port 53 -j ACCEPT

#
# Правила ICMP
#

$IPTABLES -A icmp_packets -p ICMP -s 0/0 --icmp-type 8 -j ACCEPT
$IPTABLES -A icmp_packets -p ICMP -s 0/0 --icmp-type 11 -j ACCEPT

#
# Цепочка INPUT
#

$IPTABLES -A INPUT -p tcp -j bad_tcp_packets

#
# Правила для LAN (разрешаем все)
#

$IPTABLES -A INPUT -p ALL -i $LAN_IFACE -s $LAN_IP_RANGE -j ACCEPT
$IPTABLES -A INPUT -p ALL -i $LO_IFACE -s $LO_IP -j ACCEPT
$IPTABLES -A INPUT -p ALL -i $LO_IFACE -s $LAN_IP -j ACCEPT
$IPTABLES -A INPUT -p ALL -i $LO_IFACE -s $INET_IP -j ACCEPT

#
# Правила для пакетов из интернета
#

$IPTABLES -A INPUT -p ALL -d $INET_IP -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A INPUT -p TCP -i $INET_IFACE -j tcp_packets
$IPTABLES -A INPUT -p UDP -i $INET_IFACE -j udp_packets
$IPTABLES -A INPUT -p ICMP -i $INET_IFACE -j icmp_packets


#
# Цепочка FORWARD
#

$IPTABLES -A FORWARD -p tcp -j bad_tcp_packets

#
# FORWARDинг на всю локальную сеть.(Пользователи из локалки могут ходить в интернет)
#

#$IPTABLES -A FORWARD -i $LAN_IFACE -j ACCEPT
#$IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

#
# Цепочка OUTPUT
#

$IPTABLES -A OUTPUT -p tcp -j bad_tcp_packets

#
# Правила цепочки
#

$IPTABLES -A OUTPUT -p ALL -s $LO_IP -j ACCEPT
$IPTABLES -A OUTPUT -p ALL -s $LAN_IP -j ACCEPT
$IPTABLES -A OUTPUT -p ALL -s $INET_IP -j ACCEPT


#
# Включаем IP Forwarding и трансляцию адресов(или маскарадинг)
#


$IPTABLES -t nat -A PREROUTING -i $LAN_IFACE -d ! $LAN_IP_RANGE -p tcp --dport 80 -j REDIRECT --to-port 3128

$IPTABLES -t nat -A POSTROUTING -o $INET_IFACE -j MASQUERADE

$IPTABLES -A INPUT -j DROP


"Настройка  iptables"
Отправлено Andrey Mirofanov , 25-Мрт-09 17:14 
>итак... кажется, разобрался почти...
>могут почему-то ходить напрямую в Интернет
>последняя строка явно дропает весь трафик, который не

Кажется. Не разобрался, не последняя строка, не дропает, не весь, не все-в-Интернет.

>$IPTABLES -P FORWARD DROP

"Пользователей" по идее дропает это правило (политика), а не последнее...

>$IPTABLES -A FORWARD -p TCP --dport 25 -j ACCEPT
>$IPTABLES -A FORWARD -p TCP --dport 110 -j ACCEPT
>$IPTABLES -A FORWARD -p TCP --sport 25 -j ACCEPT
>$IPTABLES -A FORWARD -p TCP --sport 110 -j ACCEPT
>$IPTABLES -A FORWARD -p tcp -j bad_tcp_packets
>#$IPTABLES -A FORWARD -i $LAN_IFACE -j ACCEPT
>#$IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

А вот почему "все ходють" -- не знаю. Лениво...

См.также
http:/openforum/vsluhforumID1/81486.html#4 && #5
+про "этот скрипт" http:/openforum/vsluhforumID10/3929.html#1
+про "стейтфул" http:/openforum/vsluhforumID10/4075.html#6

Соберусь - накропаю "бесплатных образцов", сейчас времени нет.

>$IPTABLES -A INPUT -j DROP


"Настройка  iptables"
Отправлено reader , 25-Мрт-09 18:06 
То что идет на 80 порт в инет, мимо прокси не пройдет, разве что мимо машины вообще. Все остальное пойдет через NAT, почему вам уже показали.
Что значит не правельно выбирает гейт, сетевые карты eth0, eth1, eth2 меняет местами ( адреса присваивает не так как задумано) - смотрите правила udev.
При прописывании прокси в браузере, nat не используется и так работу nat вы не проверите.

"Настройка  iptables"
Отправлено undel , 25-Мрт-09 22:44 
>То что идет на 80 порт в инет, мимо прокси не пройдет,
>разве что мимо машины вообще. Все остальное пойдет через NAT, почему
>вам уже показали.

хм... может и правда на поксю идет... тогда все гуд
>Что значит не правельно выбирает гейт, сетевые карты eth0, eth1, eth2 меняет
>местами ( адреса присваивает не так как задумано) - смотрите правила
>udev.

не, с этим все верно. eth0 - вообще кабель не подключен, eth2 ghописан в /etc/network/interfaces явно и так как надо работает, eth1 - единственная карта, смотрящая наружу. Раз инет есть - значит все нормально.
>При прописывании прокси в браузере, nat не используется и так работу nat
>вы не проверите.

Возможно в этом все дело...