FreeBSD7.3 打开IPFW防火墙

来源:互联网 发布:杰克奥特曼玩具淘宝 编辑:程序博客网 时间:2024/05/22 12:00

1. 安装ipfw 之前装系统时没有编译到系统内核的采用(1),已经编译到内核的直接跳到3

 

IPFW 的主要部分是在内核中运行的, 因此会需要在FreeBSD内核配置文件中添加部分选项。(注意,如果你没有安装FreeBSD核心源代码,是无法进入以下目录的,所以运行之前一定要先安装内核源代码)我们先进入内核配置文件:

# cd /usr/src/sys/i386/conf

# cp GENERIC ./kernel_fw

打开内核配置文件:

# vi ./kernel_fw

添加四个选项,不需要后面的注释信息:

options IPFIREWALL # 将包过滤部分的代码编译进内核。

 

options IPFIREWALL_VERBOSE # 启用通过syslogd记录的日志。如果没有指定这个选项,即使您在

                                              过滤规则中指定记录包, 也不会真的记录它们

 

options IPFIREWALL_VERBOSE_LIMIT=10 # 限制通过 syslogd(8) 记录的每项包规则的记录条

                                                             数。在恶劣的环境中如果您想记录防火墙的活动, 而

                                                             又不想由于 syslog 洪水一般的记录而导致拒绝服务 

                                                             攻击, 那么这个选项将会很有用。

 

options IPFIREWALL_DEFAULT_TO_ACCEPT # 这将把默认的规则动作从 ``deny'' 改为

                                                                ``allow''。这可以防止在没有配置防火墙之前使用启用过 IPFIREWALL 支持的内核重启时把自己锁在外面。 另外, 如果您经常使用 ipfw(8) 来解决一些问题时它也非常有用。尽管如此,在使用时应该小心,

 

因为这将使防火墙敞开, 并改变它的行为。

 

2. 编译内核:

 

编辑完成之后执行:

# /usr/sbin/config kernel_fw

(执行结束后会出现如下提示:Kernel build directory is ../compile/kernel_IPFW Don't forget to do a make celandepend && make depend ')

 

# cd ../compile/kernel_fw

 

# make celandepend && make depend

 

# make && make install clean

如果出现错误,看提示做相关更改,完成之后reboot,进入系统执行uname -a看看是否成功。

重启系统。

 

注意,我们选择了添加options IPFIREWALL_DEFAULT_TO_ACCEPT该选项,就是说默认系统启动后是打开防火墙的,并且防火墙默认是允许任何连接的,所以不必担心你被“锁在门外”了,选择了该选项则可以使用ssh等连接不受影响,不过这相对不安全。这样做的原因就是如果服务器是在机房,远程编译内核加防火墙的话,启用防火墙后默认是拒绝所有连接的,所以上面提到的 options IPFIREWALL_DEFAULT_TO_ACCEPT 这个选项就可以用上了,默认允许所有连接,然后自己再编辑防火墙规则,逐一定义过滤,当然,上面讲到的在rc.conf里面加上firewall_type="OPEN"也是方法之一,目的只有一个,但是方法可以是多种多样,路并不只有一条,只是看你怎麽走,但是一点得说明,我在FreeBSD4.10版本中编译内核的时候在内核中加了: options IPFIREWALL_DEFAULT_TO_ACCEPT 编译时居然是提示:unknow option IPFIREWALL_DEFAULT_TO_ACCEPT 看来只能是用firewall_type="OPEN"了,不知道是不是也是版本的原因。

 

3. 系统参数设置在启动项中加入配额以及防火墙选项:

# vi /etc/rc.conf

加入下面内容:

firewall_enable="YES"

firewall_script="/etc/ipfw.conf"

firewall_quiet="NO"

firewall_logging="YES"

firewall_type="open"

 

启用防火墙,并且我们不用它的默认脚本,自己编辑脚本,保存成ipfw.conf放在etc目录下面

再编辑/etc目录下的syslog.conf

vi /etc/syslog.conf

到最后一行增加:

!ipfirewall

*.*              /var/log/ipfw.log

 

#touch  /var/log/ipfw.log

这里需要说明的是,就是防火墙启用之后默认的规则是 deny ip from any to any 这个上面说过了,但是我在以前做的FreeBSD 4.10版本的系统中加了 ipfw add allow ip from any to any 之后防火墙就是完全开放了,但是在这个6.1的版本中我加了这条依然是无效,可能版本不一样的缘故造成的吧,既然无效,那就只能是换其他的方法了,幸好我这里还有一个其他的方法^_^ 在rc.conf文件中把先前那条firewall_script="/etc/ipfw.conf"注释掉,加上 firewall_type="open" 重启机器,这样防火墙就是对外开放了,不知道这条在4.10的系统中是不是有用,有机会去试试。防火墙启用之后执行ifconfig看看原来的网络地址是不是还生效,如果不生效了,执行sysinstall重新设置一下ip地址等网络设置。

 

 

4、ipfw规则设置上面我们设置了firewall_type="open" 这个是让防火墙完全开放,现在我们来具体设置防火墙的规则:

# vi /etc/ipfw.conf

增加下面内容:


#!/bin/sh

######### TCP ##########
ipfw add 00001 deny log ip from any to any ipopt rr
ipfw add 00002 deny log ip from any to any ipopt ts
ipfw add 00003 deny log ip from any to any ipopt ssrr
ipfw add 00004 deny log ip from any to any ipopt lsrr
ipfw add 00005 deny tcp from any to any in tcpflags syn,fin

#上面5行是过滤扫描包的
ipfw add 19996 check-state
ipfw add 19997 deny tcp from any to any in established
ipfw add 19998 allow tcp from any to any out setup keep-state
ipfw add 19999 allow tcp from any to any out

ipfw add 10000 allow tcp from any to me 22 in
ipfw add 10001 allow tcp from any to me 80 in
ipfw add 10002 allow tcp from me  22 to any out
ipfw add 10003 allow tcp from me to any out

 

# 由于web服务通过80端口进来,但是出去的数据是随机的,所以还得再加一条:

ipfw add allow tcp from me to any out

 

保存重启

#:wq!

#reboot

 

但是是由于对ipfw了解不深,根据一般的防火墙的检验规则都是数据通讯先从客户端发个请求从某个端口进来,防火墙检验过后再让数据从哪个特定的或者是随机的选一个端口让数据出去,再出去时再检查状态,但是我不知道加了这条之后会不会允许不需要外面先请求进来而系统内部可以主动的向外发送数据,而不加阻拦和检查,如果是这样的话那是相当的危险,做为服务器,客户随便上传一个木马什么的不是允许出去了么?而之前上面的那两条check state是不是还起检查作用,我不知道,这个有待学习研究。

原创粉丝点击