Блокировка IP-адресов с помощью ipfw
Я абсолютный новичок в ipfw, поэтому заранее прошу прощения, если мои вопросы являются базовыми, но я не нашел для этого никаких ресурсов, которые помогли бы преодолеть разрыв между использованием графического интерфейса пользователя и знанием командной строки ipfw действительно хорошо.
Я хотел бы заблокировать IP-адреса, которые неоднократно попадают на мой веб-сервер. Брандмауэр это ipfw. Я нашел эту команду:
ipfw добавить запрещающий ip из the.ip.to.block в my.computer.ip.address
Есть две вещи, которые мне неясны:
Я понимаю, что правило будет сброшено при перезагрузке. Я хотел бы знать, повлияет ли выполнение этой команды на существующие правила? Наверное, нет, но я бы хотел быть уверен.
Существует ли какое-либо программное обеспечение, которое связывается с 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
2 ответа
Правильные правила должны быть восстановлены после каждой перезагрузки. Это не будет напрямую влиять на другие правила, но может косвенно (например, если другое правило разрешает IP по какой-либо причине, это может заблокировать IP...)
Вы ищете когда-либо популярный 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