使用 ipfw 阻止 IP 地址

Iai*_*ain 2 bsd ipfw

我对 ipfw 完全是个菜鸟,所以如果我的问题是基本的,我提前道歉,但我没有找到任何资源来帮助解决使用 GUI 和非常了解命令行 ipfw 之间的差距。


我想阻止重复访问我的网络服务器的 ip。防火墙是ipfw。我找到了这个命令:

ipfw 将拒绝 ip 从 the.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
Run Code Online (Sandbox Code Playgroud)
#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
Run Code Online (Sandbox Code Playgroud)

Chr*_*s S 5

  1. 每次重启都需要重新建立正确的规则。它不会直接影响其他规则,但可以间接影响(例如,如果另一个规则出于任何原因允许 IP,这可能会阻止 IP...)

  2. 您正在寻找广受欢迎的fail2ban,它读取日志文件并禁止人们做“坏”事的IP。

此外,您真的不希望为每个单独的禁令添加规则,这会很快污染规则。但是,您可以添加规则来阻止表,然后将 IP 添加到表中。表格只是一个 IP 列表,因此您可以轻松地将规则应用于整个表格,而不是单独指定它们。

例如,我使用了一个“默认”防火墙脚本,该脚本中的前两条规则是:

00030 deny ip from "table(1)" to me
00031 deny ip from "table(2)" to me
Run Code Online (Sandbox Code Playgroud)

关键字“我”表示我的任何本地 IP 地址。表 1 是针对 Fail2Ban 的,当它发现一个它不喜欢的 IP 时,它会将 IP 添加到该表中一段时间​​。表 2 是 Spamhaus 的 DROP 列表,这是一个已知专业垃圾邮件系统的列表(有关详细信息,请参阅他们的网站)。

您可以使用以下命令手动将 IP 添加到表中:

ipfw table 2 add
Run Code Online (Sandbox Code Playgroud)

在我的服务器上,表 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
Run Code Online (Sandbox Code Playgroud)

我强烈建议您编写自己的脚本来配置防火墙。在 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
Run Code Online (Sandbox Code Playgroud)

此服务器正在运行 SSH(在备用端口上)、DNS 和 NTP(时间)。其余的只是我放在所有防火墙脚本中的通用内容。如果您有其他需要打开的服务,请告诉我,我会自定义示例。/etc/services但是,您可以获得大多数服务名称,这使得编写这些名称变得非常容易。每个规则都不一定有不同的编号,但这样可以更轻松地管理它们。规则按数字顺序处理,否则数字没有意义。

通过将这些行放入该脚本被“激活” /etc/rc.conf

firewall_enable="YES"                   # Firewall On
firewall_script="/etc/ipfw.rules"       # Firewall Script
Run Code Online (Sandbox Code Playgroud)

设置 Fail2Ban 需要更多的工作,但它也非常简单。如果您想了解更多详细信息,请询问。