FreeBSD_11-系统管理——{Part_8-IPFW}

内核支持

  • 方式一:静态編译进内核
  • options    IPFIREWALL                    # enables IPFW
    options    IPFIREWALL_VERBOSE            # enables logging for rules with log keyword
    options IPDIVERT # enables NAT
    options DUMMYNET # enables DUMMYNET
  • 方式二:动态装载模块
  • # /boot/loader.conf
        ipfw_load="YES"

配置文件

  • /etc/rc.conf[.local]
  • firewall_enable="YES"
    firewall_logging="YES"
      # 在 /usr/local/etc/rc.d 下自定义开机脚本或在此添加以下任意一条
      firewall_type="/PATH.../RULE_FILE" #指定包含自定义配置规则的文件
      firewall_script="/PATH.../IPFW_SCRIPT" #指定具有执行权限的 ipfw rule 脚本

SYSCTL 

  • sysctl net.inet.ip.fw.default_to_accept=1 #默认为 0,即 deny 所有连接;此项为 readonly 参数,只能在 loader.conf 中设定
  • sysctl net.inet.ip.fw.enable=0 #停用 ipfw,相当于 ipfw disable firewall,系统安全級别为 3 时,无法关闭
  • sysctl net.inet6.ip6.fw.enable=0 #同上,针对 ipv6
  • sysctl net.inet.ip.fw.verbose=0 #停止记录详细信息
  • sysctl net.inet.ip.fw.verbose_limit=0 #同一连接的消息重复记录的次数,设为 0 表示不限制
  • sysctl net.inet.ip.fw.tables_sets=9 #设置默认情况下 RULE 的归属集合(SET),默认是 0,即第一个 SET,可以设置为 0-30 之间的数字

語法概要 

  • ipfw add RULE_NUMBER set SET_NUMBER ACTION log LOG_AMOUNT PROTO from SRC SRC_PORT to DST DST_PORT OPTIONS
    • 规则执行順序(优先級):按 RULE_NUMBER(1-65534) 顺序执行,若多条规则拥有同样的规则号码,则按创建的时间順序执行
    • SET_NUMBER:规则集合序号(0-31),多条规则作为一組形成一个集合 SET
    • ACTION:可以为 pass(放行)、drop(丢弃)、check-state(检查 keep-state 创建的动态规则)、count(仅用作计数,不做为匹配成功的条件)、skipto ANOTHER_RULE(在规则之间进行逻辑跳转)、divert ANOTHER_PORT(端口间转发,不改变地址)等
    • LOG_AMOUNT:ipfw 可以通过 syslogd 将信息写到日志文件的 security facility 中,可在创建规则时指定每条规则可以记录的最大日志数量,若不指定,则取 net.inet.ip.fw.verbose_limit 的值为准,可以通过 ipfw resetlog 命令清空计数
    • PROTO:指定当前规则针对的网络协议,如 tcp、udp、icmp、sctp 等几乎所有现存协议均适用,all 或 ip 指作用于所有协议
    • SRC:源地址(IPv4、IPv6),可以为单个地址(10.0.0.2)、整个子网(e.g,10.0.0.0/16)、包含多个地址的 table、me(本机 IPv4)、me6(本机 IPv6) 等
    • SRC_PORT:端口号(/etc/services 中列出的知名服务可以以其名称代替端口号),留空则表示针对所有端口
    • OPTIONS:可选项,值可以为 in(仅针对流入的报文)、out(仅针对流出的报文)、limit(src-addr src-port、dst-addr dst-port 等,用于限制源 IP 或 目标 IP 的连接数量)、icmptypes(仅在 PROTO 的位置指定为 icmp 时有效,如 ping 用的是类型 0,重定向用的是类型 5...)、keep-state(创建动态规则,允许当前规则对应的返回报文通过 ipfw)、via(指定网卡) 、setup(仅对 tcp 协议有效,这是 “tcpflags syn,!ack” 的别名简写,指本主机主动发起的对外连接请求可以通过,但本机响应外部主机请求的报文不能通过)等

語法详解

  • FIREWALL CONFIGURATION
    • ipfw [-q] add rule #-q 静默模式,不显示任何回应信息
    • ipfw [-defnNStT] [set N] show [rule | first-last ...] #-d 同时显示动态规则,-e 显示已经失效(expired)的动态规则,-f 返回任何信息,-n 仅测试語法不真正执行,-N 尝试解析地址与服务名,-S 显示指定规则所属的集合序号,-t 显示时间,-T 显示 UNIX 记元至今的秒数
    • ipfw [-f | -q] [set N] flush #清空指定集合内的所有规则,默认是序号为 0 的集合
    • ipfw [-q] [set N] {delete | zero | resetlog} [number ...] #删除集合中指定的规则或清空其计数
    • ipfw set [disable number ...] [enable number ...] #禁用或启用指定的规则集合
    • ipfw set move [rule] number to number #将集合中的全部或指定规则追加至目标集合
    • ipfw set swap number number #交换两个集合的序号
  • SYSCTL SHORTCUTS
    • ipfw enable {firewall | altq | one_pass | debug | verbose | dyn_keepalive} #启用指定的功能模块
    • ipfw disable {firewall | altq | one_pass | debug | verbose | dyn_keepalive} #禁用
  • LOOKUP TABLES
    • ipfw [set N] table name create create-options
    • ipfw [set N] table name destroy
    • ipfw [set N] table name modify modify-options
    • ipfw [set N] table name swap name
    • ipfw [set N] table name add table-key [value]
    • ipfw [set N] table name add [table-key value ...]
    • ipfw [set N] table name atomic add [table-key value ...]
    • ipfw [set N] table name delete [table-key ...]
    • ipfw [set N] table name lookup addr
    • ipfw [set N] table name lock
    • ipfw [set N] table name unlock
    • ipfw [set N] table {name | all} list
    • ipfw [set N] table {name | all} info
    • ipfw [set N] table {name | all} detail
    • ipfw [set N] table {name | all} flush
  • DUMMYNET CONFIGURATION (TRAFFIC SHAPER AND PACKET SCHEDULER)
    • ipfw {pipe | queue | sched} number config config-options
    • ipfw [-s [field]] {pipe | queue | sched} {delete | list | show} [number ...]
  • INTERNAL DIAGNOSTICS
    • ipfw internal iflist
    • ipfw internal talist
    • ipfw internal vlist

Tips

  • 若不指定 in 与 out,ipfw 同时作用于出入报文
  • 规则中可以使用 and、or、not 等逻辑判断
  • 多个网址或端口可以复合书写,最外层的 { ... } 与其中内容之间必須留有空格
    • ipfw add pass all from { 10.1.2.0/24{20,35,66,18} or 10.2.3.0/28{6,3,11} } to any

示例一:

试验场景——本机开启路由功能,充当内网的 Gateway

  • #!/bin/sh
    #更改默认的 65535 条规则为 accept
    sysctl net.inet.ip.fw.default_to_accept=1
    # 清空旧规则
    ipfw -q -f flush
    # 设置变量
    CMD="ipfw -q add"
    InterFace="alc0"     # 网卡名称
    # alc1 指连接内部安全网络的网卡名称
    $CMD 00005 allow all from any to any via alc1
    # 放行回环网口
    $CMD 00010 allow all from any to any via lo0
    
    ######## 如下为流出报文控制策略 ############################
    # 监测动态规则
    $CMD 00101 check-state
    # 允许訪问 DNS 服务器并生成动态规则允许对端响应报文通过
    $CMD 00110 allow tcp from any to ntp1.nl.net 53 out via $InterFace setup keep-state
    $CMD 00111 allow udp from any to ntp1.nl.net 53 out via $InterFace keep-state
    # 同上,允许 DHCP 服务通过
    $CMD 00120 allow tcp from any to 113.11.1.3 67 out via $InterFace setup keep-state
    $CMD 00120 allow udp from any to 113.11.1.3 67 out via $InterFace keep-state
    # 同上,允许 HTTP 与 HTTPs 通过
    $CMD 00200 allow tcp from any to any 80 out via $InterFace setup keep-state
    $CMD 00220 allow tcp from any to any 443 out via $InterFace setup keep-state
    # 同上,允许 MAIL 服务通过
    $CMD 00230 allow tcp from any to any 25 out via $InterFace setup keep-state
    $CMD 00231 allow tcp from any to any 110 out via $InterFace setup keep-state
    # 允许所有内网主动发起的对外 icmp 证求,如 ping
    $CMD 00250 allow icmp from any to any out via $InterFace keep-state
    # 允许 NTP 服务请求通过并返回結果
    $CMD 00260 allow tcp from any to any 123 out via $InterFace setup keep-state
    $CMD 00260 allow udp from any to any 123 out via $InterFace keep-state
    # 允许对外发出 SSH 请求
    $CMD 00280 allow tcp from any to any 22 out via $InterFace setup keep-state
    # 丢弃所有不在以上规则范围内的流出报文
    $CMD 00299 deny log all from any to any out via $InterFace
    
    ############ 如下为流入报文控制策略 ###########################
    # 拒绝所有来自不可路由的私有 IP 地址的报文
    $CMD 00300 deny all from 192.168.0.0/16 to any in via $InterFace     #内网 IP 段
    $CMD 00301 deny all from 172.16.0.0/12 to any in via $InterFace      #同上
    $CMD 00302 deny all from 10.0.0.0/8 to any in via $InterFace         #同上
    $CMD 00303 deny all from 127.0.0.0/8 to any in via $InterFace        #回环口
    $CMD 00304 deny all from 0.0.0.0/8 to any in via $InterFace          #回环口别名
    $CMD 00305 deny all from 169.254.0.0/16 to any in via $InterFace     #DHCP 自定义地址
    $CMD 00306 deny all from 192.0.2.0/24 to any in via $InterFace       #科学文档测试地址
    $CMD 00307 deny all from { 204.152.64.0/23 or 20.20.20.0/24 } to any in via $InterFace    #已被收购的 SUN 公司远古时代的預留测试地址
    $CMD 00308 deny all from 224.0.0.0/3 to any in via $InterFace        #D类与E类組播地址
    # 丢弃所有 icmp 请求报文
    $CMD 00310 deny icmp from any to any in via $InterFace
    # 113 端口是用于 Windows 一种 tcp 认証服务
    $CMD 00315 deny tcp from any to any 113 in via $InterFace
    # 丢弃所有 Windows Netbios 域服务请求
    $CMD 00320 deny tcp from any to any 137 in via $InterFace
    $CMD 00321 deny tcp from any to any 138 in via $InterFace
    $CMD 00322 deny tcp from any to any 139 in via $InterFace
    $CMD 00323 deny tcp from any to any 81 in via $InterFace
    # 丢弃所有到达的非首段分片报文(分片攻击:通过将端口号从第一个分片中剥离绕过防火墙)
    $CMD 00330 deny all from any to any frag in via $InterFace
    # 丢弃所有不符合动态规则的 tcp 响应报文
    $CMD 00332 deny tcp from any to any established in via $InterFace
    # 允许连接本机的 webserver,但限制每个源 IP 至多能建立两个连接
    $CMD 00400 allow tcp from any to me 80 in via $InterFace setup limit src-addr 2
    # 允许连接本机 SSH 服务,但限制至多建立两个连接
    $CMD 00410 allow tcp from any to me 22 in via $InterFace setup limit src-addr 2
    # 丢弃不符合以上任一规则的流入报文并将信息记入日志
    $CMD 00499 deny log all from any to any in via $InterFace
    ...
    # 如果同时设置多个网口的规则,统一丢弃规则外报文
    $CMD 00999 deny log all from any to any 

示例二:

带宽及延迟控制

  • # 指定网络流入的数据包全部转发至本机 5000 端口
    ipfw divert 5000 ip from 192.168.2.0/24 to any in
    # 所有发往本机 77 端口的报文,转交給第 1000 条规则进行处理,第 10 条规则仅定义跳转的条件
    ipfw add 10 skipto 1000 all from any to me 77 in
    # 限制 outbound 方向的最小延迟为 250ms,最大带宽为 1Mbit/s
    ipfw add pipe 1 ip from any to any out
    ipfw pipe 1 config delay 250ms bw 1Mbit/s

     ...

转载于:https://www.cnblogs.com/hadex/p/6068493.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值