常见问题常见问题   搜索搜索   会员列表会员列表   团队团队   注册注册    个人资料个人资料   登录查看您的站内信件登录查看您的站内信件   登录登录 

使用Jail和ipfilter结合构建高安全服务器【原创】

 
发表新文章   这个论题已经被锁定,您不能发表、回复或者编辑文章。    FreeBSD China -> 安装-配置-优化-安全
阅读上一个主题 :: 阅读下一个主题  
作者 留言
三轮车夫
半仙


注册时间: 2003-03-04
文章: 103
来自: 无锡.江苏

文章发表于: Mon 2003-07-14 18:45:30    发表主题: 使用Jail和ipfilter结合构建高安全服务器【原创】 引用并回复

代码:

使用Jail和ipfilter结合构建高安全服务器
作者信息:
      三轮车夫(★可乐∮,EasyPP,Easy2go)
      MSN:easy2go@msn.com   QQ:223480    Mail:postmaster@easy2go.org
版权声明:
   本文档版权归三轮车夫(★可乐∮,EasyPP,Easy2go)所有!如需转载,请保留该声明,谢谢!   
前言:
   以前写过一份《使用jail构建安全的Vsftpd》的文章(见www.cnfug.org)!对jail的使用有了一个初步的了解!这篇文章应该是上一篇文章的姐妹篇吧!闲话少说!步入正题!
   上一篇文章只是通过jail来chroot一个服务(vsftpd)以实现服务的安全管理!这篇文章着重点在jail一个独立的系统!构建的网络大体的拓扑结构如下!
 
   具体实现方法:通过Jail做一个独立的系统,在该系统上面提供一些网络服务,然后在该FreeBSD系统上通过ipfilter构建一个防火墙,同时通过ipnat对jail的系统做相应的端口映射!

   系统配置参数:
      OS:FreeBSD 4.8 Stable
      IP: fxp0 10.0.1.1 192.168.1.201
      Dns:10.0.0.251
      Defaultrouter:10.0.1.1
   ifconfig显示的信息:
/**
fxp0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        inet 10.0.1.1 netmask 0xff000000 broadcast 10.255.255.255
        inet 192.168.1.201 netmask 0xffffff00 broadcast 192.168.1.255
        ether 00:00:e2:2d:8b:a5
        media: Ethernet autoselect (100baseTX <full-duplex>)
        status: active
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
        inet 127.0.0.1 netmask 0xff000000
**/
实现步骤:
   一:建立jail环境:(安装系统的全部源代码)
      mkdir �Cp /jail/Jail-A/
      建立一个shell脚本jail.sh,内容如下:
      D=/jail/Jail-A
cd /usr/src
mkdir -p $D
make world DESTDIR=$D
cd etc
make distribution DESTDIR=$D -DNO_MAKEDEV_RUN
cd $D/dev
sh MAKEDEV jail
cd $D
ln -sf dev/null kernel
      编辑/etc/make.conf将一些不需要的东西去掉!(可以根据你具体情况进行设定)
         CPUTYPE=i686
COPTFLAGS= -O �Cpipe
INSTALL=install �CC
NO_CVS= true    # do not build CVS
NO_BIND=        true    # do not build BIND
NO_FORTRAN=     true    # do not build g77 and related libraries
NO_I4B= true    # do not build isdn4bsd package
NO_LPR= true    # do not build lpr and related programs
NO_MAILWRAPPER=true     # do not build the mailwrapper(8) MTA selector
NO_SENDMAIL=    true    # do not build sendmail and related programs
NO_SHAREDOCS=   true    # do not build the 4.4BSD legacy docs
NO_X=           true    # do not compile in XWindows support (e.g. doscmd)
NOGAMES=        true    # do not build games (games/ subdir)
NOINFO= true    # do not make or install info files
NOLIBC_R=       true    # do not build libc_r (re-entrant version of libc)
NOMAN=          true    # do not build manual pages
NOUUCP= true    # do not build uucp related programs
执行jail.sh,开始建立jail的基本环境
      #sh jail.sh
执行完毕以后进行如下操作:
      #ifconfig fxp0 alias 192.168.1.201 netmask 255.255.255.0
      或者在/etc/rc.conf中加入:
      ifconfig_fxp0_alias0="inet 192.168.1.201  netmask 255.255.255.0"
      #mkdir �Cp /jail/Jail-A/stand
      #cp /stand/sysinstall /jail/Jail-A/stand/
      #touch /jail/Jail-A/etc/fstab
      #vi /jail/Jail-A/etc/rc.conf 加入如下内容:
         sendmail_enable=”NONE”
         sshd_enable=”YES”  //这个一定需要!可以远程进行管理
         inetd_enable=”YES”  //如果打开一定要添加下面一行
         inetd_flags=”-wW �Ca 192.168.1.201”  //这个修改成你jail的系统的地址!
         syslogd_enable=”YES”
         syslogd_flags=”-ss”
  开始配置jail的系统:
         #jail /jail/Jail-A/ powerbsd.org 192.168.1.201 /bin/csh
         如果没有任何错误,执行:
         #passwd root 修改root密码
         #/stand/sysinstall ->Configure->
            选择: Time Zone 设置时区
            选择: Networking 配置网络的一些信息
选择User Management 建立一个wheel组的帐号
            选择: Startup 配置需要的一些服务
         退出,编辑/jail/Jail-A/etc/rc.conf去掉一些无用的信息!
         可以参照如上的一些信息!
   测试启动jail的系统:
      #jail /jail/Jail-A/ powerbsd.org 192.168.1.201 /bin/sh /etc/rc
如下是我机器上面启动jail的信息!
/**
#jail /jail/Jail-A/ powerbsd.org 192.168.1.201 /bin/sh /etc/rc
Skipping disk checks ...
adjkerntz[662]: sysctl(set_disrtcset): Operation not permitted
Doing initial network setup:.
ifconfig: ioctl (SIOCDIFADDR): permission denied
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
Additional routing options: TCP keepalive=YESsysctl: net.inet.tcp.always_keepalive: Operation not permitted
.Routing daemons:.
Additional daemons: syslogd.
Doing additional network setup:.
Starting final network daemons:.
ELF ldconfig path: /usr/lib /usr/lib/compat
a.out ldconfig path: /usr/lib/aout /usr/lib/compat/aout
Starting standard daemons: inetd cron sshd.
Initial rc.i386 initialization:.
Additional ABI support:.
Local package initialization:.
Additional TCP options:.
2003年 7月14日 星期一 16时26分43秒 ICT
**/
   现在你可以通过ssh登陆到jail的系统了!为了测试方便,我通过inetd.conf提供了ftp和telnet的服务!
下面是我通过ssh登陆到jail系统上面的一些信息:
/**
powerbsd# id
uid=0(root) gid=0(wheel) groups=0(wheel), 2(kmem), 3(sys), 4(tty), 5(operator), 20(staff), 31(guest)
powerbsd# uname -a
FreeBSD powerbsd.org 4.8-STABLE FreeBSD 4.8-STABLE #1: Mon Jul 14 14:27:53 CST 2003     root@powerbsd.org:/usr/src/sys/compile/PowerBSD  i386
powerbsd# ifconfig
fxp0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        inet 192.168.1.201 netmask 0xffffff00 broadcast 192.168.1.255
        ether 00:00:e2:2d:8b:a5
        media: Ethernet autoselect (100baseTX <full-duplex>)
        status: active
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
powerbsd# ps auxww
USER PID %CPU %MEM   VSZ  RSS  TT  STAT STARTED      TIME COMMAND
root  748  0.0  0.1   400  252  p1  R+J   4:30PM   0:00.00 ps auxww
root  709  0.0  0.3  1092  788  ??  IsJ   4:26PM   0:00.00 /usr/sbin/inetd -wW -a 192.168.1.201
root  711  0.0  0.3  1032  764  ??  SsJ   4:26PM   0:00.00 /usr/sbin/cron
root  713  0.0  0.8  2632 2080  ??  IsJ   4:26PM   0:00.12 /usr/sbin/sshd
root  727  0.0  0.9  5332 2296  ??  IJ    4:27PM   0:00.03 sshd: PowerBSD [priv] (sshd)
PowerBSD 729  0.0  0.9  5332 2352  ??  SJ    4:27PM   0:00.03 sshd: PowerBSD@ttyp1 (sshd)
PowerBSD  730  0.0  0.4  1364  972  p1  IsJ   4:27PM   0:00.01 -csh (csh)
root  732  0.0  0.4  1368  972  p1  SJ    4:27PM   0:00.02 -su (csh)
root  702  0.0  0.3   992  664  ??  SsJ   4:26PM   0:00.00 /usr/sbin/syslogd -ss
powerbsd#
**/
到现在为止,jail的基本系统已经配置完毕!
现在开始配置ipfilter,来实现端口的映射!

二.配置FreeBSD的ipfiter和ipnat
   #cd /sys/i386/conf
   #cp GENERIC PowerBSD
   在PowerBSD这个核心配置文件中加入:
      options         IPFILTER                 #ipfilter support
options         IPFILTER_LOG            #ipfilter logging
   #config PowerBSD
   #cd ../../compile/PowerBSD/
   #make depend;make;make install
   vi /etc/rc.conf 在改文件中添加如下参数:
      ipfilter_enable="YES"  //ipfilter
      ipfilter_program="/sbin/ipf"
      ipfilter_rules="/etc/ipf.rules"
ipnat_enable="YES"      //ipnat
ipnat_program="/sbin/ipnat -CF"
ipnat_rules="/etc/ipnat.rules"
ipmon_enable="YES"        //ipfilter log
ipmon_program="/sbin/ipmon"
ipmon_flags="-Ds"
建立ipfilter需要的文件:
   touch /etc/ipf.rules   
//因本篇文章重点不在ipfiter防火墙的建立,具体的信息可以参照/usr/share/example/ipfilter/中的文档
   touch /etc/ipnat.rules
   touch /var/log/ipflog
 vi /etc/ipf.rules(如下规则是我测试的规则,不是很完善!具体请参照ipfilter的文档)
   pass out on fxp0 all
pass in on fxp0 all
pass out quick on lo0 all
pass in quick on lo0 all
block in proto icmp from any to 10.0.1.1
pass in quick on fxp0 proto tcp from any to any port = 22 flags S/SA keep state
pass in quick on fxp0 proto tcp from any to any port = 80 flags S/SA keep state
pass in quick on fxp0 proto tcp from any to any port = 23 flags S/SA keep state
pass in quick on fxp0 proto tcp from any to any port = ftp flags S/SA keep state
pass in quick on fxp0 proto tcp from any to any port = ftp-data flags S/SA keep state
pass out quick on fxp0 proto udp from any to any port = 53
block in log quick on fxp0 proto tcp form any to any port = 3306
block in quick all
    vi /etc/ipnat.rules 添加nat的规则
      rdr fxp0 10.0.1.1/32 port 21 -> 192.168.1.201 port 21
rdr fxp0 10.0.1.1/32 port 23 -> 192.168.1.201 port 23
rdr fxp0 10.0.1.1/32 port 80 -> 192.168.1.201 port 80
   vi /etc/rc.local 在该文件中添加启动jail的代码
      jail /jail/Jail-A/ powerbsd.org 192.168.1.201 /bin/sh /etc/rc
   注意不要忘记在/etc/rc.conf中添加:
      ifconfig_fxp0_alias0="inet 192.168.1.201  netmask 255.255.255.0"
三.最后重新启动你的系统,进行测试:
telnet 10.0.1.1
ftp �CA 10.0.1.1
如果成功,一切OK!
总结:
   以上通过ipfilter的nat功能,结合jail强大的功能,可以构建非常安全的服务器系统!但是具体服务在jail下面执行的效率怎么样?我没有具体进行测试!希望测试过的朋友多多指点!如上只是记录我的一个测试过程!在整理的过程中难免会有一些错误!请发现的朋友告诉我,我进行修改!谢谢!
   如果你们在按照该文档配置过程中遇到什么问题,可以发邮件给我,邮件地址在这篇文档的刚开始已经说明!

_________________
BSD it's a Power of my life!
It's my belief !
返回页首
阅览会员资料 发送站内信件 浏览发表者的主页 MSN Messenger
wangbin
老妖


注册时间: 2003-06-20
文章: 1461

文章发表于: Fri 2004-06-04 20:17:21    发表主题: 引用并回复

options IPFILTER
options IPFILTER_LOG
options IPFILTER_DEFAULT_BLOCK
options RANDOM_IP_ID

_________________
问:为什么不用ports?
答:装13。
我很欣赏。
返回页首
阅览会员资料 发送站内信件
fzfh
道童


注册时间: 2004-04-07
文章: 331
来自: SKY

文章发表于: Wed 2004-06-30 10:05:09    发表主题: 引用并回复

jail作的相当于chroot的系统在提供服务的时候他的效率怎么样?
有多大的性能损失?
返回页首
阅览会员资料 发送站内信件 浏览发表者的主页 MSN Messenger
simon
半仙


注册时间: 2003-03-04
文章: 18

文章发表于: Mon 2004-07-19 21:40:17    发表主题: 强 引用并回复

顶一下!
_________________
有困难要上,没有困难?创造困难也要上!
返回页首
阅览会员资料 发送站内信件 MSN Messenger
wangbin
老妖


注册时间: 2003-06-20
文章: 1461

文章发表于: Sat 2005-10-22 13:40:52    发表主题: 引用并回复

好像不起作用

代码:
pass out on fxp0 all
pass in on fxp0 all
pass out quick on lo0 all
pass in quick on lo0 all
block in proto icmp from any to 10.0.1.1
pass in quick on fxp0 proto tcp from any to any port = 22 flags S/SA keep state
pass in quick on fxp0 proto tcp from any to any port = 80 flags S/SA keep state
pass in quick on fxp0 proto tcp from any to any port = ftp flags S/SA keep state
pass in quick on fxp0 proto tcp from any to any port = ftp-data flags S/SA keep state
pass out quick on fxp0 proto udp from any to any port = 53
block in log quick on fxp0 proto tcp form any to any port = 3306
block in quick all

_________________
问:为什么不用ports?
答:装13。
我很欣赏。
返回页首
阅览会员资料 发送站内信件
从以前的文章开始显示:   
发表新文章   这个论题已经被锁定,您不能发表、回复或者编辑文章。    FreeBSD China -> 安装-配置-优化-安全 论坛时间为 北京时间
1页/共1

 
转跳到:  
不能发布新主题
不能在这个论坛回复主题
不能在这个论坛编辑自己的文章
不能在这个论坛删除自己的文章
不能在这个论坛发表投票


Powered by phpBB 2023cc © 2003 Opensource Steps; © 2003-2009 The FreeBSD Simplified Chinese Project
Powered by phpBB © 2001, 2005 phpBB Group
Protected by Project Honey Pot and phpBB.cc
silvery-trainer
The FreeBSD China Project 网站: 中文计划网站 社区网站
The FreeBSD China Project 版权所有 (C) 1999 - 2003 网页设计版权 著作权和商标