Добрый день.
В нашей организации настроен интернет шлюз на FreeBSD 8.2. На нем поднят natd + squid + sams и настроены правила для IPFW. Все замечательно работает, без нареканий.
Недавно появилась необходимость в открытии трех магических портов - 143,587 и 993. Для работы клиентов с почтой gmail по протоколу imap.
Как я только не извращался с правилами, никак не могу добиться открытия именно этих магических портов. Handbook читал уже и все еще перечитываю ее, но проблему никак решить не могу.
Конфигурация firewall
#!/bin/sh
FwCMD="/sbin/ipfw" # ipfw
LanOut="dc0" # внешний интерфейс
LanIn="rl0" # внутренний интерфейс
IpOut="xx.xx.xx.xx" # внешний IP адрес машины
IpIn="192.168.0.254" # внутренний IP машины
NetMask="24" # маска сети
NetIn="192.168.0.0" # Внутренняя сеть
# Сбрасываем все правила:
${FwCMD} -f flush
# Cоответствует ли пакет динамическим правилам:
${FwCMD} add check-state
# Разрешаем весь траффик по внутреннему интерфейсу:
${FwCMD} add allow ip from any to any via lo0
# Запрещаем попытки lo0 куда-то лезть и откуда-то лезть на lo0
${FwCMD} add deny ip from any to 127.0.0.0/8
${FwCMD} add deny ip from 127.0.0.0/8 to any
# Запрещаем частные сети на внешнем интерфейсе
${FwCMD} add deny ip from any to 10.0.0.0/8 in via ${LanOut}
${FwCMD} add deny ip from any to 172.16.0.0/12 in via ${LanOut}
${FwCMD} add deny ip from any to 192.168.0.0/16 in via ${LanOut}
${FwCMD} add deny ip from any to 0.0.0.0/8 in via ${LanOut}
# Запрещаем авто настраиваемую частную сеть
${FwCMD} add deny ip from any to 169.254.0.0/16 in via ${LanOut}
# Запрещаем широковещательные запросы
${FwCMD} add deny ip from any to 240.0.0.0/4 in via ${LanOut}
# Запрещаем фрагментированные icmp пакеты
${FwCMD} add deny icmp from any to any frag
# Запрещаем широковещательные icmp на внешнем интерфейсе
${FwCMD} add deny log icmp from any to 255.255.255.255 in via ${LanOut}
${FwCMD} add deny log icmp from any to 255.255.255.255 out via ${LanOut}
############# FIREWALL ##############
# Перенаправляем всех на frox
${FwCMD} add fwd ${IpIn},2121 tcp from ${NetIn}/${NetMask} to any 21 via ${LanOut}
# Перенаправляем всех на squid
${FwCMD} add fwd 127.0.0.1,3128 tcp from ${NetIn}/${NetMask} to any 80 via ${LanOut}
# Заворачиваем трафик в NAT
${FwCMD} add divert natd ip from ${NetIn}/${NetMask} to any out via ${LanOut}
${FwCMD} add divert natd ip from any to ${IpOut} in via ${LanOut}
# Запрещаем трафик к частным сетям через внешний интерфейс
${FwCMD} add deny ip from 10.0.0.0/8 to any out via ${LanOut}
${FwCMD} add deny ip from 172.16.0.0/12 to any out via ${LanOut}
${FwCMD} add deny ip from 192.168.0.0/16 to any out via ${LanOut}
${FwCMD} add deny ip from 0.0.0.0/8 to any out via ${LanOut}
# Запрещаем авто настраиваемую частную сеть
${FwCMD} add deny ip from 169.254.0.0/16 to any out via ${LanOut}
# Запрещаем широковещательные рассылки
${FwCMD} add deny ip from 224.0.0.0/4 to any out via ${LanOut}
# разрешаем все установленные соединения
${FwCMD} add allow tcp from any to any established
# разрешаем весь исходящий трафик
${FwCMD} add allow ip from ${IpOut} to any out xmit ${LanOut}
# разрешаем DNS снаружи
${FwCMD} add allow udp from any 53 to any via ${LanOut}
# разрешаем UDP (для синхронизации времени - 123 порт)
${FwCMD} add allow udp from any to any 123 via ${LanOut}
${FwCMD} add allow tcp from any to ${IpOut} 48152-65535 via ${LanOut}
#---------------Сканеры определения типа ОС ---------------#
${FwCMD} add deny log tcp from any to ${IpOut} in via ${LanOut} tcpflags syn,fin,!ack
${FwCMD} add deny log tcp from any to ${IpOut} in via ${LanOut} tcpflags syn,fin,urg,psh,!ack
${FwCMD} add deny log tcp from any to ${IpOut} in via ${LanOut} tcpflags fin,urg,psh,!ack
${FwCMD} add deny log tcp from any to ${IpOut} in via ${LanOut} tcpflags fin,!ack
${FwCMD} add deny log tcp from any to ${IpOut} in via ${LanOut} tcpflags urg,!ack
${FwCMD} add deny log tcp from any to ${IpOut} in via ${LanOut} tcpflags psh,!ack
#--------------------------from DOS atack---------------------------#
${FwCMD} add deny log tcp from any to any tcpoptions !mss tcpflags syn,!ack
#--------------------------------Закрываем--------------------------------#
#Закрываем снаружи 80 порт
${FwCMD} add deny tcp from any to ${IpOut} 80 via ${LanOut}
#Закрываем 445 порт снаружи
${FwCMD} add deny tcp from any to ${IpOut} 445 via ${LanOut}
# Закрываем 3306 порт MySQL
${FwCMD} add deny tcp from any to ${IpOut} 3306 via ${LanOut}
#-------------------------------------------------------------------------#
#--------------------------------Открываем--------------------------------#
# разрешаем некоторые типы ICMP трафика - эхо-запрос,
# эхо-ответ и время жизни пакета истекло
${FwCMD} add allow icmp from any to any icmptypes 0,8,11
# Открываем снаружи SSH 22 порт
${FwCMD} add allow tcp from any to ${IpOut} 22 via ${LanOut}
# открываем снаружи 25 порт (SMTP)
${FwCMD} add allow tcp from any to ${IpOut} 25 via ${LanOut}
# открываем снаружи 110 порт (POP)
${FwCMD} add allow tcp from any to ${IpOut} 110 via ${LanOut}
# gmail.com
${FwCMD} add allow udp from any to ${IpOut} 143 out via ${LanOut} keep-state
${FwCMD} add allow tcp from any to ${IpOut} 143 out via ${LanOut} keep-state
${FwCMD} add allow udp from any to ${IpOut} 143 in via ${LanIn} keep-state
${FwCMD} add allow tcp from any to ${IpOut} 143 in via ${LanIn} keep-state
# open 587 port for gmail.com
${FwCMD} add allow tcp from any to ${IpOut} 587 out via ${LanOut} keep-state
${FwCMD} add allow udp from any to ${IpOut} 587 out via ${LanOut} keep-state
${FwCMD} add allow tcp from any to ${IpOut} 587 in via ${LanOut} keep-state
${FwCMD} add allow udp from any to ${IpOut} 587 in via ${LanOut} keep-state
# open 993 poet for gmail.com
${FwCMD} add allow tcp from any to ${IpOut} 993 out via ${LanOut} keep-state
${FwCMD} add allow udp from any to ${IpOut} 993 out via ${LanOut} keep-state
${FwCMD} add allow tcp from any to ${IpOut} 993 in via ${LanOut} keep-state
${FwCMD} add allow udp from any to ${IpOut} 993 in via ${LanOut} keep-state
# open ftp port for
${FwCMD} add allow tcp from any to ${IpOut} 21 via ${LanOut}
${FwCMD} add allow tcp from any to 192.168.0.253 21 via ${LanOut}
# open pptp port for VPN connections
${FwCMD} add allow tcp from any to ${IpOut} 1723 via ${LanOut}
${FwCMD} add allow udp from any to ${IpOut} 1723 via ${LanOut}
# разрешаем весь tcp трафик внутри локалки (на внутреннем интерфейсе)
${FwCMD} add allow tcp from any to any via ${LanIn}
# разрешаем весь udp трафик внутри локалки (на внутреннем интерфейсе)
${FwCMD} add allow udp from any to any via ${LanIn}
# разрешаем весь icmp трафик внутри локалки (на внутреннем интерфейсе)
${FwCMD} add allow icmp from any to any via ${LanIn}
# NAT for local LAN
# ${FwCMD} add nat 1 ip from any to any via ${LanOut}
# запрещаем всё и всем.
# ${FwCMD} add deny ip from any to any
Хотелось бы услышать мнения и возможные пути решения. Может ссылка на литературу - но не так что, вот HandBook . Читай! ( хотя бы на статью какую нибудь)
Спасибо.
P.S.
Или может кто нибудь сталкивался с настройкой почтового клиента по imap через интернет шлюз с NAT + squid.
Буду признателен если поделитесь опытом.