当需要针对数据流量或者报文进行一些过滤的时候,需要一个抓取要过滤的工具。类似于过滤石灰粉和石子的过程,那么我们是需要一个滤网或者其他的过滤工具来进行筛选。经过筛选获取到的石子,是丢弃还是用作其他用途,并不是过滤工具来决定的,它是取决于调用工具的时候,来判断,是否需要这些石子,或者丢弃。
ACL(访问控制列表)就提供了类似于滤网的功能,它可以精准匹配到想要抓取的报文或者流量,然后在不同的场景下,去应用ACL的功能。
ACL是由多条不同的规则组成的,这些规则组成了一个滤网的功能,通过permit/deny的动作,来决定是抓取还是不抓取。
rule 5 permit source 192.168.1.0 0.0.0.255
rule 10 deny source 192.168.2.0 0.0.0.255
rule 15 deny
上面是ACL的三条规则,rule是规则关键字,后面的数字5,10,15是规则编号,这个编号在配置的时候可以指明也可以不指明,但是一条规则就是一个编号,编号不能重复。如果不指明编号,默认第一条规则的编号是5,后面每增加一条规则,编号就会加5,也就是说默认的编号是从5开始,步长是5,即每增加一个编号,编号就会在上一条规则编号的基础上加5。之所以留出编号的间隔,是为了能够适应各种应用场景,方便在规则之间,插入新的规则。ACL在进行匹配的时候,是根据编号的顺序,从小到大一条条往下进行的,一旦由匹配到的规则,则不会继续向下匹配,如果匹配到最后都没有,则命中默认规则,默认是deny所有。规则编号的默认步长可以修改,修改了步长以后,所有的规则根据新的步长重新自动排号,为新步长的整倍数,顺序不会改变。
ACL有两个动作,permit和deny,permit相当于石子,在漏网里;deny相当于石灰粉,即过滤掉了,不在漏网中。
source是指根据源来进行过滤的,是过滤的条件,当然也可以有其他的一些过滤条件。也就是在选对象的时候,可以身高进行筛选,也可以根据体重等其他属性来进行筛选。
192.168.1.0是网络前缀,后面紧跟的0.0.0.255是通配符,不是网络掩码。通配符为0则表示不可变,为1表示可变。即前面24为不能变,必须是192.168.1,后面8位可以自由组合。
| 网络前缀 | 192.168.1.00000000 |
| 通配符 | 0.0.0.11111111 |
| 表示范围 | 192.168.1.0-192.168.1.255 |
通配符是为了精准匹配要控制的范围,可以不连续。
反掩码是子网掩码进行非运算得出的,由于子网掩码是连续的,所以反掩码也必须是连续的。
ACL根据编号可以分为一下几类:
基本ACL:编号范围2000-2999,可以通过匹配源IP进行过滤。
高级ACL:编号范围3000-3999,可以通过匹配源目IP、源目端口、协议等进行匹配。
二层ACL:编号范围4000-4999,可以通过匹配源目MAC等进行匹配。
用户自定义ACL:编号范围5000-5999
用户ACL:编号范围6000-6999
ACL的编号不同于规则中的rule编号,ACL的编号相当于是水缸编号,规则编号则是水缸中的每一条鱼的编号。
案例一:
匹配192.168.1.1单个IP地址
acl 2000
rule 5 permit source 192.168.1.1 0
案例二:
匹配192.168.1.0/24整个网段的地址
acl 2000
rule 5 permit source 192.168.1.0 0.0.0.255
案例三:
匹配192.168.1.0/24整个网段的地址,拒绝192.168.2.0/24网段的地址
acl 2000
rule 5 permit source 192.168.1.0 0.0.0.255
rule 10 deny source 192.168.2.0 0.0.0.255
案例四:
匹配192.168.1.0,192.168.1.1,192.168.1.2,192.168.1.3
acl 2000
rule 15 permit source 192.168.1.0 0.0.0.3
ACL规则的标准是精确匹配,简化规则,虽然也可以写4条permit规则,但是地址过多的时候,工作量剧增,因此可以通过通配符整合为一条规则。
分析:
| 192.168.1.0 | 192.168.1.00000000 |
| 192.168.1.1 | 192.168.1.00000001 |
| 192.168.1.2 | 192.168.1.00000010 |
| 192.168.1.3 | 192.168.1.00000011 |
| 通配符 | 0.0.0.3 |
由于4个地址的前30位都是不变的,只有后面两位是变动的,因此通配符位0.0.0.3
案例五:
匹配192.168.1.12——192.168.1.19
acl 2000
rule 5 permit source 192.168.1.12 0.0.0.3
rule 10 permit source 192.168.1.16 0.0.0.3
分析:
| 192.168.1.12 | 192.168.1.00001100 |
| 192.168.1.13 | 192.168.1.00001101 |
| 192.168.1.14 | 192.168.1.00001110 |
| 192.168.1.15 | 192.168.1.00001111 |
| 192.168.1.16 | 192.168.1.00010000 |
| 192.168.1.17 | 192.168.1.00010001 |
| 192.168.1.18 | 192.168.1.00010010 |
| 192.168.1.19 | 192.168.1.00010011 |
由于12-15之间不变的位相同,16-19之间不变的位相同,由于是两个不同的不变位,所以没办法集合位一条规则进行匹配,因此需要两条规则。
12-15的前缀和通配符为:192.168.1.12 0.0.0.3
16-19的前缀和通配符为:192.168.1.16 0.0.0.3
案例六:
匹配192.168.1.0/24的奇偶数地址
acl 2000
rule 5 permit source 192.168.1.0 0.0.0.254 ----仅匹配偶数地址
acl 2001
rule 5 permit source 192.168.1.1 0.0.0.254 ----仅匹配奇数地址
案例七:
匹配除了RFC1918以外的其他地址
acl number 2000
rule 5 deny source 10.0.0.0 0.0.0.255
rule 10 deny source 172.16.0.0 0.15.255.255
rule 15 deny source 192.168.0.0 0.0.255.255
rule 20 permit
可以在过滤数据包时调用,匹配的数据包通过,不匹配的数据包不通过。
可以在路由策略中调用。
可以在Qos中调用。
可以在团体属性中调用等。
在过滤数据包时,分为inbound和outbound两个方向。
inbound方向:数据发送来时,先查看接口下是否调用了inbound方向的ACL,没有则直接接收;有则查看是否允许通过,permit则接收数据,deny则丢弃数据。
outbound方向:数据发送时,先查看路由表,无路由则不转发,有路由,再先查看路由接口下是否调用了outbound方向的ACL,没有则直接转发;有则查看是否允许通过,permit则转发数据,deny则不转发数据。
在outbound方向时,如果是本设备始发的数据,则ACL不生效。
拓扑:

描述:要求R1和R2不能互访,R1也不能访问R4,其他可以互相访问。
基本信息:
| 设备 | 接口 | IP地址 | 子网掩码 | 网关 |
| PC1 | E0/0/1 | 192.168.1.1 | 255.255.255.0 | 192.168.1.254 |
| PC2 | E0/0/1 | 192.168.2.1 | 255.255.255.0 | 192.168.2.254 |
| PC3 | E0/0/1 | 192.168.3.1 | 255.255.255.0 | 192.168.3.254 |
| PC4 | E0/0/1 | 192.168.4.1 | 255.255.255.0 | 192.168.4.254 |
| R1 | G0/0/0 | 10.1.12.1 | 255.255.255.0 | |
| G0/0/1 | 192.168.1.254 | 255.255.255.0 | ||
| G0/0/2 | 192.168.2.254 | 255.255.255.0 | ||
| R2 | G0/0/0 | 10.1.12.2 | 255.255.255.0 | |
| G0/0/1 | 192.168.3.254 | 255.255.255.0 | ||
| G0/0/2 | 192.168.4.254 | 255.255.255.0 |
R1配置:
[r1-GigabitEthernet0/0/0]ip address 10.1.12.1 255.255.255.0 --配置接口IP
[r1-GigabitEthernet0/0/1]ip address 192.168.1.254 255.255.255.0 --配置接口IP
[r1-GigabitEthernet0/0/2]ip address 192.168.2.254 255.255.255.0 --配置接口IP
[r1]ip route-static 192.168.3.0 255.255.255.0 10.1.12.2 ---配置静态路由
[r1]ip route-static 192.168.4.0 255.255.255.0 10.1.12.2 ---配置静态路由
[r1]acl 2000 ---创建基本ACL 2000
[r1-acl-basic-2000]rule 5 deny source 192.168.1.0 0.0.0.255 ----deny源192.168.1.0
[r1-acl-basic-2000]rule 10 permit ----其他默认permit
[r1-GigabitEthernet0/0/2]traffic-filter outbound acl 2000 ---在接口的出方向调用acl 2000
R2配置:
[r2-GigabitEthernet0/0/0]ip address 10.1.12.2 255.255.255.0 --配置接口IP
[r2-GigabitEthernet0/0/1]ip address 192.168.3.254 255.255.255.0 --配置接口IP
[r2-GigabitEthernet0/0/2]ip address 192.168.4.254 255.255.255.0 --配置接口IP
[r2]ip route-static 192.168.1.0 255.255.255.0 10.1.12.2 ---配置静态路由
[r2]ip route-static 192.168.2.0 255.255.255.0 10.1.12.2 ---配置静态路由
[r2]acl 2000 ---创建基本ACL 2000
[r2-acl-basic-2000]rule 5 deny source 192.168.1.0 0.0.0.255 ----deny源192.168.1.0
[r2-acl-basic-2000]rule 10 permit ----其他默认permit
[r2-GigabitEthernet0/0/2]traffic-filter outbound acl 2000 ---在接口的出方向调用acl 2000
在R1上ping测试:



类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc
我有一个包含模块的模型。我想在模块中覆盖模型的访问器方法。例如:classBlah这显然行不通。有什么想法可以实现吗? 最佳答案 您的代码看起来是正确的。我们正在毫无困难地使用这个确切的模式。如果我没记错的话,Rails使用#method_missing作为属性setter,因此您的模块将优先,阻止ActiveRecord的setter。如果您正在使用ActiveSupport::Concern(参见thisblogpost),那么您的实例方法需要进入一个特殊的模块:classBlah
我正在使用Sequel构建一个愿望list系统。我有一个wishlists和itemstable和一个items_wishlists连接表(该名称是续集选择的名称)。items_wishlists表还有一个用于facebookid的额外列(因此我可以存储opengraph操作),这是一个NOTNULL列。我还有Wishlist和Item具有续集many_to_many关联的模型已建立。Wishlist类也有:selectmany_to_many关联的选项设置为select:[:items.*,:items_wishlists__facebook_action_id].有没有一种方法可以
是否有类似“RVMuse1”或“RVMuselist[0]”之类的内容而不是键入整个版本号。在任何时候,我们都会看到一个可能包含5个或更多ruby的列表,我们可以轻松地键入一个数字而不是X.X.X。这也有助于rvmgemset。 最佳答案 这在RVM2.0中是可能的=>https://docs.google.com/document/d/1xW9GeEpLOWPcddDg_hOPvK4oeLxJmU3Q5FiCNT7nTAc/edit?usp=sharing-知道链接的任何人都可以发表评论
当我在Rails控制台中按向上或向左箭头时,出现此错误:irb(main):001:0>/Users/me/.rvm/gems/ruby-2.0.0-p247/gems/rb-readline-0.4.2/lib/rbreadline.rb:4269:in`blockin_rl_dispatch_subseq':invalidbytesequenceinUTF-8(ArgumentError)我使用rvm来管理我的ruby安装。我正在使用=>ruby-2.0.0-p247[x86_64]我使用bundle来管理我的gem,并且我有rb-readline(0.4.2)(人们推荐的最少
我正在使用Ruby2.1.1和Rails4.1.0.rc1。当执行railsc时,它被锁定了。使用Ctrl-C停止,我得到以下错误日志:~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.2/lib/spring/client/run.rb:47:in`gets':Interruptfrom~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.2/lib/spring/client/run.rb:47:in`verify_server_version'from~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.
我将我的Rails应用程序部署到OpenShift,它运行良好,但我无法在生产服务器上运行“Rails控制台”。它给了我这个错误。我该如何解决这个问题?我尝试更新rubygems,但它也给出了权限被拒绝的错误,我也无法做到。railsc错误:Warning:You'reusingRubygems1.8.24withSpring.UpgradetoatleastRubygems2.1.0andrun`gempristine--all`forbetterstartupperformance./opt/rh/ruby193/root/usr/share/rubygems/rubygems
我正在尝试编写一个将文件上传到AWS并公开该文件的Ruby脚本。我做了以下事情:s3=Aws::S3::Resource.new(credentials:Aws::Credentials.new(KEY,SECRET),region:'us-west-2')obj=s3.bucket('stg-db').object('key')obj.upload_file(filename)这似乎工作正常,除了该文件不是公开可用的,而且我无法获得它的公共(public)URL。但是当我登录到S3时,我可以正常查看我的文件。为了使其公开可用,我将最后一行更改为obj.upload_file(file
说在前面这部分我本来是合为一篇来写的,因为目的是一样的,都是通过独立按键来控制LED闪灭本质上是起到开关的作用,即调用函数和中断函数。但是写一篇太累了,我还是决定分为两篇写,这篇是调用函数篇。在本篇中你主要看到这些东西!!!1.调用函数的方法(主要讲语法和格式)2.独立按键如何控制LED亮灭3.程序中的一些细节(软件消抖等)1.调用函数的方法思路还是比较清晰地,就是通过按下按键来控制LED闪灭,即每按下一次,LED取反一次。重要的是,把按键与LED联系在一起。我打算用K1来作为开关,看了一下开发板原理图,K1连接的是单片机的P31口,当按下K1时,P31是与GND相连的,也就是说,当我按下去时
在我的Character模型中,我添加了:字符.rbbefore_savedoself.profile_picture_url=asset_path('icon.png')end但是,对于数据库中已存在的所有角色,它们的profile_picture_url为nil。因此,我想进入控制台并遍历所有这些并进行设置。在我试过的控制台中:Character.find_eachdo|c|c.profile_picture_url=asset_path('icon.png')end但这给出了错误:NoMethodError:undefinedmethod`asset_path'formain:O