ipfw и почта

Проблемы установки, настройки и работы Правильной Операционной Системы

Модератор: terminus

Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
GreenDay
мл. сержант
Сообщения: 100
Зарегистрирован: 2008-02-21 20:25:39
Откуда: Новосибирск
Контактная информация:

ipfw и почта

Непрочитанное сообщение GreenDay » 2008-04-21 6:06:27

Доброго времени суток!
вот странная какая то вещь приключилась. Запустил еще один серв с FreeBSD 7. Как обычно все что нужно для роутера. Не могу справиться с почтой. Нужно чтобы клиенты почтовые нормально получали отправляли почту. Почта не моя, просто перебрасывать соединения должно пока.
На другом сервере уже этот набор правил успешно работает(правда там FreeBSD 6.2), здесь никак не хочет соединять клиентов с почтовыми серверами. Интернет точно есть, все остальное работает как надо.
Набор правил такой

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

#!/bin/sh
#sysctl net.inet.ip.fw.one_pass=0
/sbin/ipfw -q -f flush

local_if="em1"
local_net="192.168.0.0/24"
local_ip="192.168.0.5"
inet_ip="81.1.214.144"
inet_mask="255.255.255.0"
cmd="ipfw -q add"
skip="skipto 3500"
pif="em0"

#################################################################
# No restrictions on Inside LAN Interface for private network
# Change xl0 to your LAN NIC interface name
#################################################################
$cmd 100 allow all from any to any via ${local_if}
$cmd 200 allow tcp from ${local_net} to me 80 in recv ${local_if}
$cmd 300 allow tcp from me 80 to ${local_net} out xmit ${local_if}

#################################################################
# No restrictions on Loopback Interface
#################################################################
$cmd 400 allow all from any to any via lo0

$cmd 450 deny tcp from any to me dst-port 3128 in recv $pif
$cmd 451 fwd ${local_ip},8080 tcp from ${local_net} to any dst-port 80
$cmd 452 fwd ${local_ip},2121 tcp from ${local_net} to any dst-port 21

#################################################################
# check if packet is inbound and nat address if it is
#################################################################
$cmd 500 divert natd ip from any to any in via $pif

#################################################################
# Allow the packet through if it has previous been added to the
# the "dynamic" rules table by a allow keep-state statement.
#################################################################
$cmd 600 check-state

# Allow out access to my ISP's Domain name server.
# x.x.x.x must be the IP address of your ISP's DNS
# Dup these lines if your ISP has more than one DNS server
# Get the IP addresses from /etc/resolv.conf file
$cmd 700 $skip tcp from any to 81.1.214.158 53 out via $pif setup keep-state
$cmd 800 $skip tcp from any to 80.89.128.5 53 out via $pif setup keep-state

# Allow out non-secure standard www function
$cmd 900 $skip tcp from any to any 80 out via $pif setup keep-state

$cmd 950 $skip tcp from any to any 20,21 out via $pif setup keep-state
# Allow out secure www function https over TLS SSL
$cmd 1000 $skip tcp from any to any 443 out via $pif setup keep-state

# Allow out send & get email function
$cmd 1200 $skip tcp from any to any 25 out via $pif setup keep-state
$cmd 1300 $skip tcp from any to any 110 out via $pif setup keep-state
$cmd 1310 $skip tcp from any to any 587 out via $pif setup keep-state
$cmd 1320 $skip tcp from any to any 995 out via $pif setup keep-state

#Allow uot icq
$cmd 1400 $skip tcp from any to any 5190 out via $pif setup keep-state

# Allow out FreeBSD (make install & CVSUP) functions
# Basically give user root "GOD" privileges.
$cmd 1500 $skip tcp from me to any out via $pif setup keep-state uid root

# Allow out ping
$cmd 1600 $skip icmp from any to any out via $pif keep-state

# Allow out Time
$cmd 1700 $skip tcp from any to any 37 out via $pif setup keep-state

# Allow out secure FTP, Telnet, and SCP
# This function is using SSH (secure shell)
$cmd 1800 $skip tcp from any to any 22 out via $pif setup keep-state

# Allow out whois
$cmd 1900 $skip tcp from any to any 43 out via $pif setup keep-state

# Allow ntp time server
$cmd 2000 $skip udp from any to any 123 out via $pif keep-state

# Deny all inbound traffic from non-routable reserved address spaces
$cmd 2100 deny all from 192.168.0.0/16  to any in via $pif  #RFC 1918 private IP
$cmd 2101 deny all from 172.16.0.0/12   to any in via $pif  #RFC 1918 private IP
$cmd 2102 deny all from 10.0.0.0/8      to any in via $pif  #RFC 1918 private IP
$cmd 2003 deny all from 127.0.0.0/8     to any in via $pif  #loopback
$cmd 2004 deny all from 0.0.0.0/8       to any in via $pif  #loopback
$cmd 2005 deny all from 169.254.0.0/16  to any in via $pif  #DHCP auto-config
$cmd 2006 deny all from 192.0.2.0/24    to any in via $pif  #reserved for docs
$cmd 2007 deny all from 204.152.64.0/23 to any in via $pif  #Sun cluster
$cmd 2008 deny all from 224.0.0.0/3     to any in via $pif  #Class D & E multicast

# Deny any late arriving packets
$cmd 2100 deny all from any to any frag in via $pif

# Deny ACK packets that did not match the dynamic rule table
$cmd 2300 deny tcp from any to any established in via $pif

# Allow in standard www function because I have Apache server
$cmd 2400 allow tcp from any to me 80 in via $pif setup limit src-addr 2
$cmd 2500 allow tcp from any to me 80 in via ${local_if}

# Allow in secure FTP, Telnet, and SCP from public Internet
$cmd 2600 allow tcp from any to me 22 in via $pif setup limit src-addr 2

$cmd 2700 allow udp from any to me dst-port 53
$cmd 2800 allow udp from me to any dst-port 53

# Reject & Log all unauthorized incoming connections from the public Internet
$cmd 2900 deny log all from any to any in via $pif

# Reject & Log all unauthorized out going connections to the public Internet
$cmd 3000 deny log all from any to any out via $pif

# This is skipto location for outbound stateful rules
$cmd 3500 divert natd ip from any to any out via $pif
$cmd 3600 allow ip from any to any

# Everything else is denied by default
# deny and log all packets that fell through to see what they are
$cmd 10000 deny log all from any to any
################ End of IPFW rules file ###############################
уже даже попробовал другой набор правил, тоже все работает кроме почты :(

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

#!/bin/sh

# для начала вводим переменные - для нашего же удобства, чтобы не
# вводить по сотне раз одно и то же, а потом искать почему не работает,
# и в итоге выяснять, что ошибся IP адресом в одном из правил

FwCMD="/sbin/ipfw"            # бинарник IPFW

LanOut="em0"                  # Внешняя сетевуха
NetOut="81.1.214.144/24"   # внешняя сеть
IpOut="81.1.214.144"       # Внешний IP

LanIn="em1"                   # внутренняя сетевуха
NetIn="192.168.0.0/24"        # Внутренняя сеть
ip_lan="192.168.0"            # Шаблон внутреннего адреса
                              # нужен для ввода разрешений на инет

# сбрасываем все правила
${FwCMD} -f flush
# сбрасываем все pipe
${FwCMD} -f pipe flush
# сбрасываем очереди
${FwCMD} -f queue flush

# Не знаю, пригодится ли кому это - по ночам охрана повадилась шариться в инете
# и качать музончик, порнушку смотреть... 3 гига трафика за ночь... Поэтому ночью
# траффик ограничиваем (скорость) - причём жестоко режем :)
# для этого в конфиге ядра должна быть строка
# options         DUMMYNET
# соответственно в crontab надо добавить запись типа sh /etc/rc.firewall
# с запуском в 22.01 и 8.01 :)))
# Также не забудте поставить в sysctl переменную net.inet.ip.fw.one_pass в 0,
# иначе все пакеты будут выпадать из файрволла после трубы - а это дыра.
chour=`date '+%H'`
if [ ${chour} -lt 8 ]; then
    ${FwCMD} add pipe 1 ip from not ${NetIn} to ${NetIn}
    ${FwCMD} pipe 1 config bw 33600 bit/s
fi
if [ ${chour} -ge 22 ]; then
    ${FwCMD} add pipe 1 ip from not ${NetIn} to ${NetIn}
    ${FwCMD} pipe 1 config bw 33600 bit/s
fi

# Разрешаем весь траффик по внутреннему интерфейсу (петле)
# Вообще я во многих местах читал что без него может ничё не заработать вообще
# и прочие страшилки. Работает - почта, апач, .... А вот squid - не работает :)
# так что без него и правда - никуда.
${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 ${NetIn} to any in via ${LanOut}
# рубим пакеты `типа от внешней сети, но на внутреннем интерфейсе`
${FwCMD} add deny ip from ${NetOut} to any in via ${LanIn}

# режем частные сети на внешнем интерфейсе - по легенде он у нас
# смотрит в интернет, а значит пакетам этим браться неоткуда на нём.
# рубим частные сeти
${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 224.0.0.0/4 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}

# Отправляем всех на squid
#${FwCMD} add fwd 127.0.0.1,3128 tcp from ${NetIn} to any 80 via ${LanOut}

# Делаем NAT (трансляцию сетевых адресов) всему, что не ушло на squid
${FwCMD} add divert natd ip from ${NetIn} 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 deny ip from 240.0.0.0/4 to any out via ${LanOut}

# разрешаем некоторые типы ICMP траффика - эхо-запрос,
# эхо-ответ и время жизни пакета истекло
${FwCMD} add allow icmp from any to any icmptypes 0,8,11

# Разрешаем траффик внутренней сети на внутреннем интерфейсе (входящий)
${FwCMD} add allow ip from any to ${NetIn} in via ${LanIn}
# Разрешаем траффик внутренней сети на внутреннем интерфейсе (исходящий)
${FwCMD} add allow ip from ${NetIn} to any out via ${LanIn}

# разрешаем tcp-пакеты по уже установленным соединениям
${FwCMD} add allow tcp from any to any established

# DNS - 4 правила. (если на машине есть DNS сервер - иначе надо всего два)
${FwCMD} add allow udp from any to ${IpOut} 53 in via ${LanOut}
${FwCMD} add allow udp from ${IpOut} 53 to any out via ${LanOut}
${FwCMD} add allow udp from any 53 to ${IpOut} in via ${LanOut}
${FwCMD} add allow udp from ${IpOut} to any 53 out via ${LanOut}
# разрешаем UDP (для синхронизации времени - 123 порт)
${FwCMD} add allow udp from any to any 123 via ${LanOut}

# разрешаем снаружи соединяться с 53 портом (TCP DNS)
#${FwCMD} add allow tcp from any to ${IpOut} 53 in via ${LanOut} setup
# открываем снаружи 80 порт - если у нас есть WWW сервер на машине
#${FwCMD} add allow tcp from any to ${IpOut} 80 in via ${LanOut} setup
# открываем снаружи 20,21 порт - для активного FTP
${FwCMD} add allow tcp from any to ${IpOut} 20,21 in via ${LanOut} setup
# разрешаем входящую почту
${FwCMD} add pass tcp from any to any 25,110 via ${LanOut}
${FwCMD} add pass tcp from any 25,110 to any via ${LanOut}
#${FwCMD} add allow tcp from any to ${IpOut} 25 in via ${LanOut} setup
# разрешаем SSH
${FwCMD} add allow tcp from any to ${IpOut} 22 in via ${LanOut} setup
# открываем снаружи 20,21 порт - для активного FTP
${FwCMD} add allow tcp from any to ${IpOut} 20,21 in via ${LanOut} setup
# пассивный FTP
# для узнавания портранджа по которому будет работать, лезем в
# /usr/home/lissyara/>sysctl net.inet.ip.portrange.first
# net.inet.ip.portrange.first: 49152
# /usr/home/lissyara/>sysctl net.inet.ip.portrange.last
# net.inet.ip.portrange.last: 65535
# Можно изгалиться примерно так, если есть желание, но я предпочитаю руками
#${FwCMD} add allow tcp from any to ${IpOut} \
#`sysctl net.inet.ip.portrange.first | awk '{print $2}'`-\
#`sysctl net.inet.ip.portrange.last | awk '{print $2}'` via ${LanOut}
${FwCMD} add allow tcp from any to ${IpOut} 49152-65535 via ${LanOut}


# COUNTER-STRIKE (без комментариев :))
${FwCMD} add allow udp from any 27015-27025 to ${NetIn} in via ${LanOut}
${FwCMD} add allow udp from any 27015-27025 to ${NetIn} out via ${LanIn}
${FwCMD} add allow udp from ${NetIn} to any 27015-27025 in via ${LanIn}
${FwCMD} add allow udp from ${IpOut} to any 27015-27025 out via ${LanOut}

# Блокируем все остальные попытки соединения с занесением в логи
${FwCMD} add deny log tcp from any to ${IpOut} in via ${LanOut} setup

${FwCMD} add allow tcp from ${IpOut} to any out via ${LanOut} setup
${FwCMD} add allow tcp from any to ${IpOut} in via ${LanIn} setup

########### BEGIN USERS   ###############################

# Разрешаем всем аську (ICQ)
${FwCMD} add allow tcp from ${NetIn} to any 5190 in via ${LanIn} setup

# Пользователи которым разрешён инет
${FwCMD} add allow tcp from ${NetIn} to any in via ${LanIn} setup
#${FwCMD} add allow tcp from ${ip_lan}.153 to not ${NetIn} in via ${LanIn} setup
#${FwCMD} add allow tcp from ${ip_lan}.154 to not ${NetIn} in via ${LanIn} setup

############# END USERS #################################

# запрещаем всё и всем. Если тип файрволла не open то это правило добавится
# автоматически, но всё-же ну его. Лучше сам. Надёжней.
${FwCMD} add deny ip from any to any
ну это уже отсюда взято.. помогите разобраться срочно! :(

поправка. работает только через сквид, напрямую не натиться вообще ничего, даже аська
Бесполезно рассказывать о высоком моральном облике коллектива человеку, имеющему доступ к логам прокси-сервера этого коллектива.

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
hizel
дядя поня
Сообщения: 9032
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

Re: ipfw и почта

Непрочитанное сообщение hizel » 2008-04-21 8:49:37

тоесть получается natd не работает?
он запущен?
вы бы всетаки ipfw show показыли бы :/
и sockstat заодной
и ps auxww тоже не мешало бы %)
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.

Аватара пользователя
GreenDay
мл. сержант
Сообщения: 100
Зарегистрирован: 2008-02-21 20:25:39
Откуда: Новосибирск
Контактная информация:

Re: ipfw и почта

Непрочитанное сообщение GreenDay » 2008-04-21 9:21:15

да все решил.. кривые ручки
в bind поправить забыл listen-on
у меня раньше у серва просто ip другой был, он 127.0.0.1 нормально слушал, а внутренний интерфейс не слушал.. щас все ок
Бесполезно рассказывать о высоком моральном облике коллектива человеку, имеющему доступ к логам прокси-сервера этого коллектива.

Аватара пользователя
ce-zar
ефрейтор
Сообщения: 60
Зарегистрирован: 2008-04-03 15:37:09
Откуда: Санкт-Петербург

Re: ipfw и почта

Непрочитанное сообщение ce-zar » 2008-04-21 15:01:18

GreenDay писал(а):да все решил.. кривые ручки
в bind поправить забыл listen-on
у меня раньше у серва просто ip другой был, он 127.0.0.1 нормально слушал, а внутренний интерфейс не слушал.. щас все ок
Извините, а что именно подправили, я так понимаю в /etc/namedb/named.conf ?
Ни фига не пойму...

Аватара пользователя
GreenDay
мл. сержант
Сообщения: 100
Зарегистрирован: 2008-02-21 20:25:39
Откуда: Новосибирск
Контактная информация:

Re: ipfw и почта

Непрочитанное сообщение GreenDay » 2008-04-22 8:04:27

да, в нем подправил опшинс listen-on
у меня ip интерфейса локальной сети там стоял неправильный, вот бинд и не слушал запросы с сети
сквид работает сам и без этого, поэтому с ним проблем не было
Бесполезно рассказывать о высоком моральном облике коллектива человеку, имеющему доступ к логам прокси-сервера этого коллектива.