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