Найти в Дзене
ИТ разнообразно

Настройка ipfw для сервера FreeBSD

Подготовка Вносим правки в файл /etc/rc.conf для создаваемого файла с правилами ipfw. Добавляем следующие строки, если их нет: firewall_enable="YES"
firewall_type="/etc/rc.firewall"
firewall_logging="YES" Создание файла с правилами ipfw Создаём файл с правилами ipfw, и открываем его в редакторе: # touch /etc/rc.firewall # ee /etc/rc.firewall Добавляем следующие строки в начало файла: #!/bin/sh -
fwcmd="/sbin/ipfw -q " ext_if="em0" # интерфейс с внешним IP-адресом
ext_ip="192.168.0.10" # внешний IP-адрес сервера
ext_subnet="192.169.0.0/24" # подсеть внешнего интерфейса
ext_netmask="255.255.255.0" # маска подсети внешнего интерфейса
dns1="8.8.8.8" # Первый IPv4-адрес DNS-сервера Google
dns2="8.8.4.4" # Второй IPv4-адрес DNS-сервера Google
${fwcmd} -q -f flush
${fwcmd} -q add pass all from any to any via lo0
${fwcmd} -q add pass tcp from any to any established Здесь ${fwcmd} -q -f flush используется для очистки всех существующих правил, а ${fwcmd} -q add pass all from any to any via lo0
Оглавление

Подготовка

Вносим правки в файл /etc/rc.conf для создаваемого файла с правилами ipfw. Добавляем следующие строки, если их нет:

firewall_enable="YES"
firewall_type="/etc/rc.firewall"
firewall_logging="YES"

Создание файла с правилами ipfw

Создаём файл с правилами ipfw, и открываем его в редакторе:

# touch /etc/rc.firewall
# ee /etc/rc.firewall

Добавляем следующие строки в начало файла:

#!/bin/sh -
fwcmd="/sbin/ipfw -q "
ext_if="em0" # интерфейс с внешним IP-адресом
ext_ip="192.168.0.10" # внешний IP-адрес сервера
ext_subnet="192.169.0.0/24" # подсеть внешнего интерфейса
ext_netmask="255.255.255.0" # маска подсети внешнего интерфейса
dns1="8.8.8.8" # Первый IPv4-адрес DNS-сервера Google
dns2="8.8.4.4" # Второй IPv4-адрес DNS-сервера Google

${fwcmd} -q -f flush
${fwcmd} -q add pass all from any to any via lo0
${fwcmd} -q add pass tcp from any to any established

Здесь ${fwcmd} -q -f flush используется для очистки всех существующих правил, а ${fwcmd} -q add pass all from any to any via lo0 разрешает весь трафик на интерфейсе lo0. ${fwcmd} -q add pass tcp from any to any established разрешает установленные TCP-соединения. Переменные ext_if, ext_ip, ext_subnet, ext_netmask, dns1 и dns2 оставляем без изменений. Сохраняем и закрываем файл.

Добавление правил ipfw

Добавляем правила ipfw в файл /etc/rc.firewall:

# Разрешить входящий HTTP-трафик (порт 80)
${fwcmd} -q add allow tcp from any to $ext_ip 80 in via $ext_if

# Разрешить входящий SSH-трафик (порт 22)
${fwcmd} -q add allow tcp from any to $ext_ip 22 in via $ext_if

# Разрешить входящие ICMP-запросы (ping)
${fwcmd} -q add allow icmp from any to $ext_ip

# Разрешить исходящий DNS-трафик к серверам Google
${fwcmd} -q add allow udp from $ext_ip to $dns1 53 out via $ext_if
${fwcmd} -q add allow udp from $ext_ip to $dns2 53 out via $ext_if

Применение правил ipfw

Чтобы применить настроенные правила, выполняем следующую команду:

# /etc/rc.d/ipfw start

Проверка правил

После применения правил проверяем их работу. Пробуем подключиться к серверу по SSH с разрешённого IP-адреса, пробуем открыть веб-страницу сервера в браузере и пробуем попинговать наш сервер.

На этом всё.