web-dev-qa-db-ja.com

ipfwでIPアドレスをブロックする

私はipfwに完全に慣れていないので、質問が基本的なものである場合は事前に謝罪しますが、GUIの使用とコマンドラインipfwの知識のギャップに役立つリソースは見つかりませんでした。


Webサーバーに繰り返しアクセスしているIPをブロックしたいのですが。ファイアウォールはipfwです。私はこのコマンドを見つけました:

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

私が不明な点が2つあります。

  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
2
Iain
  1. 再起動するたびに正しいルールを再確立する必要があります。他のルールに直接影響することはありませんが、間接的に影響する可能性があります(たとえば、別のルールが何らかの理由でIPを許可した場合、これによりIPがブロックされる可能性があります...)

  2. あなたは、ログファイルを読み取り、「悪い」ことをしている人々のIPを禁止する人気のあるfail2banを探しています。

また、個々の禁止ごとにルールを追加し続けたくはありません。これにより、ルールがすぐに汚染されてしまいます。ただし、テーブルをブロックするルールを追加してから、IPをテーブルに追加することができます。テーブルはIPの単なるリストであるため、すべてを個別に指定するのではなく、テーブル全体にルールを簡単に適用できます。

たとえば、使用する「デフォルト」ファイアウォールスクリプトがあります。このスクリプトの最初の2つのルールは次のとおりです。

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

キーワード「私」は私のローカルIPアドレスのいずれかを意味します。表1はFail2Ban用であり、気に入らないIPが見つかると、しばらくの間そのIPをそのテーブルに追加します。表2は、既知のプロのスパムシステムのリストであるSpamhausのDROPリストです(詳細については、SpamhausのWebサイトを参照してください)。

次のコマンドを使用して、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を使用するのは非常に簡単で、GUIを気にする必要はありません(まったく新しい場合は難しいように聞こえますが、基本は思ったより簡単です)。

私の構成スクリプトは/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の設定は少し手間がかかりますが、非常に簡単です。詳細が必要な場合は、お問い合わせください。

5
Chris S

私が少しよく理解するのに役立つリソースへのリンクを提供できれば、RTFMでさえ、どんな助けでも大歓迎です。

ここにあります: handbook/Firewalls.html

1
poige