OSX上pf的简单配置笔记

水果的OSX上没有iptables,在10.10以后以pf取代ipfw。相比于iptables,pf一般使用配置文件保存防火墙规则,语法规范上更严谨,但是配置也更复杂、规则冗长。本文记录pf的简单配置方法。

cat /etc/pf.conf,可看到以下已有内容:(忽略注释部分)

1
2
3
4
5
6
scrub-anchor "com.apple/*"
nat-anchor "com.apple/*"
rdr-anchor "com.apple/*"
dummynet-anchor "com.apple/*"
anchor "com.apple/*"
load anchor "com.apple" from "/etc/pf.anchors/com.apple"

anchor可理解为一组规则的集合。默认情况下,这里的几行anchor都是苹果留的place holder,实际上没有active的规则。
/etc/pf.conf在以后的OSX更新中可能会被覆盖,最好可以另外建立一个自定义的pf.conf
配置文件必须按照MacrosTablesOptionsTraffic NormalizationQueueingTranslationPacket Filtering的顺序。
更详细的说明参考pf.conf man page

  1. 添加一个anchor。修改/etc/pf.conf如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    scrub-anchor "com.apple/*"
    nat-anchor "com.apple/*"
    nat-anchor "custom"
    rdr-anchor "com.apple/*"
    rdr-anchor "custom"
    dummynet-anchor "com.apple/*"
    anchor "com.apple/*"
    anchor "custom"
    load anchor "com.apple" from "/etc/pf.anchors/com.apple"
    load anchor "custom" from "/etc/pf.anchors/custom"
  2. 建立anchor规则文件/etc/pf.anchors/custom,内容为具体规则。
    常用的规则:

    • 屏蔽IP入站TCP连接并记录:

      1
      block in log proto tcp from 192.168.1.136 to any
    • 转发入站TCP连接到另一本地端口:

      1
      rdr inet proto tcp from any to any port 8081 -> 127.0.0.1 port 80

    经测试,rdr无法转发到另一台外部主机上(man page的示例,只可以转发到internal network),内核开启net.inet.ip.forwarding=1也无效。如需转发到另一个外网IP,需要配合mitmproxy的透明代理

    • NAT,路由vlan12接口上(192.168.168.0/24)的出口包,经由非vlan12的接口转换到外部地址(204.92.77.111),并允许vlan12之间的互相访问:

      1
      nat on ! vlan12 from 192.168.168.0/24 to any -> 204.92.77.111
  3. 使配置文件生效

    1
    pfctl -evf /etc/pf.conf

简化教程

修改/etc/pf.conf如下:

scrub-anchor "com.apple/*"
nat-anchor "com.apple/*"
nat-anchor "custom"
rdr-anchor "com.apple/*"
rdr-anchor "custom"
dummynet-anchor "com.apple/*"
anchor "com.apple/*"
anchor "custom"
load anchor "com.apple" from "/etc/pf.anchors/com.apple"
load anchor "custom" from "/etc/pf.anchors/custom"
table <blockedips> persist file "/etc/pf.blocked.ip.conf"
block in log proto tcp from <blockedips> to any

2. 在/etc目录下生成文件/etc/pf.blocked.ip.conf,里面包含要block的ip地址。
比如:
218.240.39.102
#218.240.39.121
192.168.1.0/24

3. 用一下命令载入新规则
pfctl -f /etc/pf.conf
4. 实时加入拦截
# pfctl -t blockedips -T add 69.248.133.153
# pfctl -t blockedips -T add 91.196.232.0/22
5. 实时删除拦截
pfctl -t blockedips -T delete 91.196.232.0/22
pfctl -t blockedips -T delete 69.248.133.153

#清除所有已经建立的规则,并重新读取配置文件

pfctl -F all -f /etc/pf.conf

以上可以实现 随时屏蔽要屏蔽的ip

参考内容

https://cn2.chionlab.moe/2016/02/01/use-pf-on-osx/

http://tieba.baidu.com/p/1299818333

OSX上pf的简单配置笔记相关推荐

  1. Webpack4 学习笔记 - 01:webpack的安装和简单配置

    安装 webpack 新建一个Demo文件夹,执行初始化: npm init 在Demo文件夹里安装 webpack 和 webpack-cli : npm install webpack webpa ...

  2. 3.2.1 配置构建Angular应用——简单的笔记存储应用——展示功能

    本节我们会通过构建一个简单的笔记存储应用(可以载入并修改一组简单的笔记)来学习如何应用Angular的特性.这个应用用到的特性有: 在JSON文件中存储笔记 展示.创建.修改和删除笔记 在笔记中使用M ...

  3. NAS配置Time Machine,在D-Link DNS-320上的配置笔记

    今天打算把Time Machine备份的工作交给NAS,以前是放在一块外置硬盘上的,虽然速度要比NAS快,但是每次插拔外接都有些麻烦.而NAS又具有实时在线.定时关机启动的功能,配合Time Mach ...

  4. [Linux]在Linux上部署Java开发环境笔记(一)-- 补充:Linux下如何手动设置IP及配置DNS服务

    在Linux上部署Java开发环境笔记(一) -- 补充:Linux下如何手动设置IP及配置DNS服务 2010/06/17 有的Linux系统会有网络设置的图形操作界面,比如"红旗Linu ...

  5. Linux上搭建nginx,及简单配置

    在上家公司都是运维安装nginx,到新公司后代码开发完成部署测试服务器要求自己装nginx,研究了好久安装好之后,到正式上线还要自己安装,索性把安装步骤自己记载下来(好大一部分都是在网站找的). 一, ...

  6. 20 ubuntu 中科大源_Linux-Ubuntu简单配置-换国内源-中文显示

    Linux-Ubuntu(个人示例使用版本20.04,其余版本区别不大) 好像知乎的动图加载有问题,这个动图应该阔以(*^▽^*)Linux-Ubuntu简单配置-更换国内源-中文设置​www.bil ...

  7. Android开发环境简单配置

    为什么80%的码农都做不了架构师?>>>    ·         Android开发环境简单配置 写这个系列的原因也是因为自己对android比较感兴趣,而网上多数教程都是直接参照 ...

  8. Redhat5下haproxy+keepalived+nginx配置笔记

    Redhat5下haproxy+keepalived+nginx配置笔记 ----by knight HA:高可用性 keepalived个人简单理解就是实现一个虚IP在keepalived主从服务器 ...

  9. Python 的scikit-learn和tensorflow在虚拟环境下安装配置笔记

    Python 机器学习安装配置笔记 这学期开始上人工智能课,任课老师要求安装python和对于机器学习深度学习的各种库. 以前做过类似项目,顺便就把配置环境的流程记录下来. 中间有引用他人的博客,都有 ...

最新文章

  1. 青岛中专学计算机哪个学校比较好,青岛最好的中专学校是哪个
  2. 解释Python的‘__enter __‘和‘__exit__‘
  3. linux ssh -R 代理不同内网主机互连
  4. 初创互联网公司简明创业指南 - YC新掌门Sam Altman
  5. tgp饥荒 服务器无响应,tgp饥荒联机版缺少fmod_event.dll文件怎么办?具体解决方法介绍...
  6. 可以获取get post url 传递参数的统一方法
  7. Spring Cloud 中的@FeignClient注解
  8. Part Six 地理定位API
  9. MAC系统上grep使用办法
  10. buf.readInt8函数详解
  11. ptaa乘以b_pta程序设计平台-PTA,系统
  12. JavaScript案例分享+复盘——小米闪购界面
  13. mysql与oracle语法区别
  14. 计算机与医疗PPT,《人工智能医药》ppt课件
  15. ps盖印图层在哪里_PS如何盖印图层?PS盖印图层快捷键
  16. 大数据技术之云数据库
  17. wifi快速漫游实例分析
  18. 共筑未来 | 思腾合力加入光合组织,完成国产信创兼容适配
  19. 数据挖掘的过程是什么?通俗易懂
  20. 来自灵魂的拷问——知道什么是SQL执行计划吗?

热门文章

  1. AIfloki——碾压AIdoge,开启链游新时代
  2. 联想笔记本ubuntu系统下的背光调节
  3. 【跨年】《2020年跨年演讲合集-吴晓波、罗振宇、丁祖昱等》(附下载链接)...
  4. 前端模块化 AMD 详解
  5. xshell 5评估期已过,不能使用的解决办法
  6. Stack Overflow:开发者在周末更喜欢用哪个编程语言
  7. 哈工大2019秋数据结构期末试题
  8. uni-app项目引入图标
  9. 数据分析师常用的十种数据分析思路
  10. Mansory的简单使用