ACL 類別

簡單的存取控制清單。

存取控制清單由「允許」和「拒絕」兩部分組成,用於控制存取。使用「all」或「*」來比對任何位址。若要比對特定位址,請使用 IPAddr 能理解的任何位址或位址遮罩。

範例

list = %w[
  deny all
  allow 192.168.1.1
  allow ::ffff:192.168.1.2
  allow 192.168.1.3
]

# From Socket#peeraddr, see also ACL#allow_socket?
addr = ["AF_INET", 10, "lc630", "192.168.1.3"]

acl = ACL.new
p acl.allow_addr?(addr) # => true

acl = ACL.new(list, ACL::DENY_ALLOW)
p acl.allow_addr?(addr) # => true

常數

ALLOW_DENY

預設為允許

DENY_ALLOW

預設為拒絕

VERSION

ACL 的目前版本

公開類別方法

new(list=nil, order = DENY_ALLOW) 按一下以切換來源

使用 list 和評估 order DENY_ALLOWALLOW_DENY 建立新的 ACL

ACL list 是「允許」或「拒絕」的 Array,以及位址或位址遮罩,或「all」或「*」來比對任何位址

%w[
  deny all
  allow 192.0.2.2
  allow 192.0.2.128/26
]
# File lib/drb/acl.rb, line 179
def initialize(list=nil, order = DENY_ALLOW)
  @order = order
  @deny = ACLList.new
  @allow = ACLList.new
  install_list(list) if list
end

公開實例方法

allow_addr?(addr) 按一下以切換來源

允許來自 addrinfo addr 的連線嗎?必須格式化為 Socket#peeraddr

["AF_INET", 10, "lc630", "192.0.2.1"]
# File lib/drb/acl.rb, line 203
def allow_addr?(addr)
  case @order
  when DENY_ALLOW
    return true if @allow.match(addr)
    return false if @deny.match(addr)
    return true
  when ALLOW_DENY
    return false if @deny.match(addr)
    return true if @allow.match(addr)
    return false
  else
    false
  end
end
allow_socket?(soc) 按一下以切換來源

允許來自 Socket soc 的連線嗎?

# File lib/drb/acl.rb, line 191
def allow_socket?(soc)
  allow_addr?(soc.peeraddr)
end
install_list(list) 按一下以切換來源

ACL 條目的 list 新增到這個 ACL

# File lib/drb/acl.rb, line 223
def install_list(list)
  i = 0
  while i < list.size
    permission, domain = list.slice(i,2)
    case permission.downcase
    when 'allow'
      @allow.add(domain)
    when 'deny'
      @deny.add(domain)
    else
      raise "Invalid ACL entry #{list}"
    end
    i += 2
  end
end