Назад | Перейти на главную страницу

Блокировать IP-адреса с помощью ipfw

Я полный новичок в ipfw, поэтому приношу свои извинения заранее, если мои вопросы являются базовыми, но я не нашел для него никаких ресурсов, которые помогли бы с разрывом между использованием графического интерфейса и очень хорошим знанием командной строки ipfw.


Я хотел бы заблокировать IP-адреса, которые постоянно посещают мой веб-сервер. Межсетевой экран - ipfw. Я нашел эту команду:

ipfw добавить deny ip из.ip.to.block в my.computer.ip.address

Я не понимаю двух вещей:

  1. Я понимаю, что правило будет сброшено при перезапуске. Я хотел бы знать, повлияет ли выполнение этой команды на какие-либо существующие правила? Полагаю, что нет, но я бы хотел убедиться.

  2. Есть ли какое-либо программное обеспечение, которое связывается с ipfw, чтобы добавить ip на короткое время, а затем удалить их? Если нет, то скрою для него скрипт, а есть ли встроенный способ добавить из нескольких conf файлов? Было бы намного проще сделать это, если бы у меня был один файл со стабильными правилами, а другой загружаемый с динамическими.

Любая помощь приветствуется, даже RTFM, если вы можете дать ссылку на ресурс, который поможет мне немного лучше понять его.


Мои сценарии межсетевого экрана:

\#!/bin/sh

/usr/bin/sudo /sbin/ipfw -q flush
/usr/bin/sudo /sbin/ipfw -q delete set 31

/usr/bin/sudo /sbin/ipfw -q /usr/local/bin/Firewall/default.conf

#Check dynamic rules
#anything that's already had the
# green light can continue
add 1000 check-state

add 1050 allow tcp from any to any established

add 1080 allow tcp from any to any out keep-state

add 1090 allow udp from any to any out keep-state

add 1095 allow icmp from any to any out

#loopback
add 1100 allow ip from 127.0.0.1/8 to 127.0.0.1/8 via lo0

add 1200 deny log ip from 127.0.0.1/8 to any in
add 1300 deny log ip from any to 127.0.0.1/8 in

#allow pings and traceroute
# Ping out; accept ping answers.
add 1400 allow icmp from any to any icmptypes 8 out
add 1410 allow icmp from any to any icmptypes 0 in

# Allow me to traceroute.
add 1420 allow icmp from any to any icmptypes 11 in

add 1500 allow tcp from any to any 11305 keep-state setup

#http and https
add 1600 allow tcp from any to any 80 keep-state setup

# rules for reverse proxying
add 1610 allow tcp from me to any 4567 keep-state setup
add 1611 allow tcp from me to any 4568 keep-state setup
add 1612 allow tcp from me to any 4569 keep-state setup

add 1620 allow tcp from me to any 4577 keep-state setup
add 1621 allow tcp from me to any 4578 keep-state setup
add 1622 allow tcp from me to any 4579 keep-state setup
add 1630 allow tcp from me to any 4560 keep-state setup
add 1631 allow tcp from me to any 4561 keep-state setup
add 1632 allow tcp from me to any 4562 keep-state setup
add 1640 allow tcp from me to any 4570 keep-state setup
add 1641 allow tcp from me to any 4571 keep-state setup
add 1642 allow tcp from me to any 4572 keep-state setup


add 1700 allow tcp from any to any 443 keep-state setup

#Bonjour
#add 2000 allow udp from any to any 5653 keep-state setup

#Everything that isn't in a prior rule 

add 65533 reject log udp from any to any in

add 65534 deny log ip from any to any in
  1. При каждой перезагрузке необходимо восстанавливать правильные правила. Это не повлияет напрямую на другие правила, но может косвенно (например, если другое правило разрешает IP по какой-либо причине, это может заблокировать IP ...)

  2. Вы ищете неизменно популярный fail2ban, который читает файлы журналов и блокирует IP-адреса людей, которые делают «плохие» вещи.

Кроме того, вы действительно не хотите слишком добавлять правила для каждого отдельного запрета, это быстро испортит правила. Однако вы можете добавить правило для блокировки таблицы, а затем добавить IP-адреса в таблицу. Таблица - это просто список IP-адресов, поэтому вы можете легко применить правила ко всей таблице, а не указывать их все по отдельности.

Например, у меня есть скрипт брандмауэра по умолчанию, который я использую, первые два правила в этом скрипте:

00030 deny ip from "table(1)" to me
00031 deny ip from "table(2)" to me

Ключевое слово «я» означает любой из моих локальных IP-адресов. Таблица 1 предназначена для Fail2Ban, когда он находит IP, который ему не нравится, он на некоторое время добавляет IP в эту таблицу. Таблица 2 представляет собой список DROP от Spamhaus, список известных профессиональных спам-систем (подробности см. На их веб-сайтах).

Вы можете добавить IP-адреса в таблицу вручную с помощью этой команды:

ipfw table 2 add

На моих серверах таблица 2 заполняется автоматически при запуске скриптом. /usr/local/etc/rc.d/spamhaus-drop следующим образом:

#!/bin/csh
fetch -i /tmp/drop.lasso -o /tmp/drop.lasso "http://www.spamhaus.org/drop/drop.lasso"
sed -i '' "s/;.*//" /tmp/drop.lasso
ipfw table 2 flush
foreach IP ( `cat /tmp/drop.lasso` )
        ipfw table 2 add $IP
end

Я настоятельно рекомендую вам написать собственный сценарий для настройки брандмауэра. Во FreeBSD это довольно просто с ipfw, и я бы не стал возиться с графическим интерфейсом (я знаю, что это звучит сложно, когда он совсем новый, но основы проще, чем вы думаете).

Мой сценарий конфигурации находится в /etc/ipfw.rules и выглядит так:

#!/bin/sh

#FOR KEAIRA  - The computer this script was customized for.

ipfw -q -f flush       # Delete all rules
cmd="ipfw add"

# Ban tables
$cmd 00030 deny ip from "table(1)" to me
$cmd 00031 deny ip from "table(2)" to me

# Statefull firewall config, more secure
$cmd 00060 check-state

# Allow outbound traffic
$cmd 00130 allow ip from me to any keep-state

# SSH - I have SSH on port 2222 to keep the script kiddies out.
$cmd 11020 allow tcp from any to me dst-port 2222 setup keep-state

# DNS
$cmd 11090 allow tcp from any to me domain setup keep-state
$cmd 11092 allow udp from any to me domain

# NTP
$cmd 11100 allow tcp from any to me ntp setup keep-state
$cmd 11101 allow udp from any to me ntp

# General Network - ICMP & IGMP
$cmd 61001 allow icmp from any to any
$cmd 61002 allow igmp from any to any

# Deny the rest
$cmd 65500 deny ip from any to any

На этом сервере работают SSH (на альтернативном порту), DNS и NTP (время). Остальное - это просто общий материал, который я вставляю во все сценарии брандмауэра. Если у вас есть другие службы, которые вам нужно открыть, просто дайте мне знать, и я настрою пример. Большинство названий сервисов, которые вы можете получить от /etc/services хотя, что делает их очень легкими. Строго говоря, не обязательно иметь разные номера для каждого правила, но это упрощает управление ими. Правила обрабатываются по порядку номеров, но в остальном числа не имеют значения.

Этот сценарий "активируется" путем помещения этих строк в /etc/rc.conf

firewall_enable="YES"                   # Firewall On
firewall_script="/etc/ipfw.rules"       # Firewall Script

Настройка Fail2Ban - это немного сложнее, но это тоже довольно просто. Если вам нужны подробности об этом, просто спросите.

Любая помощь приветствуется, даже RTFM, если вы можете дать ссылку на ресурс, который поможет мне немного лучше понять его.

Вот: handbook / firewalls.html