Chinaunix

标题: FreeBSD 6.2 上使用 PF 防火墙(zt) [打印本页]

作者: 大大狗    时间: 2006-12-04 11:37
标题: FreeBSD 6.2 上使用 PF 防火墙(zt)
  1. 要在 FreeBSD 6.2 上使用 PF 防火墙,有二个方式,一个是编译进入核心,另外是以动态模块方式加载。编译进入核心的方式
  2. #FreeBSD log traffic,如果有使用 pflog,就要编译进核心
  3. device bpf
  4. #启动 PF Firewall
  5. device pf
  6. #启动虚拟网络设备来记录流量(经由 bpf)
  7. device pflog
  8. #启动虚拟网络设备来监视网络状态
  9. device pfsync

  10. 以动态模块加载
  11. vi /etc/rc.conf
  12. 加入下面四行
  13. #启用 PF
  14. pf_enable="YES"
  15. #PF 防火墙规则的设定文件
  16. pf_rules="/etc/pf.conf"
  17. #启用 inetd 服务
  18. inetd_enable="YES"
  19. #启动 pflogd
  20. pflog_enable="YES"
  21. #pflogd 储存记录档案的地方
  22. pflog_logfile="/var/log/pflog"
  23. #转送封包
  24. gateway_enable="YES"

  25. #开启 ftp-proxy 功能
  26. vi /etc/inetd.conf
  27. 把下面这一行最前面的 # 删除
  28. ftp-proxy stream tcp nowait root /usr/libexec/ftp-proxy ftp-proxy

  29. 使用 sysctl 做设定(也可以重新开机让设定生效)
  30. sysctl -w net.inet.ip.forwarding=1

  31. vi /etc/pf.conf
  32. #对外的网络卡
  33. ext_if = "sis0"
  34. #对内的网络卡
  35. int_if = "rl0"

  36. #频宽控管
  37. #定义 std_out 总频宽 512Kb
  38. #altq on $ext_if cbq bandwidth 512Kb queue { std_out }
  39. #定义 std_out 队列频宽 256Kb,使用预设队列
  40. #queue std_out bandwith 256Kb cbq (default)
  41. #定义 std_in 总频宽 2Mb
  42. #altq on $int_if cbq bandwidth 2Mb queue { std_in }
  43. #假设频宽足够的话,可以从父队列借用额外的频宽
  44. #queue std_in bandwidth 768Kb cbq (brrrow)

  45. #对外开放的服务
  46. open_services = "{80, 443}"
  47. #内部私有的 IP
  48. priv_nets = "{ 127.0.0.0/8, 192.168.0.0/16, 172.16.0.0/12, 10.0.0.0/8 }"

  49. # options
  50. #设定拒绝联机封包的处理方式
  51. set block-policy return
  52. #
  53. set optimization aggressive
  54. #纪录 $ext_if
  55. set loginterface $ext_if

  56. # scrub
  57. #整理封包
  58. scrub in all

  59. #nat
  60. #NAT 地址转译处理
  61. nat on $ext_if from $int_if:network to any -> $ext_if

  62. #ftp-proxy
  63. #ftp-proxy 重新导向
  64. rdr on $int_if proto tcp from any to any port 21 -> 127.0.0.1 port 8021
  65. #rdr on $ext_if proto tcp from any to 140.111.152.13 port 21 -> 192.168.13.253 port 21
  66. #Transparent Proxy Server
  67. rdr on rl0 proto tcp from 192.168.13.0/24 to any 80 -> 127.0.0.1 port 3128

  68. #阻挡可疑封包在 $ext_if 网卡进出
  69. antispoof log quick for $ext_if

  70. #阻挡所有进出的封包
  71. block all

  72. #开放 loopback
  73. pass quick on lo0 all

  74. #拒绝内部私有 IP 对 $ext_if 网络卡联机
  75. block drop in quick on $ext_if from $priv_nets to any
  76. block drop out quick on $ext_if from any to $priv_nets

  77. #开放对外的 80, 443 埠
  78. pass in on $ext_if inet proto tcp from any to $ext_if port $open_services flags S/SA keep state
  79. #只容许 140.111.152.0/24 网段对本机做 22 埠联机
  80. pass in on $ext_if inet proto tcp from 140.111.152.0/24 to $ext_if port 22 flags S/SA keep state

  81. #开放内部网络对外联机
  82. #pass in on $inf_if proto rcp from any to any queue std_in
  83. pass in on $int_if from $int_if:network to any keep state
  84. pass out on $int_if from any to $int_if:network keep state

  85. #开放对外网络的联机
  86. #pass out $ext_if proto tcp from any to any queue std_out
  87. pass out on $ext_if proto tcp all modulate state flags S/SA
  88. pass out on $ext_if proto { udp, icmp } all keep state

  89. 启动 PF,并读取 pf 规则
  90. pfctl -e;pfctl -f /etc/pf.conf

  91. PF 指令的用法
  92. #启动 PF
  93. pfctl -e
  94. #加载 PF 规则
  95. pfctl -f /etc/pf.conf
  96. #检查 PF 语法是否正确 (未加载)
  97. pfctl -nf /etc/pf.conf
  98. #停用 PF
  99. pfctl -d
  100. #重读 PF 设定档中的 NAT 部分
  101. pfctl -f /etc/pf.conf -N
  102. #重读 PF 设定档中的 filter rules
  103. pfctl -f /etc/pf.conf -R
  104. #重读 PF 设定文件中的选项规则
  105. pfctl -f /etc/pf.conf -O

  106. #查看 PF 信息
  107. #显示现阶段过滤封包的统计资料
  108. pfctl -s info
  109. pfctl -si

  110. pfctl -s memory

  111. #显示现阶段过滤的规则
  112. pfctl -s rules
  113. pfctl -sr

  114. pfctl -vs rules

  115. #显示现阶段过滤封包的统计资料
  116. pfctl -vsr

  117. #显示现阶段 NAT 的规则
  118. pfctl -s nat
  119. pfctl -sn

  120. #检视目前队列
  121. pfctl -s queue

  122. #显示现阶段所有统计的数据
  123. pfctl -s all
  124. pfctl -sa

  125. #清除 PF 规则
  126. #清空 NAT 规则
  127. pfctl -F nat
  128. #清空队列
  129. pfctl -F queue
  130. #清空封包过滤规则
  131. pfctl -F rules
  132. #清空计数器
  133. pfctl -F info
  134. pfctl -F Tables
  135. #清空所有的规则
  136. pfctl -F all

  137. #PF Tables 的使用
  138. #显示 table 内数据
  139. pfctl -t ssh-bruteforce -Tshow
  140. pfctl -t table_name -T add spammers.org
  141. pfctl -t table_name -T delete spammers.org
  142. pfctl -t table_name -T flush
  143. pfctl -t table_name -T show
  144. pfctl -t table_name -T zero

  145. 过滤扫描侦测软件
  146. block in quick proto tcp all flags SF/SFRA
  147. block in quick proto tcp all flags SFUP/SFRAU
  148. block in quick proto tcp all flags FPU/SFRAUP
  149. block in quick proto tcp all flags /SFRA
  150. block in quick proto tcp all flags F/SFRA
  151. block in quick proto tcp all flags U/SFRAU
  152. block in quick proto tcp all flags P

  153. 如果防火墙和 Proxy Server 不在同一台主机
  154. Proxy Server:192.168.13.250
  155. no rdr on rl0 proto tcp from 192.168.13.250 to any port 80
  156. rdr on rl0 proto tcp from 192.168.13.0/24 to any port 80 -> 192.168.13.250 port 3128
复制代码

作者: iceblood    时间: 2006-12-04 11:49
#开启 ftp-proxy 功能
vi /etc/inetd.conf
把下面这一行最前面的 # 删除
ftp-proxy stream tcp nowait root /usr/libexec/ftp-proxy ftp-proxy
看到这个就有些吐血~
作者: 大大狗    时间: 2006-12-04 12:03
原帖由 iceblood 于 2006-12-4 11:49 发表
#开启 ftp-proxy 功能
vi /etc/inetd.conf
把下面这一行最前面的 # 删除
ftp-proxy stream tcp nowait root /usr/libexec/ftp-proxy ftp-proxy
看到这个就有些吐血~


作者: minok    时间: 2006-12-04 12:36

作者: ezgo    时间: 2006-12-04 13:51
好東西,先收藏
慢慢消化
作者: yzhkp    时间: 2006-12-04 13:56
up
作者: iceblood    时间: 2006-12-04 16:39
呵呵~别误会,不说说你的东西不好,而是讨厌PF在FTP代理上的模式。
作者: 大大狗    时间: 2006-12-04 16:43
原帖由 iceblood 于 2006-12-4 16:39 发表
呵呵~别误会,不说说你的东西不好,而是讨厌PF在FTP代理上的模式。

哈哈 没误会 你不吐血了
还准备组织人去给你输血呢
今天 小呆 问这个问题 正好找到就转过来 共大家学习一下
作者: Ericzhao82    时间: 2006-12-04 17:08
原帖由 iceblood 于 2006-12-4 11:49 发表
#开启 ftp-proxy 功能
vi /etc/inetd.conf
把下面这一行最前面的 # 删除
ftp-proxy stream tcp nowait root /usr/libexec/ftp-proxy ftp-proxy


使用过程中,有的ftp连接不规范,会导致freebsd无法关闭fpt-proxy代理,我遇到过一次,始终无法释放内网一IP地址的ftp-proxy连接,内网ip的这台电脑关机也不行,inetd重启也不行,当然pf重启也不行。
作者: Ericzhao82    时间: 2006-12-04 17:10
原帖由 大大狗 于 2006-12-4 16:43 发表

哈哈 没误会 你不吐血了
还准备组织人去给你输血呢
今天 小呆 问这个问题 正好找到就转过来 共大家学习一下



其实我看了这篇文章后,发现我没有做错。
我是用动态模块加载的方式来实现的。

delphij也说不应该,估计八成是我那个超超级烂Dell服务器搞的(说他烂我可以说出5、6处问题,包括1周前在其他系统上的问题)
作者: teczm    时间: 2006-12-04 17:15
斑竹阿 拜托弄点有技术含量的帖子吧
作者: limutian    时间: 2006-12-04 18:30
原帖由 teczm 于 2006-12-4 17:15 发表
斑竹阿 拜托弄点有技术含量的帖子吧


文章写的通俗易懂。,很适合我们这些pf iptable菜鸟。

至于楼上,假如你觉得简单,大不了不去理会。何必要冷嘲热讽!!!
作者: Ericzhao82    时间: 2006-12-04 19:48
原帖由 limutian 于 2006-12-4 18:30 发表


文章写的通俗易懂。,很适合我们这些pf iptable菜鸟。

至于楼上,假如你觉得简单,大不了不去理会。何必要冷嘲热讽!!!


顶!
作者: Momoass    时间: 2006-12-04 21:04
FreeBSD ftp-proxy 有时无法退出的问题可以 -t xx 参数即可。

ftp-proxy 真是 pf 的败笔,不清楚为何 OpenBSD 小组不把它集成进去!
作者: FinSUN    时间: 2006-12-04 22:12
做个记号
作者: zhangweizj    时间: 2006-12-05 11:17
原帖由 teczm 于 2006-12-4 17:15 发表
斑竹阿 拜托弄点有技术含量的帖子吧

你为什么不写点。。。。
作者: teczm    时间: 2006-12-05 12:22
原帖由 zhangweizj 于 2006-12-5 11:17 发表

你为什么不写点。。。。

我要是这么NX,不是都当班朱了么




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2