Страница 1 из 1

FreeBSD 8.1 Squid+Sams + IPFW

Добавлено: 2011-02-09 11:58:15
Sindikat88
Добрый день.
Был поднят прокси сервер Squid + Sams с авторизацией по NTLM
Потом решил настроить IPFW, пересобрал ядро, в /etc/rc.conf все прописал, переписал правила в /etc/rc.firewall
Вот, что имеем:

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

out# uname -a
FreeBSD out.ac-construction.local 8.1-RELEASE FreeBSD 8.1-RELEASE #0: Mon Feb  7 12:34:07 SAMT 2011     Admin@out.ac-construction.local:/usr/src/sys/amd64/compile/GENERIC  amd64
Вот рабочее ядро:

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

out# cat /usr/src/sys/amd64/conf/GENERIC

makeoptions     DEBUG=-g                # Build kernel with gdb(1) debug symbols

options         IPFIREWALL
options         IPFIREWALL_VERBOSE
options         IPFIREWALL_VERBOSE_LIMIT=10
options         IPDIVERT
options         IPFIREWALL_DEFAULT_TO_ACCEPT
options         DUMMYNET
options         SCHED_ULE               # ULE scheduler
options         PREEMPTION              # Enable kernel thread preemption
options         INET                    # InterNETworking
options         INET6                   # IPv6 communications protocols
options         SCTP                    # Stream Control Transmission Protocol
options         FFS                     # Berkeley Fast Filesystem
options         SOFTUPDATES             # Enable FFS soft updates support
options         UFS_ACL                 # Support for access control lists
options         UFS_DIRHASH             # Improve performance on big directories
options         UFS_GJOURNAL            # Enable gjournal-based UFS journaling
options         MD_ROOT                 # MD is a potential root device
options         NFSCLIENT               # Network Filesystem Client
options         NFSSERVER               # Network Filesystem Server
options         NFSLOCKD                # Network Lock Manager
options         NFS_ROOT                # NFS usable as /, requires NFSCLIENT
options         MSDOSFS                 # MSDOS Filesystem
options         CD9660                  # ISO 9660 Filesystem
options         PROCFS                  # Process filesystem (requires PSEUDOFS)
options         PSEUDOFS                # Pseudo-filesystem framework
options         GEOM_PART_GPT           # GUID Partition Tables.
options         GEOM_LABEL              # Provides labelization
options         COMPAT_43TTY            # BSD 4.3 TTY compat (sgtty)
options         COMPAT_FREEBSD32        # Compatible with i386 binaries
options         COMPAT_FREEBSD4         # Compatible with FreeBSD4
options         COMPAT_FREEBSD5         # Compatible with FreeBSD5
options         COMPAT_FREEBSD6         # Compatible with FreeBSD6
options         COMPAT_FREEBSD7         # Compatible with FreeBSD7
options         SCSI_DELAY=5000         # Delay (in ms) before probing SCSI
/etc/rc.conf

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

out# cat /etc/rc.conf

# -- sysinstall generated deltas -- # Wed Dec  1 11:49:28 2010
# Created: Wed Dec  1 11:49:28 2010
# Enable network daemons for user convenience.
# Please make all changes to this file, not to /etc/defaults/rc.conf.
# This file now contains just the overrides from /etc/defaults/rc.conf.
gateway_enable="YES"
keymap="ru.koi8-r"
sshd_enable="YES"
# -- sysinstall generated deltas -- # Wed Dec  1 11:07:55 2010
ifconfig_bge0="DHCP"
hostname="out.ac-construction.local"

samba_enable="YES"
apache_enable="YES"
squid_enable="YES"
mysql_enable="YES"
sams_enable="YES"
firewall_enable="YES"
firewall_quiet="YES"
firewall_type="/etc/rc.firewall"
firewall_flags="-p /bin/sh "
firewall_logging="YES"
dummynet_enable="YES"
natd_enable="YES"
natd_interface="bge1"
natd_flags="-same_ports"

# -- sysinstall generated deltas -- # Thu Feb  3 10:00:11 2011
ifconfig_bge1="inet 192.168.100.31  netmask 255.255.255.0"
defaultrouter="192.168.100.1"
hostname="out.ac-construction.local"
/etc/rc.firewall

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

out# cat /etc/rc.firewall
#!/bin/sh -
# для начала вводим переменные - для нашего же удобства, чтобы не
# вводить по сотне раз одно и то же, а потом искать почему не работает,
# и в итоге выяснять, что ошибся IP адресом в одном из правил

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

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

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




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

# Разрешаем весь траффик по внутреннему интерфейсу (петле)
# Вообще я во многих местах читал что без него может ничё не заработать вообще
# и прочие страшилки. Работает - почта, апач, .... А вот 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/24 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 192.168 out via ${LanOut}

# Отправляем всех на squid
${FwCMD} add fwd 127.0.0.1,3128 tcp from ${NetIn} to any 3128 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/24 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 allow tcp from any to ${IpOut} 25 in via ${LanOut}
# разрешаем почту
${FwCMD} add allow tcp from any to ${IpOut} 110 in via ${LanOut}

# разрешаем 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}


# Блокируем все остальные попытки соединения с занесением в логи
${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}


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

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

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

out# ipfw show
00100     0       0 allow ip from any to any via lo0
00200     0       0 deny ip from any to 127.0.0.0/8
00300     0       0 deny ip from 127.0.0.0/8 to any
00400     0       0 deny ip from 192.168.1.0/24 to any in via bge1
00500     0       0 deny ip from 192.168.100.0/24 to any in via bge0
00600     0       0 deny ip from any to 10.0.0.0/8 in via bge1
00700     0       0 deny ip from any to 172.16.0.0/12 in via bge1
00800     0       0 deny ip from any to 192.168.0.0/24 in via bge1
00900     0       0 deny ip from any to 0.0.0.0/8 in via bge1
01000     0       0 deny ip from any to 169.254.0.0/16 in via bge1
01100     0       0 deny ip from any to 224.0.0.0/4 in via bge1
01200     0       0 deny ip from any to 240.0.0.0/4 in via bge1
01300     0       0 deny icmp from any to any frag
01400  1004   48835 divert 8668 ip from 192.168.1.0/24 to any out via bge1
01500  1566  720629 divert 8668 ip from any to 192.168.100.31 in via bge1
01600     0       0 deny ip from 10.0.0.0/8 to any out via bge1
01700     0       0 deny ip from 172.16.0.0/12 to any out via bge1
01800     0       0 deny ip from 192.168.0.0/24 to any out via bge1
01900     0       0 deny ip from 0.0.0.0/8 to any out via bge1
02000     0       0 deny ip from 169.254.0.0/16 to any out via bge1
02100     0       0 deny ip from 224.0.0.0/4 to any out via bge1
02200     0       0 deny ip from 240.0.0.0/4 to any out via bge1
02300     0       0 allow icmp from any to any icmptypes 0,8,11
02400  5683  701815 allow ip from any to 192.168.1.0/24 in via bge0
02500  1208  342820 allow ip from 192.168.1.0/24 to any out via bge0
02600     0       0 allow udp from any to 192.168.100.31 dst-port 53 in via bge1
02700     0       0 allow udp from 192.168.100.31 53 to any out via bge1
02800     0       0 allow udp from any 53 to 192.168.100.31 in via bge1
02900     0       0 allow udp from 192.168.100.31 to any dst-port 53 out via bge1
03000     0       0 allow udp from any to any dst-port 123 via bge1
03100     0       0 allow tcp from any to 192.168.100.31 dst-port 53 in via bge1 setup
03200     0       0 allow tcp from any to 192.168.100.31 dst-port 25 in via bge1
03300     0       0 allow tcp from any to 192.168.100.31 dst-port 110 in via bge1
03400     0       0 allow tcp from any to 192.168.100.31 dst-port 22 in via bge1 setup
03500     0       0 deny log logamount 10 tcp from any to 192.168.100.31 in via bge1 setup
03600    37    1872 allow tcp from 192.168.100.31 to any out via bge1 setup
03700     0       0 allow tcp from any to 192.168.100.31 in via bge0 setup
03800     0       0 allow tcp from 192.168.1.0/24 to any dst-port 5190 in via bge0
65535 21892 7149878 allow ip from any to any
Итог: Если применено правило

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

${FwCMD} add deny ip from any to any
, то никуда не пускает, если же правило не применено, то пускает всюду.
Вопрос: как все таки ограничить всем выход в инет (то есть завернуть всех на Сквид), а оставить: почту (110; 25), SSH, ICQ, а все остальное закрыть?
Маны читал, все делал по ним, но что то не получется.

Re: FreeBSD 8.1 Squid+Sams + IPFW

Добавлено: 2011-02-11 15:18:51
Sindikat88
Ну с проблемой заворачивания на сквид, открытия протоколов я решил проблему так:

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

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

# Разрешаем весь траффик по внутреннему интерфейсу (петле)
# Вообще я во многих местах читал что без него может ничё не заработать вообще
# и прочие страшилки. Работает - почта, апач, .... А вот 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/24 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 192.168 out via ${LanOut}

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

# Делаем NAT (трансляцию сетевых адресов) всему, что не ушло на squid
${FwCMD} add divert natd tcp from ${NetIn} to any 110,25 via ${LanOut}
${FwCMD} add divert natd tcp from any 110,25 to ${IpOut} in via ${LanOut}

${FwCMD} add divert natd tcp from ${NetIn} to any 5190 via ${LanOut}
${FwCMD} add divert natd tcp from any 5190 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/24 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 allow tcp from any to ${IpOut} 25 in via ${LanOut}
# разрешаем почту
#${FwCMD} add allow tcp from any to ${IpOut} 110 in via ${LanOut}

# разрешаем 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}


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

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

Re: FreeBSD 8.1 Squid+Sams + IPFW

Добавлено: 2011-04-05 11:05:37
Sindikat88
Я конечно, понимаю, что туплю, но все таки, подскажите, как мне открыть доступ к Интернету одной машине с FreeBSD (имеет статический IP), эта машина расположена в локалке

Re: FreeBSD 8.1 Squid+Sams + IPFW

Добавлено: 2011-04-20 14:19:08
Sindikat88
Этой машине необходимо открыть доступ по NAT

Re: FreeBSD 8.1 Squid+Sams + IPFW

Добавлено: 2011-04-20 17:25:10
ADRE

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

${FwCMD} add divert natd tcp from тачка to any out via ${LanOut}
${FwCMD} add divert natd tcp from any to ${IpOut} in via ${LanOut}

Re: FreeBSD 8.1 Squid+Sams + IPFW

Добавлено: 2011-04-21 7:23:46
Sindikat88
ADRE писал(а):

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

${FwCMD} add divert natd tcp from тачка to any out via ${LanOut}
${FwCMD} add divert natd tcp from any to ${IpOut} in via ${LanOut}
Не работает. Пинги не идут

Re: FreeBSD 8.1 Squid+Sams + IPFW

Добавлено: 2011-04-21 7:35:15
hizel
посмотрите как сделан natd в handbook-е, подумайте

Re: FreeBSD 8.1 Squid+Sams + IPFW

Добавлено: 2011-04-21 8:01:50
Sindikat88
Посмотрел, подумал, офигел...
Это получается мне надо использовать redirect? Но зачем?

Re: FreeBSD 8.1 Squid+Sams + IPFW

Добавлено: 2011-04-21 8:17:37
hizel
какой редирект? оО

эм, я боле намекал на просмотр именно интеграции ipfw и natd, обратите внимание как расположены правила divert в примерах

Re: FreeBSD 8.1 Squid+Sams + IPFW

Добавлено: 2011-04-21 8:44:17
Sindikat88
Вот как сейчас они расположены:

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

${FwCMD} add allow tcp from any to 192.168.0.11
${FwCMD} add allow tcp from 192.168.0.11 to any
${FwCMD} add divert natd tcp from 192.168.0.11 to any  via ${LanOut}
${FwCMD} add divert natd tcp from any to ${IpOut} in via ${LanOut}

Re: FreeBSD 8.1 Squid+Sams + IPFW

Добавлено: 2011-04-22 10:21:01
Sindikat88
на всякий случай прилагаю ещё раз файл /etc/rc.firewall

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

#!/bin/sh -

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

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

LanIn="bge0"                   # внутренняя сетевуха
NetIn="192.168.0.0/23"        # Внутренняя сеть
ip_lan="192.168"            # Шаблон внутреннего адреса
                              




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

# Разрешаем весь траффик по внутреннему интерфейсу (петле)
${FwCMD} add 10 allow ip from any to any via lo0

# Вводим запреты:

# рубим попытки lo0 куда-то лезть и откуда-то лезть на lo0 
${FwCMD} add 11 deny ip from any to 127.0.0.0/8
${FwCMD} add 12 deny ip from 127.0.0.0/8 to any

# рубим пакеты `типа от внутренней сети, но на внешнем интерфейсе`
${FwCMD} add 13 deny ip from ${NetIn} to any in via ${LanOut}
# рубим пакеты `типа от внешней сети, но на внутреннем интерфейсе`
${FwCMD} add 14 deny ip from ${NetOut} to any in via ${LanIn}

# режем частные сети на внешнем интерфейсе - он у нас
# смотрит в интернет, а значит пакетам этим браться неоткуда на нём.
# рубим частные сeти
${FwCMD} add 15 deny ip from any to 10.0.0.0/8 in via ${LanOut}
${FwCMD} add 16 deny ip from any to 172.16.0.0/12 in via ${LanOut}
${FwCMD} add 17 deny ip from any to 192.168.0.0/24 in via ${LanOut}
${FwCMD} add 18 deny ip from any to 0.0.0.0/8 in via ${LanOut}
# рубим автоконфигуреную частную сеть
${FwCMD} add 19 deny ip from any to 169.254.0.0/16 in via ${LanOut}
# рубаем мультикастовые рассылки
${FwCMD} add 20 deny ip from any to 224.0.0.0/4 in via ${LanOut}
# рубаем мультикастовые рассылки
${FwCMD} add 21 deny ip from any to 240.0.0.0/4 in via ${LanOut}
# рубим фрагментированные icmp
${FwCMD} add 22 deny icmp from any to any frag
# рубим широковещательные icmp на внешнем интерфейсе
#${FwCMD} add 23 deny log icmp from any to 255.255.255.255 in via ${LanOut}
#${FwCMD} add 24 deny log icmp from any to 192.168 out via ${LanOut}

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

#Открываем почту
${FwCMD} add 25 divert natd tcp from ${NetIn} to any 110,25 via ${LanOut}
${FwCMD} add 26 divert natd tcp from any 110,25 to ${IpOut} in via ${LanOut}

#Пример открытия портов по IP
${FwCMD} add 27 allow tcp from any to 192.168.0.11
${FwCMD} add 28 allow tcp from 192.168.0.11 to any 
${FwCMD} add 29 divert natd tcp from 192.168.0.11 to any  via ${LanOut}
${FwCMD} add 30 divert natd tcp from any to ${IpOut} in via ${LanOut}

#Открытие RDP Казакову и Новикову
#${FwCMD} add 100 divert 8668 log ip from any to ${IpOut} in via ${LanOut}
#${FwCMD} add 101 divert 8668 log ip from ${IpOut} to any out via ${LanOut}

${FwCMD} add 31 divert natd tcp from 192.168.1.135 to any 3389 via ${LanOut}
${FwCMD} add 32 divert natd tcp from any 3389 to ${IpOut} in via ${LanOut}
${FwCMD} add 33 divert natd tcp from 192.168.1.187 to any 3389 via ${LanOut}
${FwCMD} add 34 divert natd tcp from any 3389 to ${IpOut} in via ${LanOut}

#Банк клиенты
${FwCMD} add 35 divert natd tcp from ${NetIn} to any 3290 via ${LanOut}
${FwCMD} add 36 divert natd tcp from any 3290 to ${IpOut} in via ${LanOut}
${FwCMD} add 37 divert natd udp from ${NetIn} to any 55777,2046,1024 via ${LanOut}
${FwCMD} add 38 divert natd udp from any 55777,2046,1024 to ${IpOut} in via ${LanOut}
${FwCMD} add 39 allow udp from any 55777,2046,1024 to ${NetIn} in via ${LanOut}
${FwCMD} add 40 allow udp from any 55777,2046,1024 to ${NetIn} out via ${LanIn}
${FwCMD} add 41 allow udp from ${NetIn} to any 55777,2046,1024 in via ${LanIn}
${FwCMD} add 42 allow udp from ${IpOut} to any 55777,2046,1024 out via ${LanOut}

#ICQ мне
#${FwCMD} add divert natd tcp from 192.168.1.25 to any 5190 via ${LanOut}
#${FwCMD} add divert natd tcp from any 5190 to ${IpOut} in via ${LanOut}

# рубим траффик к частным сетям через внешний интерфейс
# заметтьте - эти правила отличаются от тех что были выше!
${FwCMD} add 43 deny ip from 10.0.0.0/8 to any out via ${LanOut}
${FwCMD} add 44 deny ip from 172.16.0.0/12 to any out via ${LanOut}
${FwCMD} add 45 deny ip from 192.168.0.0/24 to any out via ${LanOut}
${FwCMD} add 46 deny ip from 0.0.0.0/8 to any out via ${LanOut}

# рубим автоконфигуреную частную сеть
${FwCMD} add 47 deny ip from 169.254.0.0/16 to any out via ${LanOut}

# рубаем мультикастовые рассылки
${FwCMD} add 48 deny ip from 224.0.0.0/4 to any out via ${LanOut}

# рубаем мультикастовые рассылки
${FwCMD} add 49 deny ip from 240.0.0.0/4 to any out via ${LanOut}

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

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

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

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

# DNS - 4 правила. (если на машине есть DNS сервер - иначе надо всего два)
${FwCMD} add 55 allow udp from any to ${IpOut} 53 in via ${LanOut}
${FwCMD} add 56 allow udp from ${IpOut} 53 to any out via ${LanOut}
#${FwCMD} add allow tcp from any to ${IpOut} 53 in via ${LanOut}
#${FwCMD} add allow udp from any to any 53
${FwCMD} add 57 divert natd udp from any to ${IpOut} 53 in via ${LanOut}
${FwCMD} add 58 divert natd udp from ${IpOut} 53 to any out via ${LanOut}
#DNS
#${FwCMD} add divert natd udp from any to any 53
#${FwCMD} add divert natd udp from any 53 to any
#${FwCMD} add divert natd udp from any 

# разрешаем UDP (для синхронизации времени - 123 порт)
${FwCMD} add 59 allow udp from any to any 123 via ${LanOut}
${FwCMD} add 60 divert natd udp from 192.168.0.11 to any 123 via ${LanOut}
${FwCMD} add 61 divert natd udp from any 123 to ${IpOut} in via ${LanOut}


# открываем RDP для нашего сервака
${FwCMD} add 62 allow tcp from any to 192.168.0.5 3389 via ${LanOut}
${FwCMD} add 63 divert natd tcp from any to 192.168.0.5 3389 via ${LanOut}
${FwCMD} add 64 allow tcp from any to ${IpOut} 3389 in via ${LanOut} setup
# разрешаем снаружи соединяться с 53 портом (TCP DNS)
${FwCMD} add 65 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 66 allow tcp from any to ${IpOut} 25 in via ${LanOut}
# разрешаем почту
${FwCMD} add 67 allow tcp from any to ${IpOut} 110 in via ${LanOut}

# разрешаем SSH
${FwCMD} add 68 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}

# Делаем NAT (трансляцию сетевых адресов) всему, что не ушло на squid
${FwCMD} add 69 divert natd ip from ${NetIn} to any out via ${LanOut}
${FwCMD} add 70 divert natd ip from any to ${IpOut} in via ${LanOut}

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

${FwCMD} add 72 allow tcp from ${IpOut} to any out via ${LanOut} setup
${FwCMD} add 73 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}


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

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

Re: FreeBSD 8.1 Squid+Sams + IPFW

Добавлено: 2011-04-22 22:07:16
Zohan
Выйди из каменного века и используй ядреный НАТ:

ipfw nat 123 config ip ${IpOut} log
ipfw add 10 nat 123 ip from 192.168.0.0/16 to any
ipfw add 20 nat 123 ip from any to ${IpOut}