Всем привет!
Начальные данные:
ЛВС с разделенной внутренней сетью: DMZ и доверительной, внешний мир через шлюз.
1) Внешний Шлюз - машина под ASP Linux 7.2 (ker. 2.4x.). На нем установлен брандмауэр iptables ver. 1.2.4. установлен кэширующий сервер (nscd и named на перенаправление на внутрений DNS-DMZ).
Интерфейсы/ip-адрес:
eth0 – внешний (Интернет)/ 211.33.195.47
eth1 – внутрений (DMZ) 192.168.5.95
Iptables – устанавливался при установки системы (rpm), ядро не перекомпилировалось.
В ДМЗ установлен почтовый сервер (отдельная машина).
Для внешнего мира машина является почтовым сервером. DNS-провайдера поднят, машина отзывается.
Echo > 1 … ip_forward – сделано.
SNAT – поднят и работает. DNAT – не функционирует и как следует шлюз не пере направляет трафик на внутренний почтовый сервер.
2) Почтовый сервер машина под ASP Linux 7.2 (ker. 2.4x.). Sendmail, imap4, IP-адрес 192.168.5.80. Письма передаются и принимаются в пределах локальной сети. База доступа разрешает домен внутренний и внешний. Письма передаются во внешний мир, но, к сожалению, не принимаются по причине ниже следующей.
Внимание!!!
ПРОБЛЕМА: Как сделать так, чтобы на шлюзе было перенаправления почтового трафика на машину (mail-serv) в ДМЗ. Sendmail на шлюзе - сразу неприемлемо.
Короче помогите настроить, очень прошу.
МОИ УСИЛИЯ:
СКРИПТ НЕ ВЫДАЕТ НИ КАКИХ ОШИБОК!!!
ДАЖЕ, ЕСЛИ ДЕЛАЕШЬ ПОЛИТИКУ ПО УМОЛЧАНИЮ В ТАБЛИЦЕ filter ACCEPT И ТОЛЬКО ПРАВИЛА NAT, ВСЕРАВНО НЕ РАБОТАЕТ:
КАК ПРОВЕРЯЛ:
telnet 211.33.195.47 25
Truing 211.33.195.47…
telnet: connect to address 211.33.195.47: Connection refused
netstat – тоже не чего не показывает…
Письмо отсылаешь сам себе, выдает ошибка сокета на узле.
И самое главное опция –C (генерация пакетов, проверка правил) в iptables выдает:
Iptables: Will be implemented real soon. I promise ;) – ну и как себя после этого чувствовать?!
В одном форуме узнал об утилите redir:
/usr/local/sbin/redir --lport="локальный порт" --laddr="локальный адрес" --cport="порт, куда редиректить" --caddr="адрес,куда редиректить"
http://sammy.net/~sammy/hacks/redir-2.2.1.tar.gz
Короче, откомпилировал, то работает, то нет и причем в не фоновом режиме, если добавляешь еще один порт для перенаправления, то тоже не работает.
ВЫВОД: Думаю может в ядре чего-нибудь нет? Может перекомпилир.? Или утилита iptables старая.
ВОТ МОЙ СКРИПТ:
#!/bin/sh
echo "Starting firewalling"
IPTABLES="/sbin/iptables" # имя и место нахождение утилиты
# ВНЕШНИЕ ПАРАМЕТРЫ
EXT_IPADDR="211.33.195.47" # внешний IP-адрес брандмауера
EXT_INTERF="eth0" # внешний интерфейс брандмауера
ANYWHERE="0/0" # произвольный ip-адрес
NAMESERVER_1="215.44.120.6" # DNS-сервер 1 провайдера
NAMESERVER_2="195.78.143.5" # DNS-сервер 2 провайдера
# DMZ ПАРАМЕТРЫ
LAN_DMZ="192.168.5.0/24" # DMZ сеть
LAN_IPADDR_DMZ="192.168.5.95" # DMZ адрес брандмауера
LAN_DMZ_INTERF="eth1" # DMZ интерфейс брандмауера
# ВНУТРЕНЕЙ ПЕТЛИ ПАРАМЕТРЫ
LO_IFACE="lo" # петлевой интерфейс
LO_IP="127.0.0.0/8" # петлевой адрес
# Внутренние сервера
MAIL_IP="192.168.5.80" # IP-адрес внутреннего почтового сервера
FTP_IP="192.168.5.80" # IP-адрес внутреннего файлового сервера
# ДРУГИЕ ПАРАМЕТРЫ
CLASS_A="10.0.0.0/8" # адреса класса А, предназначенные
# для внутреннего использования
CLASS_B="172.16.0.0/12" # адреса класса B, предназначенные
# для внутреннего использования
CLASS_C="192.168.0.0/16" # адреса класса C, предназначенные
# для внутреннего использования
CLASS_D="224.0.0.0/4" # адреса класса D, предназначенные
# для группового вещания
BROADCAST_SRC="0.0.0.0" # исходный широковещательный адрес
BROADCAST_DEST="255.255.255.255" # целевой широковещательный адрес
PRIVPORTS="0:1023" # номера привилегированных портов
UNPRIVPORTS="1024:65535" # номера непривилегированных портов
TRACEROUTE_SRC_PORTS="32769:65535" # порты источника утилиты TRACEROUTE
TRACEROUTE_DEST_PORTS="33434:33523" # порты источника утилиты TRACEROUTE
SSH_PORTS="1020:1023" # число одновременных соединений
#|||||||||||||||||||||----ПОЕХАЛИ!!!!!----||||||||||||||||||||||||||||||||||||
# Прелюдия
# Включаем поддержку перенаправления пакетов
echo "1" > /proc/sys/net/ipv4/ip_forward
# Запрещаем фрагментированные пакеты
# $IPTABLES -A INPUT -F -o $LAN_DMZ_INTERF -j DROP
# Разрешить защиту TCP SYN cookie
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
# Разрешить защиту от фальсификации IP-адресов.
# Включить проверку исходных адресов
for f in /proc/sys/net/ipv4/conf/*/rp_filter; do
echo 1 > $f
done
# Запретить ICMP-перенаправление
for f in /proc/sys/net/ipv4/conf/*/accept_redirects; do
echo 0 > $f
done
# Запретить пакеты с маршрутом к источнику
for f in /proc/sys/net/ipv4/conf/*/accept_source_route; do
echo 0 > $f
done
# Удаление существующих правил из всех цепочек
$IPTABLES -F
#
# Установка политики запрета по умолчанию
$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT DROP
$IPTABLES -P FORWARD DROP
# Разрешить неограниченный трафик через интерфейс петли
$IPTABLES -A INPUT -i $LO_IFACE -j ACCEPT
$IPTABLES -A OUTPUT -o $LO_IFACE -j ACCEPT
# Разрешить локальный интерфейс
$IPTABLES -A INPUT -i $LAN_DMZ_INTERF -j ACCEPT
$IPTABLES -A OUTPUT -o $LAN_DMZ_INTERF -j ACCEPT
##############################################
# Цепочки для обработки входящих ICMP-пакетов#
##############################################
# Входящие пакеты ping (8)
$IPTABLES -A INPUT -i $EXT_INTERF -p icmp \
-s $ANYWHERE --icmp-type echo-reply -d $EXT_IPADDR -j ACCEPT
# Входящие данные, передаваемые при определении размера узла,
# что узел или сервер недоступны; отклик traceroute (3)
$IPTABLES -A INPUT -i $EXT_INTERF -p icmp \
-s $ANYWHERE --icmp-type destination-unreachable -d $EXT_IPADDR -j ACCEPT
# Входящие запросы с требованием замедления передачи (4)
$IPTABLES -A INPUT -i $EXT_INTERF -p icmp \
-s $ANYWHERE --icmp-type source-quench -d $EXT_IPADDR -j ACCEPT
# Входящие сообщения о тайм-ауте, а также TTL-сообщения traceroute (11)
$IPTABLES -A INPUT -i $EXT_INTERF -p icmp \
-s $ANYWHERE --icmp-type time-exceeded -d $EXT_IPADDR -j ACCEPT
# Входящие сообщения об ошибках (12)
$IPTABLES -A INPUT -i $EXT_INTERF -p icmp \
-s $ANYWHERE --icmp-type parameter-problem -d $EXT_IPADDR -j ACCEPT
###############################################
# Цепочки для обработки изходящих ICMP-пакетов#
###############################################
#
# Исходящие пакеты ping (8)
$IPTABLES -A OUTPUT -o $EXT_INTERF -p icmp \
-s $EXT_IPADDR --icmp-type echo-request -d $ANYWHERE -j ACCEPT
# Исходящие данные, передаваемые при определении размера узла,
# что узел или сервер недоступны; отклик traceroute (3)
$IPTABLES -A OUTPUT -o $EXT_INTERF -p icmp \
-s $EXT_IPADDR --icmp-type destination-unreachable -d $ANYWHERE -j ACCEPT
$IPTABLES -A OUTPUT -o $EXT_INTERF -p icmp \
-s $EXT_IPADDR --icmp-type fragmentation-needed -d $ANYWHERE -j ACCEPT
# Исходящие запросы с требованием замедления передачи (4)
$IPTABLES -A OUTPUT -o $EXT_INTERF -p icmp \
-s $EXT_IPADDR --icmp-type source-quench -d $ANYWHERE -j ACCEPT
# Исходящие сообщения о тайм-ауте, а также TTL-сообщения traceroute (11)
$IPTABLES -A OUTPUT -o $EXT_INTERF -p icmp \
-s $EXT_IPADDR --icmp-type time-exceeded -d $ANYWHERE -j ACCEPT
# Исходящие сообщения об ошибках (12)
$IPTABLES -A OUTPUT -o $EXT_INTERF -p icmp \
-s $EXT_IPADDR --icmp-type parameter-problem -d $ANYWHERE -j ACCEPT
# Фальсификация пакетов и недопустимые адреса
#
# Запретить пакеты, в которых в качестве адреса источника указан IP-адрес
# вашего брандмауера
$IPTABLES -A INPUT -i $EXT_INTERF -s $EXT_IPADDR -j DROP
# Запретить пакеты, в которых в качестве адреса источника указан IP-адрес
# петли
$IPTABLES -A INPUT -i $EXT_INTERF -s $LO_IP -j DROP
# Запретить пакеты, которые содержат адрес источника,
# принадлежащий классу А
$IPTABLES -A INPUT -i $EXT_INTERF -s $CLASS_A -j DROP
# Запретить пакеты, которые содержат адрес источника,
# принадлежащий классу B
$IPTABLES -A INPUT -i $EXT_INTERF -s $CLASS_B -j DROP
# Запретить пакеты, которые содержат адрес источника,
# принадлежащий классу C
$IPTABLES -A INPUT -i $EXT_INTERF -s $CLASS_C -j DROP
# Запретить пакеты, которые содержат адрес источника,
# принадлежащий классу D
$IPTABLES -A INPUT -i $EXT_INTERF -s $CLASS_D -j DROP
# Запретить некоторые широковещательные пакеты
$IPTABLES -A INPUT -i $EXT_INTERF -s $BROADCAST_DEST -j DROP
$IPTABLES -A INPUT -i $EXT_INTERF -s $BROADCAST_SRC -j DROP
#&&&&&&&&&&&&&&&&&&&
##########################################################################
# DNS # #
#######
# DNS1 в режиме клиента
$IPTABLES -A OUTPUT -o $EXT_INTERF -p udp \
-s $EXT_IPADDR --sport $UNPRIVPORTS \
-d $NAMESERVER_1 --dport 53 -j ACCEPT
$IPTABLES -A INPUT -i $EXT_INTERF -p udp \
-s $NAMESERVER_1 --sport 53 \
-d $EXT_IPADDR --dport $UNPRIVPORTS -j ACCEPT
# DNS-сервер в режиме кэширования и перенаправления
$IPTABLES -A OUTPUT -o $EXT_INTERF -p udp \
-s $EXT_IPADDR --sport 53 \
-d $NAMESERVER_1 --dport 53 -j ACCEPT
$IPTABLES -A INPUT -i $EXT_INTERF -p udp \
-s $NAMESERVER_1 --sport 53 \
-d $EXT_IPADDR --dport 53 -j ACCEPT
#########
$IPTABLES -A OUTPUT -o $EXT_INTERF -p tcp \
-s $EXT_IPADDR --sport $UNPRIVPORTS \
-d $NAMESERVER_1 --dport 53 -j ACCEPT
$IPTABLES -A INPUT -i $EXT_INTERF -p tcp ! --syn \
-s $NAMESERVER_1 --sport 53 \
-d $EXT_IPADDR --dport $UNPRIVPORTS -j ACCEPT
#####
# DNS2 в режиме клиента
$IPTABLES -A OUTPUT -o $EXT_INTERF -p udp \
-s $EXT_IPADDR --sport $UNPRIVPORTS \
-d $NAMESERVER_2 --dport 53 -j ACCEPT
$IPTABLES -A INPUT -i $EXT_INTERF -p udp \
-s $NAMESERVER_2 --sport 53 \
-d $EXT_IPADDR --dport $UNPRIVPORTS -j ACCEPT
# DNS-сервер в режиме кэширования и перенаправления
$IPTABLES -A OUTPUT -o $EXT_INTERF -p udp \
-s $EXT_IPADDR --sport 53 \
-d $NAMESERVER_2 --dport 53 -j ACCEPT
$IPTABLES -A INPUT -i $EXT_INTERF -p udp \
-s $NAMESERVER_2 --sport 53 \
-d $EXT_IPADDR --dport 53 -j ACCEPT
#########
$IPTABLES -A OUTPUT -o $EXT_INTERF -p tcp \
-s $EXT_IPADDR --sport $UNPRIVPORTS \
-d $NAMESERVER_2 --dport 53 -j ACCEPT
$IPTABLES -A INPUT -i $EXT_INTERF -p tcp ! --syn \
-s $NAMESERVER_2 --sport 53 \
-d $EXT_IPADDR --dport $UNPRIVPORTS -j ACCEPT
######################################################################
# HTTP-клиент (80)
$IPTABLES -A OUTPUT -o $EXT_INTERF -p tcp \
-s $EXT_IPADDR --source-port $UNPRIVPORTS \
-d $ANYWHERE --dport 80 -j ACCEPT
$IPTABLES -A INPUT -i $EXT_INTERF -p tcp ! --syn \
-s $ANYWHERE --source-port 80 \
-d $EXT_IPADDR --dport $UNPRIVPORTS -j ACCEPT
# SSL-клиент (443) (защищенные web)
$IPTABLES -A OUTPUT -o $EXT_INTERF -p tcp \
-s $EXT_IPADDR --source-port $UNPRIVPORTS \
-d $ANYWHERE --dport 443 -j ACCEPT
$IPTABLES -A INPUT -i $EXT_INTERF -p tcp ! --syn \
-s $ANYWHERE --source-port 443 \
-d $EXT_IPADDR --dport $UNPRIVPORTS -j ACCEPT
# POP (110) - Получение почты посредством POP-клиента
$IPTABLES -A OUTPUT -o $EXT_INTERF -p tcp \
-s $EXT_IPADDR --source-port $UNPRIVPORTS \
-d $ANYWHERE --dport 110 -j ACCEPT
$IPTABLES -A INPUT -i $EXT_INTERF -p tcp ! --syn \
-s $ANYWHERE --source-port 110 \
-d $EXT_IPADDR --dport $UNPRIVPORTS -j ACCEPT
# IMAP (143) - Получение почты посредством POP-клиента
$IPTABLES -A OUTPUT -o $EXT_INTERF -p tcp \
-s $EXT_IPADDR --source-port $UNPRIVPORTS \
-d $ANYWHERE --dport 143 -j ACCEPT
$IPTABLES -A INPUT -i $EXT_INTERF -p tcp ! --syn \
-s $ANYWHERE --source-port 143 \
-d $EXT_IPADDR --dport $UNPRIVPORTS -j ACCEPT
# SMTP (25) - клиент
$IPTABLES -A OUTPUT -o $EXT_INTERF -p tcp \
-s $EXT_IPADDR --source-port $UNPRIVPORTS \
-d $ANYWHERE --dport 25 -j ACCEPT
$IPTABLES -A INPUT -i $EXT_INTERF -p tcp ! --syn \
-s $ANYWHERE --source-port 25 \
-d $EXT_IPADDR --dport $UNPRIVPORTS -j ACCEPT
# SSH (22) - клиент (защищенный Telnet)
$IPTABLES -A OUTPUT -o $EXT_INTERF -p tcp \
-s $EXT_IPADDR --source-port $UNPRIVPORTS \
-d $ANYWHERE --dport 22 -j ACCEPT
$IPTABLES -A INPUT -i $EXT_INTERF -p tcp ! --syn \
-s $ANYWHERE --source-port 22 \
-d $EXT_IPADDR --dport $UNPRIVPORTS -j ACCEPT
$IPTABLES -A OUTPUT -o $EXT_INTERF -p tcp \
-s $EXT_IPADDR --source-port $SSH_PORTS \
-d $ANYWHERE --dport 22 -j ACCEPT
$IPTABLES -A INPUT -i $EXT_INTERF -p tcp ! --syn \
-s $ANYWHERE --source-port 22 \
-d $EXT_IPADDR --dport $SSH_PORTS -j ACCEPT
# FTP (20, 21) - Обращение клиентов к удаленным FTP-серверам
# Исходящий запрос
$IPTABLES -A OUTPUT -o $EXT_INTERF -p tcp \
-s $EXT_IPADDR --source-port $UNPRIVPORTS \
-d $ANYWHERE --dport 21 -j ACCEPT
$IPTABLES -A INPUT -i $EXT_INTERF -p tcp ! --syn \
-s $ANYWHERE --source-port 21 \
-d $EXT_IPADDR --dport $UNPRIVPORTS -j ACCEPT
# Режим нормального канала данных (normal data channel port mode)
$IPTABLES -A INPUT -i $EXT_INTERF -p tcp \
-s $ANYWHERE --source-port 20\
-d $EXT_IPADDR --dport $UNPRIVPORTS -j ACCEPT
$IPTABLES -A OUTPUT -o $EXT_INTERF -p tcp ! --syn \
-s $EXT_IPADDR --source-port $UNPRIVPORTS \
-d $ANYWHERE --dport 20 -j ACCEPT
# Режим пассивного канала данных (passive data channel mode)
$IPTABLES -A OUTPUT -o $EXT_INTERF -p tcp \
-s $EXT_IPADDR --source-port $UNPRIVPORTS \
-d $ANYWHERE --dport $UNPRIVPORTS -j ACCEPT
$IPTABLES -A INPUT -i $EXT_INTERF -p tcp ! --syn \
-s $ANYWHERE --source-port $UNPRIVPORTS \
-d $EXT_IPADDR --dport $UNPRIVPORTS -j ACCEPT
###&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&##
# ВНУТРЕННИЕ СЕРВЕРА ДМЗ
# SMTP 1 Получение сообщений, предназначенных для локальных машин
$IPTABLES -A INPUT -i $EXT_INTERF -p tcp \
-s $ANYWHERE --source-port $UNPRIVPORTS \
-d $EXT_IPADDR --dport 25 -j ACCEPT
$IPTABLES -A OUTPUT -o $EXT_INTERF -p tcp ! --syn \
-s $EXT_IPADDR --source-port 25 \
-d $ANYWHERE --dport $UNPRIVPORTS -j ACCEPT
$IPTABLES -A OUTPUT -o $LAN_DMZ_INTERF -p tcp \
-s $ANYWHERE --source-port $UNPRIVPORTS \
-d $MAIL_IP --dport 25 -j ACCEPT
$IPTABLES -A INPUT -i $LAN_DMZ_INTERF -p tcp ! --syn \
-s $MAIL_IP --source-port 25 \
-d $ANYWHERE --dport $UNPRIVPORTS -j ACCEPT
# SMTP 2 Сервер ДМЗ посылает письма с локальных машин на удаленные узлы.
$IPTABLES -A INPUT -i $LAN_DMZ_INTERF -p tcp \
-s $MAIL_IP --source-port $UNPRIVPORTS \
-d $ANYWHERE --dport 25 -j ACCEPT
$IPTABLES -A OUTPUT -o $LAN_DMZ_INTERF -p tcp ! --syn \
-s $ANYWHERE --source-port 25 \
-d $MAIL_IP --dport $UNPRIVPORTS -j ACCEPT
$IPTABLES -A OUTPUT -o $EXT_INTERF -p tcp \
-s $EXT_IPADDR --source-port $UNPRIVPORTS \
-d $ANYWHERE --dport 25 -j ACCEPT
$IPTABLES -A INPUT -i $EXT_INTERF -p tcp --syn \
-s $ANYWHERE --source-port 25 \
-d $ANYWHERE --dport $UNPRIVPORTS -j ACCEPT
#------------------------------------------------------------------------------
# Цепочка перенаправления из ИНТЕРНЕТ в ДМЗ
# Конфигурация входящего и исходящего почтового сервера
$IPTABLES -t nat -A PREROUTING -p TCP -i $EXT_INTERF -d $EXT_IPADDR --dport 25 \
-j DNAT --to-destination $MAIL_IP
# ИЛИ ТАК, всеравно не работает
#$IPTABLES -t nat -A PREROUTING -p TCP -i $EXT_INTERF -d $EXT_IPADDR --dport #25 \
#-j DNAT --to-destination $MAIL_IP:25
$IPTABLES -t nat -A PREROUTING -p TCP -i $EXT_INTERF -d $EXT_IPADDR --dport 143 \
-j DNAT --to-destination $MAIL_IP
$IPTABLES -t nat -A PREROUTING -p TCP -i $EXT_INTERF -d $EXT_IPADDR --dport 110 \
-j DNAT --to-destination $MAIL_IP
# Конфигурация файлового сервера
$IPTABLES -t nat -A PREROUTING -p TCP -i $EXT_INTERF -d $EXT_IPADDR --dport 21 \
-j DNAT --to-destination $FTP_IP
$IPTABLES -t nat -A PREROUTING -p TCP -i $EXT_INTERF -d $EXT_IPADDR --dport 20 \
-j DNAT --to-destination $FTP_IP
# Цепочка NAT из ДМЗ в ИНТЕРНЕТ
$IPTABLES -t nat -A POSTROUTING -o $EXT_INTERF -j SNAT --to-source $EXT_IPADDR
#------------------------------------------------------------------------------
##############
# TRACEROUTE #
##############
$IPTABLES -A OUTPUT -o $EXT_INTERF -p udp \
-s $EXT_IPADDR --source-port 32769:65535 \
-d $ANYWHERE --dport 33434:33523 -j ACCEPT
# Цепочка FORWARD
#$IPTABLES -A FORWARD -i $LAN_DMZ_INTERF -j ACCEPT
#$IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A FORWARD -i $LAN_DMZ_INTERF -o $EXT_INTERF -j ACCEPT
$IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A FORWARD -p TCP -i $EXT_INTERF -o $LAN_DMZ_INTERF \
-d $MAIL_IP --dport 110 -j ACCEPT
$IPTABLES -A FORWARD -p TCP -i $EXT_INTERF -o $LAN_DMZ_INTERF \
-d $MAIL_IP --dport 143 -j ACCEPT
$IPTABLES -A FORWARD -p TCP -i $EXT_INTERF -o $LAN_DMZ_INTERF \
-d $MAIL_IP --dport 25 -j ACCEPT
# ИЛИ ТАК, всеравно не работает
#$IPTABLES -A FORWARD -p TCP -i $EXT_INTERF -o $LAN_DMZ_INTERF \
# -s $EXT_INTERF --sport 25 \
# -d $MAIL_IP --dport 25 -j ACCEPT
#
#------------------------------------------------------------------------------
echo "DONE!!!"
exit 0
БОЛЬШОЕ СПАСИБО ЗА ВАШЕ ВНИМАНИЕ
С уважением,
Ncskiber
Если нужно:
me mail: ncskiber@mail.ru