使用ipfw阻止IP地址

如果我的问题是基本的,我对ipfw总是不高兴,所以我提前道歉,但是我没有find任何资源来帮助解决使用GUI和知道命令行ipfw之间的差距。


我想阻止重复击中我的networking服务器ips。 防火墙是ipfw。 我发现这个命令:

ipfw将de.ip从.ip.to.block添加到my.computer.ip.address

有两件事我不清楚:

  1. 我知道这个规则会在重新启动时被刷新。 我想知道的是运行这个命令会影响正在运行的任何现有规则吗? 我猜不是,但我想确定。

  2. 有没有任何软件与ipfw链接添加ip的一小段时间,然后删除它们? 如果没有,我会为它敲一个脚本,但有没有一个内置的方式来添加几个conf文件? 如果我可以使用稳定的规则创build一个文件,而使用dynamic的规则创build另一个文件,则会更容易些。

任何帮助,非常感谢,即使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. 每次重启都需要重新build立正确的规则。 它不会直接影响其他规则,但可以间接(例如,如果另一个规则允许IP出于任何原因,这可能会阻止IP …)

  2. 你正在寻找日益stream行的fail2ban,它读取日志文件,并禁止人们做“坏”事情的IP地址。

另外,你也不太想为每个禁令添加规则,这很快就会污染规则。 您可以添加规则来阻止表,然后将IP添加到表中。 表格只是一个IP列表,所以您可以轻松地将规则应用到整个表格,而不是单独指定它们。

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

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

关键字“我”意味着我的任何本地IP地址。 表1是Fail2Ban,当它find一个不喜欢的IP时,它将IP添加到该表中一段时间​​。 表2列出了Spamhaus的DROP列表,这是一个已知的专业垃圾邮件系统列表(详见他们的网站)。

您可以使用以下命令手动将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 

我强烈build议您编写自己的脚本来configuration防火墙。 在FreeBSD上使用ipfw很容易,而且我不会用GUI(我知道这听起来很难,但是基础比你想象的要容易)。

我的configuration脚本在/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获得,这使得写入这些非常简单。 每个规则都不一定要有不同的号码,但是这使得pipe理起来更简单。 规则按数字顺序进行处理,否则对数字没有意义。

这个脚本是通过把这些行放在/etc/rc.conf激活的

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

设置Fail2Ban是一个更多的工作,但它也是非常简单的。 如果你想了解更多的细节,请问。

任何帮助,非常感谢,即使RTFM的,如果你可以给一个资源的链接,可以帮助我更好地了解它。

这里是: handbook / firewalls.html