RelaxДом

Быстрый поиск

Расширенный поиск

Авторизация

Запомнить? | Забыл пароль?
 
Register
Welcome
 
RelaxДом > Андеграунд > Операционные системы > Unix » Настройка файрволла IPFW в FreeBSD
Unix Обсуждение систем отличных от Windows

Ответ
Опции темы Опции просмотра
Непрочитано 28.04.2010, 19:53   #1
FreeSky Мужской

Аватар для FreeSky
 
Осваиваюсь
Регистрация: 11.06.2008
Адрес: /dev/sda2
Сообщений: 143
pm
По умолчанию Настройка файрволла IPFW в FreeBSD

Итак, добрались у меня руки и до фряхи. Естественно, файрволл на серваке нужен. Почитав немного информации из Google и lissyara.su настроил файрволл, но со своими поправками. Предлагаю здесь свой вариант настройки файрволла IPFW.

1. Конфигурирование ядра
Для использования IPFW надо пересобрать ядро системы, т.к. по умолчанию поддержка файрволла в ядре выключена. Все делается очень просто. Если у вас установлены исходные коды ядра FreeBSD, то можете пропустить следующий подраздел.

1.1. Установка исходного кода ядра
Вставьте установочный диск FreeBSD в привод и запустите sysinstall:
Код:
# sysinstall
В появившемся меню выберите пункт Configure, затем пункт Distributions и наконец src. Во вновь появившемся списке отметьте пункт sys. Далее выходите из всех меню и дождитесь окончания установки, после чего закройте sysinstall. На этом установка исходников ядра завершена.

1.2. Конфигурация нового ядра
Теперь настало время включить поддержку IPFW в ядре. Переходим в папку с исходниками (на примере ядра для i386):
Код:
# cd /usr/src/sys/i386/conf
Скопируем старый конфиг в новый файл:
Код:
# cp GENERIC GENERIC_FW
Открываем новый файл конфига:
Код:
# ee 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. Сборка нового ядра
Теперь можно приступать к сборке ядра. Выходи на три каталога выше:
Код:
# cd /usr/src
и собираем ядро:
Код:
# make buildkernel KERNCONF=GENERIC_FW && make installkernel KERNCONF=GENERIC_FW
Дождитесь окончания сборки и установки нового ядра а затем перезагрузитесь:
Код:
# shutdown -r now
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
и добавляем его в запуск при старте системы:
Код:
# ee /etc/rc
Перейдите в конец файла и перед строкой exit 0 вставьте следующее:
Код:
/usr/local/bin/ipfwset start
Сохраняем файл и выходим.

Всё, наш файрволл настроен. Перезагружаемся и проверяем
P.S.: тем, кому лень что-либо писать, могут скачать скрипт из аттача
Вложения
Тип файла: gz ipfwset.tar.gz (831 байт, 4 просмотров)
__________________
Я сделан из такого вещества,
Из двух неразрешимых столкновений,
Из ярких красок полных торжества,
Из черных подозрительных сомнений...

Последний раз редактировалось FreeSky; 28.04.2010 в 19:56.
FreeSky вне форума   Ответить с цитированием
 
Ответ


Здесь присутствуют: 3 (пользователей: 0 , гостей: 3)
 

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход