Итак, добрались у меня руки и до фряхи. Естественно, файрволл на серваке нужен. Почитав немного информации из Google и lissyara.su настроил файрволл, но со своими поправками. Предлагаю здесь свой вариант настройки файрволла IPFW.
1. Конфигурирование ядра
Для использования IPFW надо пересобрать ядро системы, т.к. по умолчанию поддержка файрволла в ядре выключена. Все делается очень просто. Если у вас установлены исходные коды ядра FreeBSD, то можете пропустить следующий подраздел.
1.1. Установка исходного кода ядра
Вставьте установочный диск FreeBSD в привод и запустите sysinstall:
В появившемся меню выберите пункт
Configure, затем пункт
Distributions и наконец
src. Во вновь появившемся списке отметьте пункт
sys. Далее выходите из всех меню и дождитесь окончания установки, после чего закройте sysinstall. На этом установка исходников ядра завершена.
1.2. Конфигурация нового ядра
Теперь настало время включить поддержку IPFW в ядре. Переходим в папку с исходниками (на примере ядра для i386):
Код:
# cd /usr/src/sys/i386/conf
Скопируем старый конфиг в новый файл:
Код:
# cp GENERIC GENERIC_FW
Открываем новый файл конфига:
Исправляем в этом файле некоторые опции. У вас может быть другое содержание файла, я не увидел смысла приводить все опции и привел фактически только заголовок конфига, нужные опции выделены другим шрифтом:
Код:
cpu I486_CPU
cpu I586_CPU
cpu I686_CPU
ident GENERIC_FW
# To statically compile in device wiring instead of /boot/device.hints
#hints "GENERIC_FW.hints" # Default places to look for devices.
makeoptions DEBUG=-g # Build kernel with gdb(1) debug symbols
options SCHED_4BSD # 4BSD 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 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 [KEEP THIS!]
options COMPAT_FREEBSD4 # Compatible with FreeBSD4
options COMPAT_FREEBSD5 # Compatible with FreeBSD5
options COMPAT_FREEBSD6 # Compatible with FreeBSD6
options SCSI_DELAY=5000 # Delay (in ms) before probing SCSI
options KTRACE # ktrace(1) support
options SYSVSHM # SYSV-style shared memory
options SYSVMSG # SYSV-style message queues
options SYSVSEM # SYSV-style semaphores
options _KPOSIX_PRIORITY_SCHEDULING # POSIX P1003_1B real-time extensions
options KBD_INSTALL_CDEV # install a CDEV entry in /dev
options ADAPTIVE_GIANT # Giant mutex is adaptive.
options STOP_NMI # Stop CPUS using NMI instead of IPI
options AUDIT # Security event auditing
# Firewall options
options IPFIREWALL # файрволл
options IPFIREWALL_VERBOSE # включаем возможность лога пакетов
options IPFIREWALL_VERBOSE_LIMIT=5 # ограничение повторяющихся логов
options IPFIREWALL_FORWARD # подключаем возможность форвардинга
options IPDIVERT # подключаем возможности управления NAT'ом
options DUMMYNET # включаем управление сетевым трафиком
options IPFIREWALL_DEFAULT_TO_ACCEPT # политика файрволла по умолчанию - разрешать все
... # остальные опции
Обратите внимание на то, что все встречающиеся в файле строки GENERIC надо заменить на GENERIC_FW. Всё, сохраняем файл и выходим из редактора.
1.3. Сборка нового ядра
Теперь можно приступать к сборке ядра. Выходи на три каталога выше:
и собираем ядро:
Код:
# make buildkernel KERNCONF=GENERIC_FW && make installkernel KERNCONF=GENERIC_FW
Дождитесь окончания сборки и установки нового ядра а затем перезагрузитесь:
2. Конфигурация IPFW
Не буду вдаваться в основы написания правил IPFW; хотя это и относится к данной теме, но для этого лучше почитать специальную литературу, которой полно в гугле, в частности не мешало бы почитать основы функционирования сетей. Но сейчас не об этом
Напишем скрипт, через который можно полностью управлять нашим файрволлом. Пусть он будет лежать в
/usr/local/bin для простоты доступа. Итак, создаем сам файл скрипта (в моем примере это
/usr/local/bin/ipfwset):
Код:
#!/bin/sh
# нужные переменные
fw="/sbin/ipfw -q" # путь к исполняемому файлу IPFW; дополнительно отключаем вывод результатов выполнения команд
ip="192.168.1.4" # ip-адрес нашей машины
iface="vr0" # сетевой интерфейс
o_subnet="192.168.1.0/24" # указываем нашу подсеть
l_subnet="127.0.0.0/8" # указываем подсеть на локальнйо машине
# настройка интерфейса обратной петли
setup_loopback() {
${fw} add deny log all from any to ${l_subnet}
${fw} add deny log all from ${l_subnet} to any
${fw} add allow all from any to any via lo0
}
# разрешаем сервисы dns, icmp, ping...
setup_resolv() {
${fw} add allow icmp from any to any via ${iface}
${fw} add allow udp from any 53 to any via ${iface}
}
# функция настройки правил файрволла
start_fw() {
# системные настройки
${fw} -f flush # очищаем старые правила
${fw} add check-state # включаем контроль за флагами состояний пакетов
setup_loopback # настраиваем обратную петлю
${fw} add allow all from any to any established # разрешить использование установленных соединений
${fw} add allow all from me to any out # разрешить отправку пакетов с данного компьютера
setup_resolv # настраиваем системные сервисы
# дополнительная настройка сервисов
${fw} add allow tcp from any to ${ip} 21 via ${iface} # ftp
${fw} add allow tcp from any to ${ip} 49152-65535 via ${iface} # диапазон портов ftp для пассивного режима, узнается вот так: # sysctl net.inet.ip.portrange.first и # sysctl net.inet.ip.portrange.last
${fw} add allow tcp from any to ${ip} 22 via ${iface} # ssh
${fw} add allow tcp from any to ${ip} 80 via ${iface} # www
${fw} add allow udp from any 123 to ${ip} via ${iface} # ntp
${fw} add allow tcp from ${o_subnet} to ${ip} 137,138,139,445 # samba tcp
${fw} add allow udp from ${o_subnet} to ${ip} 137,138,139,445 # samba udp
${fw} add allow tcp from any 8245 to ${ip} via ${iface} # no-ip tcp
${fw} add allow udp from any 8245 to ${ip} via ${iface} # no-ip udp
${fw} add deny log all from any to any via ${iface} # закрываем другие порты
}
# вводим дополнительный функционал
case "$1" in
start) # старт файрволла
echo -n "Starting firewall: "
start_fw
if [ "$?" = 0 ]; then
echo "ok.";
else
echo "failed. Error code: $?.";
fi
;;
stop) # остановка файрволла
echo -n "Stopping firewall: "
${fw} -f flush
if [ "$?" = 0 ]; then
echo "ok.";
else
echo "failed. Error code: $?.";
fi
;;
restart) # перезапуск файрволла
echo -n "Restarting firewall: "
${fw} -f flush
start_fw
if [ "$?" = 0 ]; then
echo "ok.";
else
echo "failed. Error code: $?.";
fi
;;
list) # показать список правил
echo "Firewall rules:"
${fw} show
;;
*) # во всех других случаях...
echo "Usage: $0 start|stop|restart|list"
;;
esac
exit 0
3. Настройка автозапуска файрволла
Делаем наш скрипт исполнимым:
Код:
# chmod +x /usr/local/bin/ipfwset
и добавляем его в запуск при старте системы:
Перейдите в конец файла и перед строкой
exit 0 вставьте следующее:
Код:
/usr/local/bin/ipfwset start
Сохраняем файл и выходим.
Всё, наш файрволл настроен. Перезагружаемся и проверяем
P.S.: тем, кому лень что-либо писать, могут скачать скрипт из аттача