FreeBSD使用IPFW设置防火墙

时间:2020-01-09 10:40:42  来源:igfitidea点击:

问题描述:如何使用IPFW配置防火墙,
如何为典型的基于FreeBSD的Apache Web服务器设置规则?

解决方法:Ipfirewall(ipfw)是FreeBSD IP数据包过滤器和流量统计工具。

FreeBSD基本安装中包含IPFW作为单独的运行时可加载模块。
当使用rc.conf语句firewall_enable = YES时,系统将动态加载内核模块。

用于IPFW的FreeBSD编译内核

此步骤是可选的。
除非您要启用NAT功能,否则不需要将IPFW编译到FreeBSD内核中。
但是,某些旧版本可能未编译IPFW。
这是使用IPFW编译内核的快速指南。

确保IPFW支持未编译到内核中:

#ipfw list

如果出现如下错误,则必须现在编译内核的源代码。

ipfw: getsockopt(IP_FW_GET): Protocol not available

另一个选项是打开默认的内核配置文件/usr/src/sys/i386/conf并查找IPFIREWALL选项:

# grep IPFIREWALL /usr/src/sys/i386/conf

使用IPFW构建和安装自定义内核

复制默认内核文件:

# cd /usr/src/sys/i386/conf
# cp GENERIC IPFWKERNEL

添加IPFW支持:

# vi IPFWKERNEL

追加以下指令:

options IPFIREWALL # required for IPFW
options IPFIREWALL_VERBOSE # optional; logging
options IPFIREWALL_VERBOSE_LIMIT=10 # optional; don't get too many log entries
options IPDIVERT # needed for natd

保存并关闭文件。
构建内核,执行以下命令:

# cd /usr/src
# make buildkernel KERNCONF=IPFWKERNEL

安装新内核:

# make installkernel KERNCONF=IPFWKERNEL

现在重新启动系统:

# reboot

步骤1:启用IPFW

打开/etc/rc.conf文件

# vi /etc/rc.conf

追加以下设置:

firewall_enable="YES"
firewall_script="/usr/local/etc/ipfw.rules"

保存并关闭文件..

步骤2编写防火墙规则脚本

您需要将防火墙规则放置在名为/usr/local/etc/ipfw.rule的脚本中:

# vi /usr/local/etc/ipfw.rules

追加以下代码:

IPF="ipfw -q add"
ipfw -q -f flush

#loopback 
$IPF 10 allow all from any to any via lo0
$IPF 20 deny all from any to 127.0.0.0/8
$IPF 30 deny all from 127.0.0.0/8 to any
$IPF 40 deny tcp from any to any frag

# statefull
$IPF 50 check-state
$IPF 60 allow tcp from any to any established
$IPF 70 allow all from any to any out keep-state
$IPF 80 allow icmp from any to any

# open port ftp (20,21), ssh (22), mail (25)
# http (80), dns (53) etc
$IPF 110 allow tcp from any to any 21 in
$IPF 120 allow tcp from any to any 21 out
$IPF 130 allow tcp from any to any 22 in
$IPF 140 allow tcp from any to any 22 out
$IPF 150 allow tcp from any to any 25 in
$IPF 160 allow tcp from any to any 25 out
$IPF 170 allow udp from any to any 53 in
$IPF 175 allow tcp from any to any 53 in
$IPF 180 allow udp from any to any 53 out
$IPF 185 allow tcp from any to any 53 out
$IPF 200 allow tcp from any to any 80 in
$IPF 210 allow tcp from any to any 80 out

# deny and log everything 
$IPF 500 deny log all from any to any

保存并关闭文件。

步骤3:启动防火墙

您可以重新启动该框,也可以通过在命令行上输入来重新加载这些规则。

# sh /usr/local/etc/ipfw.rules

依次列出所有规则

执行以下命令:

# ipfw list