FreeBSD/OpenBSD:PF防火墙过滤大量子网和IP地址
时间:2020-01-09 10:42:50 来源:igfitidea点击:
问题描述:如何在FreeBSD 7.x服务器下使用OpenBSDs pf防火墙过滤大量的子网和IP?
如何记录从此类ips丢弃的所有数据包?
如何阻止多达10000个IP或者子网,而不会造成任何性能损失?
解决方法:您可以使用pf防火墙轻松过滤大量IP或者子网。
PF提供了用于保存大量IPv4和IPv6地址的表。
对表的查找非常快,并且消耗更少的内存和处理器时间。
在pf.conf文件中创建表。
还可以从包含IP地址和网络列表的文本文件中填充表格。
如何配置表以删除大量IP?
打开pf.conf文件,执行:
# vi /etc/pf.conf
添加以下代码:
table <blockedips> persist file "/etc/pf.blocked.ip.conf" ext_if="em1" # interface connected to internet
添加以下代码以删除并记录/etc/pf.blocked.ip.conf文件中列出的所有ips /子网
block drop in log (all) quick on $ext_if from <blockedips> to any
保存并关闭文件。
现在使用vi文本编辑器创建文件/etc/pf.blocked.ip.conf文件,执行:
vi /etc/pf.blocked.ip.conf
输出示例:
192.168.1.0/24 192.54.1.5 # 192.54.4.5
文件/etc/pf.blocked.ip.conf应该包含IP地址和/或者CIDR网络块的列表,每行一个。
任何以开头的行均被视为注释,并被pf忽略。
要加载新规则,只需执行:
# pfctl -nf /etc/pf.conf # pfctl -f /etc/pf.conf
如何查看表中列出的所有IP地址?
输入以下命令
# pfctl -t blockedips -T show
输出示例:
58.65.232.0/21 58.83.12.0/22 64.28.176.0/20 64.255.128.0/19 66.231.64.0/20 67.213.128.0/20 69.8.176.0/20
如何动态添加名为91.196.232.0/22的子网?
使用pfctl命令本身,动态添加CIDR或者IP,执行:
# pfctl -t blockedips -T add 192.54.11.11 # pfctl -t blockedips -T add 91.196.232.0/22
如何动态删除名为91.196.232.0/22的子网?
执行命令,如下所示:
# pfctl -t blockedips -T delete 91.196.232.0/22
请注意,使用pfct所做的所有更改都是动态的。
您需要更新磁盘上的文件以保存更改。
如何查看每个IP/CIDR的统计信息?
-v选项可以显示每个表条目(IP/CIDR)的统计信息,执行:
# pfctl -t blockedips -T show -v
输出示例:
216.243.240.0/20 Cleared: Thu May 10 03:01:01 2008 In/Block: [ Packets: 0 Bytes: 0 ] In/Pass: [ Packets: 0 Bytes: 0 ] Out/Block: [ Packets: 0 Bytes: 0 ] Out/Pass: [ Packets: 0 Bytes: 0 ] 216.255.176.0/20 Cleared: Thu May 10 03:01:01 2008 In/Block: [ Packets: 0 Bytes: 0 ] In/Pass: [ Packets: 0 Bytes: 0 ] Out/Block: [ Packets: 0 Bytes: 0 ] Out/Pass: [ Packets: 0 Bytes: 0 ]
如何查看默认/var/log/pflog文件中已删除IP的日志?
使用tcpdump命令读取日志文件:
# tcpdump -n -e -ttt -r /var/log/pflog # tcpdump -n -e -ttt -r /var/log/pflog port 80 # tcpdump -n -e -ttt -r /var/log/pflog and host 192.33.1.2
您还可以实时查看日志,执行:
# tcpdump -n -e -ttt -i pflog0 # tcpdump -n -e -ttt -i pflog0 port 80 # tcpdump -n -e -ttt -i pflog0 host 192.33.1.2