新客网WWW.XKER.COM:致力做中国最专业的网络学院!
学院: 操作系统 - 网络应用 - 服务器 - 网络安全 - 工具软件 - 办公软件 - Web开发 - 数据库 - 网页设计 - 图形图像 - 媒体动画 - 硬件学堂 - 存储频道 - QQ专区
您的位置:首页 > 网络学院 > 操作系统 > Unix系统 > FreeBSD教程 > 正文:用FreeBSD构建安全的Web服务器(四)

用FreeBSD构建安全的Web服务器(四)

新客网 XKER.COM 2008-01-18 来源:新客网编辑整理 佚名 收藏本文
  四、防火墙的安装和设置
  
  FreeBSD自带有一个基于包过滤的防火墙--ipfw,虽然功能没有专业防火墙那么强大,但是应付一个Web站点的安全还是足够的,所以我们决定选用该防火墙来保护我们的Web服务器。
  
  
  1. 安装ipfw
  
  IPFW 的主要部分是在内核中运行的, 因此会需要在FreeBSD内核配置文件中添加部分选项。(注重,假如你没有安装FreeBSD核心源代码,是无法进入以下目录的,所以运行之前一定要先安装内核源代码)我们先进入内核配置文件:
  # cd /sys/i386/conf
  # cp GENERIC ./kernel_fw
  
  打开内核配置文件:
  # ee ./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) 来解决一些问题时它也非常有用。 尽管如此,在使用时应该小心, 因为这将使防火墙敞开, 并改变它的行为。
  
  
  编译内核:
  # /usr/sbin/config kernel_fw
  # cd ../compile/kernel_fw (注重你的版本,假如是低于5.0的版本用../../compile/kernel_fw)
  # make depend
  # make
  # make install
  
  重启系统。注重,我们没有选择options IPFIREWALL_DEFAULT_TO_ACCEPT该选项,就是说默认系统启动后是打开防火墙的,并且防火墙默认是不答应任何连接的(deny from any to any),所以一定要在本地操作,否则你将被“锁在门外”,假如你选择了该选项则可以使用ssh等连接不受影响,不过这相对不安全。
  
  
  2. 配置ipfw
  
  假如配置普通情况下的规则,使用命令配置的模式:
  ipfw的配置命令:ipfw [-N] 命令 [编号] 动作 [log(日志)] 协议 地址 [其它选项]
  例如:
  # ipfw add allow tcp from any to 10.10.10.1 80 #答应外界访问我的web服务
  # ipfw add allow tcp from any to 10.10.10.1 21 #答应外面访问我的ftp服务
  # ipfw add allow tcp from any to 10.10.10.1 22 #答应外界访问我的ssh服务
  
  假如使用规则包的形式,那么查看下面内容。
  系统启动后,我们还要配置rc.conf文件来运行我们的防火墙:
  # ee /etc/rc.conf
  
  加入如下内容:
  gateway_enable="YES" # 启动网关
  firewall_enable="YES" # 激活firewall防火墙
  firewall_script="/etc/rc.firewall" # firewall防火墙的默认脚本
  firewall_type="/etc/ipfw.conf" # firewall自定义脚本
  firewall_quiet="NO" # 起用脚本时,是否显示规则信息。现在为“NO”假如你的防火墙脚本已经定型,那么就可以把这里设置成“YES”了。
  firewall_logging_enable="YES" # 启用firewall的log记录。
  
  设置完成后我们再编辑/etc/syslog.conf文件:
  # ee /etc/syslog.conf
  加入以下行:
  !ipfw
  *.* /var/log/ipfw.log
  
  现在到了最重要的编辑规则包了:
  # ee /etc/ipfw.conf
  我们添加一下规则:(注重 10.10.10.1是我们服务器的IP)
  
  ######### TCP ##########
  add 00001 deny log ip from any to any ipopt rr
  add 00002 deny log ip from any to any ipopt ts
  add 00003 deny log ip from any to any ipopt ssrr
  add 00004 deny log ip from any to any ipopt lsrr
  add 00005 deny tcp from any to any in tcpflags syn,fin
  # 这5行是过滤各种扫描包
  
  add 10001 allow tcp from any to 10.10.10.1 80 in # 向整个Internet开放http服务。
  add 10002 allow tcp from any to 10.10.10.1 21 in # 向整个Internet开放ftp服务。
  add 10000 allow tcp from 1.2.3.4 to 10.10.10.1 22 in
  # 向Internet的xx.xx.xx.xx这个IP开放SSH服务。也就是只信任这个IP的SSH登陆。
  # 假如你登陆服务器的IP不固定,那么就要设为:add 10000 allow tcp from any to 10.10.10.1 22 in
  
  add 19997 check-state
  add 19998 allow tcp from any to any out keep-state setup
  add 19999 allow tcp from any to any out #这三个组合起来是答应内部网络访问出去,假如想服务器自己不和Internet进行tcp连接出去,可以把19997和19998去掉。(不影响Internet对服务器的访问)
  
  ########## UDP ##########
  add 20001 allow udp from any 53 to 10.10.10.1 # 答应其他DNS服务器的信息进入该服务器,因为自己要进行DNS解析嘛~
  add 29999 allow udp from any to any out # 答应自己的UDP包往外发送。
  
  ########## ICMP #########
  add 30000 allow icmp from any to any icmptypes 3
  add 30001 allow icmp from any to any icmptypes 4
  add 30002 allow icmp from any to any icmptypes 8 out
  add 30003 allow icmp from any to any icmptypes 0 in
  add 30004 allow icmp from any to any icmptypes 11 in
  #答应自己ping别人的服务器。也答应内部网络用router命令进行路由跟踪。
  
共3页: 上一页 [1] [2] [3] 下一页
收藏】 【评论】 【推荐】 【投稿】 【打印】 【关闭
发表评论
要记得去论坛讨论,点击注册新会员匿名评论
评论内容:不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
阅读排行
随机推荐
实用信息推荐