Bloquear endereços IP com ipfw

1

Eu sou um noob total para ipfw então minhas desculpas antecipadamente se minhas perguntas são básicas, mas eu não encontrei nenhum recurso para isso que ajude com a lacuna entre usar a GUI e conhecer a linha de comando ipfw muito bem. / p>

Gostaria de bloquear os ips que estão acessando meu servidor da web repetidamente. O firewall é ipfw. Eu encontrei este comando:

ipfw add deny ip from the.ip.to.block to my.computer.ip.address

Há duas coisas sobre as quais não tenho certeza:

  1. Eu entendo que a regra será liberada no reinício. O que eu gostaria de saber é que a execução desse comando afetará as regras existentes em execução? Eu estou supondo que não, mas eu gostaria de ter certeza.

  2. Existe algum software que interaja com o ipfw para adicionar ip's por um curto período de tempo e depois removê-los? Se não, vou criar um script para ele, mas existe uma maneira interna de adicionar vários arquivos conf? Isso tornaria muito mais fácil fazer se eu pudesse ter um arquivo com as regras estáveis e outro que carregasse com os dinâmicos.

Qualquer ajuda é muito apreciada, mesmo RTFM se você pode dar um link para um recurso que me ajude a entender um pouco melhor.

Meus scripts de firewall:

\#!/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
    
por Iain 30.04.2011 / 17:12

2 respostas

4
  1. Regras corretas precisam ser restabelecidas a cada reinicialização. Ele não afetará diretamente outras regras, mas pode indiretamente (por exemplo, se outra regra permitir o IP por qualquer motivo, isso pode bloquear o IP ...)

  2. Você está procurando o sempre popular fail2ban, que lê arquivos de logs e proíbe IPs de pessoas fazendo coisas "ruins".

Além disso, você também não quer continuar adicionando regras para cada banimento individual, isso poluirá rapidamente as regras. Você pode adicionar uma regra para bloquear uma tabela e adicionar os IPs à tabela. Uma tabela é apenas uma lista de IPs para que você possa aplicar facilmente regras a toda a tabela, em vez de especificá-las individualmente.

Por exemplo, eu tenho um script de firewall 'padrão' que eu uso, as duas primeiras regras neste script são:

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

A palavra-chave "eu" significa qualquer um dos meus endereços IP locais. A Tabela 1 é para o Fail2Ban, quando encontra um IP que não gosta, adiciona o IP a essa tabela por algum tempo. A Tabela 2 é para a lista DROP da Spamhaus, uma lista de sistemas de spam profissionais conhecidos (consulte o website deles para obter detalhes).

Você pode adicionar IPs a uma tabela manualmente com este comando:

ipfw table 2 add

Em meus servidores A Tabela 2 é preenchida automaticamente na inicialização por um script /usr/local/etc/rc.d/spamhaus-drop da seguinte forma:

#!/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

É altamente recomendável que você escreva seu próprio script para configurar seu firewall. É muito fácil no FreeBSD com o ipfw, e eu não me incomodaria com uma GUI (eu sei que soa difícil quando tudo é novo, mas o básico é mais fácil do que você pensa).

Meu script de configuração está em /etc/ipfw.rules e é assim:

#!/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

Este servidor está executando o SSH (em uma porta alternativa), DNS e NTP (hora). O resto é apenas material genérico que eu coloquei em todos os meus scripts de firewall. Se você tiver outros serviços que precisa abrir, é só me avisar e personalizarei o exemplo. A maioria dos nomes de serviço que você pode obter de /etc/services , torna a gravação muito fácil. Não é estritamente necessário que cada regra tenha um número diferente, mas facilita o gerenciamento deles. As regras são processadas em ordem pelo número, mas por outro lado não há significado para os números.

Este script é "ativado" colocando essas linhas em /etc/rc.conf

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

Configurar o Fail2Ban é um pouco mais trabalhoso, mas é bastante simples também. Se você quiser mais detalhes sobre isso, é só pedir.

    
por 30.04.2011 / 17:31
1

Any help is much appreciated, even RTFM's if you can give a link to a resource that helps me understand it a bit better.

Aqui está: manual / firewalls.html

    
por 30.04.2011 / 18:13

Tags