Был поднят прокси сервер 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
Код: Выделить всё
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"
Код: Выделить всё
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, а все остальное закрыть?
Маны читал, все делал по ним, но что то не получется.