加入收藏 | 设为首页 | 会员中心 | 我要投稿 武汉站长网 (https://www.027zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Windows > 正文

如何在FreeBSD上设置PF防火墙来保护Web服务器

发布时间:2018-10-03 18:20:25 所属栏目:Windows 来源:Vivek Gite
导读:副标题#e# 【新品产上线啦】51CTO播客,随时随地,碎片化学习 我是从 Linux 迁移过来的 FreeBSD 新用户,Linux 中使用的是 netfilter 防火墙框架(LCTT 译注:netfilter 是由 Rusty Russell 提出的 Linux 2.4 内核防火墙框架)。那么在 FreeBSD 上,我该如
副标题[/!--empirenews.page--] 【新品产上线啦】51CTO播客,随时随地,碎片化学习

/uploads/allimg/c180919/153I2304645620-19328.jpg

我是从 Linux 迁移过来的 FreeBSD 新用户,Linux 中使用的是 netfilter 防火墙框架(LCTT 译注:netfilter 是由 Rusty Russell 提出的 Linux 2.4 内核防火墙框架)。那么在 FreeBSD 上,我该如何设置 PF 防火墙,来保护只有一个公共 IP 地址和端口的 web 服务器呢?

PF 是包过滤器packet filter的简称。它是为 OpenBSD 开发的,但是已经被移植到了 FreeBSD 以及其它操作系统上。PF 是一个包状态过滤引擎。在这篇教程中,我将向你展示如何在 FreeBSD 10.x 以及 11.x 中设置 PF 防火墙,从而来保护 web 服务器。

第一步:开启 PF 防火墙

你需要把下面这几行内容添加到文件 /etc/rc.conf 文件中:

  1. # echo 'pf_enable="YES"' >> /etc/rc.conf
  2. # echo 'pf_rules="/usr/local/etc/pf.conf"' >> /etc/rc.conf
  3. # echo 'pflog_enable="YES"' >> /etc/rc.conf
  4. # echo 'pflog_logfile="/var/log/pflog"' >> /etc/rc.conf

在这里:

  1. pf_enable="YES" - 开启 PF 服务
  2. pf_rules="/usr/local/etc/pf.conf" - 从文件 /usr/local/etc/pf.conf 中读取 PF 规则
  3. pflog_enable="YES" - 为 PF 服务打开日志支持
  4. pflog_logfile="/var/log/pflog" - 存储日志的文件,即日志存于文件 /var/log/pflog

第二步:在 /usr/local/etc/pf.conf 文件中创建防火墙规则

输入下面这个命令打开文件(超级用户模式下):

  1. # vi /usr/local/etc/pf.conf

在文件中添加下面这些 PF 规则集:

  1. # vim: set ft=pf
  2. # /usr/local/etc/pf.conf
  3. ## 设置公共端口 ##
  4. ext_if="vtnet0"
  5. ## 设置服务器公共 IP 地址 ##
  6. ext_if_ip="172.xxx.yyy.zzz"
  7. ## 设置并删除下面这些公共端口上的 IP 范围 ##
  8. martians = "{ 127.0.0.0/8, 192.168.0.0/16, 172.16.0.0/12,
  9. 10.0.0.0/8, 169.254.0.0/16, 192.0.2.0/24,
  10. 0.0.0.0/8, 240.0.0.0/4 }"
  11. ## 设置 http(80)/https (443) 端口 ##
  12. webports = "{http, https}"
  13. ## 启用下面这些服务 ##
  14. int_tcp_services = "{domain, ntp, smtp, www, https, ftp, ssh}"
  15. int_udp_services = "{domain, ntp}"
  16. ## 跳过回环端口 - 跳过端口上的所有 PF 处理 ##
  17. set skip on lo
  18. ## 设置 PF 应该统计的端口信息,如发送/接收字节数,通过/禁止的包的数目 ##
  19. set loginterface $ext_if
  20. ## 设置默认策略 ##
  21. block return in log all
  22. block out all
  23. # 基于 IP 分片的错误处理来防御攻击
  24. scrub in all
  25. # 删除所有不可达路由地址
  26. block drop in quick on $ext_if from $martians to any
  27. block drop out quick on $ext_if from any to $martians
  28. ## 禁止欺骗包
  29. antispoof quick for $ext_if
  30. # 打开 SSH 端口,SSH 服务仅从 VPN IP 139.xx.yy.zz 监听 22 号端口
  31. # 出于安全原因,我不允许/接收 SSH 流量
  32. pass in quick on $ext_if inet proto tcp from 139.xxx.yyy.zzz to $ext_if_ip port = ssh flags S/SA keep state label "USER_RULE: Allow SSH from 139.xxx.yyy.zzz"
  33. ## 使用下面这些规则来为所有来自任何 IP 地址的用户开启 SSH 服务 #
  34. ## pass in inet proto tcp to $ext_if port ssh
  35. ### [ OR ] ###
  36. ## pass in inet proto tcp to $ext_if port 22
  37. # Allow Ping-Pong stuff. Be a good sysadmin
  38. pass inet proto icmp icmp-type echoreq
  39. # All access to our Nginx/Apache/Lighttpd Webserver ports
  40. pass proto tcp from any to $ext_if port $webports
  41. # 允许重要的发送流量
  42. pass out quick on $ext_if proto tcp to any port $int_tcp_services
  43. pass out quick on $ext_if proto udp to any port $int_udp_services
  44. # 在下面添加自定义规则

(编辑:武汉站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读