LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2667|回复: 0

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

[复制链接]
发表于 2003-7-14 18:48:54 | 显示全部楼层 |阅读模式

  1. 使用Jail和ipfilter结合构建高安全服务器
  2. 作者信息:
  3.                 三轮车夫(★可乐∮,EasyPP,Easy2go)
  4.                 MSN:easy2go@msn.com   QQ:223480         Mail:postmaster@easy2go.org
  5. 版权声明:
  6.         本文档版权归三轮车夫(★可乐∮,EasyPP,Easy2go)所有!如需转载,请保留该声明,谢谢!       
  7. 前言:
  8.         以前写过一份《使用jail构建安全的Vsftpd》的文章(见[url]www.cnfug.org[/url])!对jail的使用有了一个初步的了解!这篇文章应该是上一篇文章的姐妹篇吧!闲话少说!步入正题!
  9.         上一篇文章只是通过jail来chroot一个服务(vsftpd)以实现服务的安全管理!这篇文章着重点在jail一个独立的系统!构建的网络大体的拓扑结构如下!

  10.         具体实现方法:通过Jail做一个独立的系统,在该系统上面提供一些网络服务,然后在该FreeBSD系统上通过ipfilter构建一个防火墙,同时通过ipnat对jail的系统做相应的端口映射!

  11.         系统配置参数:
  12.                 OS:FreeBSD 4.8 Stable
  13.                 IP: fxp0 10.0.1.1 192.168.1.201
  14.                 Dns:10.0.0.251
  15.                 Defaultrouter:10.0.1.1
  16.         ifconfig显示的信息:
  17. /**
  18. fxp0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
  19.         inet 10.0.1.1 netmask 0xff000000 broadcast 10.255.255.255
  20.         inet 192.168.1.201 netmask 0xffffff00 broadcast 192.168.1.255
  21.         ether 00:00:e2:2d:8b:a5
  22.         media: Ethernet autoselect (100baseTX <full-duplex>)
  23.         status: active
  24. lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
  25.         inet 127.0.0.1 netmask 0xff000000
  26. **/
  27. 实现步骤:
  28.         一:建立jail环境:(安装系统的全部源代码)
  29.                 mkdir –p /jail/Jail-A/
  30.                 建立一个shell脚本jail.sh,内容如下:
  31.                 D=/jail/Jail-A
  32. cd /usr/src
  33. mkdir -p $D
  34. make world DESTDIR=$D
  35. cd etc
  36. make distribution DESTDIR=$D -DNO_MAKEDEV_RUN
  37. cd $D/dev
  38. sh MAKEDEV jail
  39. cd $D
  40. ln -sf dev/null kernel
  41.                 编辑/etc/make.conf将一些不需要的东西去掉!(可以根据你具体情况进行设定)
  42.                         CPUTYPE=i686
  43. COPTFLAGS= -O –pipe
  44. INSTALL=install –C
  45. NO_CVS= true    # do not build CVS
  46. NO_BIND=        true    # do not build BIND
  47. NO_FORTRAN=     true    # do not build g77 and related libraries
  48. NO_I4B= true    # do not build isdn4bsd package
  49. NO_LPR= true    # do not build lpr and related programs
  50. NO_MAILWRAPPER=true     # do not build the mailwrapper(8) MTA selector
  51. NO_SENDMAIL=    true    # do not build sendmail and related programs
  52. NO_SHAREDOCS=   true    # do not build the 4.4BSD legacy docs
  53. NO_X=           true    # do not compile in XWindows support (e.g. doscmd)
  54. NOGAMES=        true    # do not build games (games/ subdir)
  55. NOINFO= true    # do not make or install info files
  56. NOLIBC_R=       true    # do not build libc_r (re-entrant version of libc)
  57. NOMAN=          true    # do not build manual pages
  58. NOUUCP= true    # do not build uucp related programs
  59. 执行jail.sh,开始建立jail的基本环境
  60.                 #sh jail.sh
  61. 执行完毕以后进行如下操作:
  62.                 #ifconfig fxp0 alias 192.168.1.201 netmask 255.255.255.0
  63.                 或者在/etc/rc.conf中加入:
  64.                 ifconfig_fxp0_alias0="inet 192.168.1.201  netmask 255.255.255.0"
  65.                 #mkdir –p /jail/Jail-A/stand
  66.                 #cp /stand/sysinstall /jail/Jail-A/stand/
  67.                 #touch /jail/Jail-A/etc/fstab
  68.                 #vi /jail/Jail-A/etc/rc.conf 加入如下内容:
  69.                         sendmail_enable=”NONE”
  70.                         sshd_enable=”YES”  //这个一定需要!可以远程进行管理
  71.                         inetd_enable=”YES”  //如果打开一定要添加下面一行
  72.                         inetd_flags=”-wW –a 192.168.1.201”  //这个修改成你jail的系统的地址!
  73.                         syslogd_enable=”YES”
  74.                         syslogd_flags=”-ss”
  75.   开始配置jail的系统:
  76.                         #jail /jail/Jail-A/ powerbsd.org 192.168.1.201 /bin/csh
  77.                         如果没有任何错误,执行:
  78.                         #passwd root 修改root密码
  79.                         #/stand/sysinstall ->Configure->
  80.                                 选择: Time Zone 设置时区
  81.                                 选择: Networking 配置网络的一些信息
  82. 选择User Management 建立一个wheel组的帐号
  83.                                 选择: Startup 配置需要的一些服务
  84.                         退出,编辑/jail/Jail-A/etc/rc.conf去掉一些无用的信息!
  85.                         可以参照如上的一些信息!
  86.         测试启动jail的系统:
  87.                 #jail /jail/Jail-A/ powerbsd.org 192.168.1.201 /bin/sh /etc/rc
  88. 如下是我机器上面启动jail的信息!
  89. /**
  90. #jail /jail/Jail-A/ powerbsd.org 192.168.1.201 /bin/sh /etc/rc
  91. Skipping disk checks ...
  92. adjkerntz[662]: sysctl(set_disrtcset): Operation not permitted
  93. Doing initial network setup:.
  94. ifconfig: ioctl (SIOCDIFADDR): permission denied
  95. lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
  96. Additional routing options: TCP keepalive=YESsysctl: net.inet.tcp.always_keepalive: Operation not permitted
  97. .Routing daemons:.
  98. Additional daemons: syslogd.
  99. Doing additional network setup:.
  100. Starting final network daemons:.
  101. ELF ldconfig path: /usr/lib /usr/lib/compat
  102. a.out ldconfig path: /usr/lib/aout /usr/lib/compat/aout
  103. Starting standard daemons: inetd cron sshd.
  104. Initial rc.i386 initialization:.
  105. Additional ABI support:.
  106. Local package initialization:.
  107. Additional TCP options:.
  108. 2003年 7月14日 星期一 16时26分43秒 ICT
  109. **/
  110.         现在你可以通过ssh登陆到jail的系统了!为了测试方便,我通过inetd.conf提供了ftp和telnet的服务!
  111. 下面是我通过ssh登陆到jail系统上面的一些信息:
  112. /**
  113. powerbsd# id
  114. uid=0(root) gid=0(wheel) groups=0(wheel), 2(kmem), 3(sys), 4(tty), 5(operator), 20(staff), 31(guest)
  115. powerbsd# uname -a
  116. FreeBSD powerbsd.org 4.8-STABLE FreeBSD 4.8-STABLE #1: Mon Jul 14 14:27:53 CST 2003     [email]root@powerbsd.org[/email]:/usr/src/sys/compile/PowerBSD  i386
  117. powerbsd# ifconfig
  118. fxp0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
  119.         inet 192.168.1.201 netmask 0xffffff00 broadcast 192.168.1.255
  120.         ether 00:00:e2:2d:8b:a5
  121.         media: Ethernet autoselect (100baseTX <full-duplex>)
  122.         status: active
  123. lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
  124. powerbsd# ps auxww
  125. USER PID %CPU %MEM   VSZ  RSS  TT  STAT STARTED      TIME COMMAND
  126. root  748  0.0  0.1   400  252  p1  R+J   4:30PM   0:00.00 ps auxww
  127. root  709  0.0  0.3  1092  788  ??  IsJ   4:26PM   0:00.00 /usr/sbin/inetd -wW -a 192.168.1.201
  128. root  711  0.0  0.3  1032  764  ??  SsJ   4:26PM   0:00.00 /usr/sbin/cron
  129. root  713  0.0  0.8  2632 2080  ??  IsJ   4:26PM   0:00.12 /usr/sbin/sshd
  130. root  727  0.0  0.9  5332 2296  ??  IJ    4:27PM   0:00.03 sshd: PowerBSD [priv] (sshd)
  131. PowerBSD 729  0.0  0.9  5332 2352  ??  SJ    4:27PM   0:00.03 sshd: PowerBSD@ttyp1 (sshd)
  132. PowerBSD  730  0.0  0.4  1364  972  p1  IsJ   4:27PM   0:00.01 -csh (csh)
  133. root  732  0.0  0.4  1368  972  p1  SJ    4:27PM   0:00.02 -su (csh)
  134. root  702  0.0  0.3   992  664  ??  SsJ   4:26PM   0:00.00 /usr/sbin/syslogd -ss
  135. powerbsd#
  136. **/
  137. 到现在为止,jail的基本系统已经配置完毕!
  138. 现在开始配置ipfilter,来实现端口的映射!

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表