1.条件 固定mac地址

为限制ip的访问控制 通常使用iptables 限制ip部分 ,如果设备更换ip地址,则原有的ip地址列表规则会失效
在局域网内 使用根据设备的mac地址配置ebtables限制目标设备的访问控制.
但是,这样也是有缺陷的,如设备每隔一段时间会使用产生新的,随机的mac地址进行连接,则ebtables的mac匹配会失效
为了限制这种情况,可以设置允许已知的mac连接,未识别的禁止其连接.
做到这种情况
1.1.wifi连接的可使用 允许列表中mac地址连接 如图

1.2.使用 arp 静态绑定

这样做是为了迫使 连接设备使用固定的mac 进行连接 从而能够使用ebtables 达到限制目的

2. openwrt 安装配置ebtables

2.1 安装

opkg install ebtables ebtables-utils kmod-ebtables-ipv4 kmod-ebtables-ipv6

查看版本

 ebtables -V

2.2 创建为启动脚本
创建文件 /etc/init.d/efw 内容如下

#!/bin/sh /etc/rc.common
#/etc/init.d/efwSTART=21
STOP=21cleartables() {/usr/sbin/ebtables -t $1 -F
/usr/sbin/ebtables -t $1 -X
/usr/sbin/ebtables -t $1 -Z
}boot() {start
}start() {ebtables -P INPUT ACCEPT
ebtables -P FORWARD ACCEPT
ebtables -P OUTPUT ACCEPT
# 1.基于mac地址检查 禁止指定的mac设备访问内网 除了一些dns dhcp ntp之外,允许访问外网
# 1. filter mac address  which is disallowed to access intranet except some dns dhcp ntp , extranet is allowed
# 2. 基于mac地址检查 禁止指定的mac设备访问外网 只能访问内网,禁止访问外网
# 2. filter mac address which is disallowed to access extranet , intranet is allowed#sh files is locale  in /usr/efw/*
#由于分为多个执行脚本 把他们放置在  /usr/efw/目录下执行 SHDIR=/usr/efw
for file in $(ls $SHDIR)
do
if [ -x $SHDIR/$file ]; then
#need arg:  add
sh  $SHDIR/$file add
fi
done}stop() {cleartables filter
cleartables nat
#cleartables broute/usr/sbin/ebtables -P INPUT ACCEPT
/usr/sbin/ebtables -P FORWARD ACCEPT
/usr/sbin/ebtables -P OUTPUT ACCEPT
}restart() {cleartables filter
cleartables nat
#cleartables broute
start
}

上面的脚本会 遍历调用 /usr/efw 目录下的每个可执行文件 执行动作为 sh $SHDIR/$file add
如果 /usr/efw 目录为空 则仅执行
/usr/sbin/ebtables -P INPUT ACCEPT
/usr/sbin/ebtables -P FORWARD ACCEPT
/usr/sbin/ebtables -P OUTPUT ACCEPT

/usr/efw 目录 每个可执行文件 可以 各自完成自己的功能 如
disallow_extranet.sh 指定mac地址 禁止访问外网,允许访问内网
disallow_intranet.sh 指定mac地址 禁止访问内网,允许访问外网

2.3 /usr/efw/disallow_extranet.sh
禁止访问外网,允许访问内网

#!/bin/sh #set -x#用法: 单独 调用
#添加 sh disallow-extranet.sh add   ;  删除   sh disallow-extranet.sh earse
# 这样就不必重启 efw服务#配合 /etc/init.d/efw 使用
#/usr/efw/disallow_extranet.sh#手动开关 ENABLE=0 禁用 ; =1 启动
ENABLE=1
[ "$ENABLE" = 1 ] || exit 1#基于mac地址过滤 禁止访问外网 允许访问内网
#-----在这里添加需要限制的mac地址
#DISALLOW_MACLIST="11:11:11:22:22:22,22:22:22:11:11:11"#使用文件记录禁止的mac地址  一个行 用逗号分隔
DISALLOW_MACFILE=/usr/efw/maclist_extranet
[ -e $DISALLOW_MACFILE ] || echo "11:22:33:44:55:66,22:22:22:33:33:33"|tee $DISALLOW_MACFILE#需要16进制 这样grep才能匹配
VARMARK=0x123132IPV4_A="10.0.0.0/8"
#IPV4_A_RFC6598="100.64.0.0/10"
IPV4_B="172.16.0.0/12"
IPV4_C="192.168.0.0/16"
IPV4_LOCAL="169.254.0.0/16"
IPV4_MCAST="224.0.0.0/4"
IPV4_BCAST="255.255.255.255"# 会变成  fc00::/fc00:: 但效果一样
IPV6_LOCAL="fc00::/6"add() {ebtables -t nat -N NOEXTRANET_MARK
ebtables -t nat -A PREROUTING -j NOEXTRANET_MARK
#ebtables -t nat -A NOEXTRANET_MARK --among-src ${DISALLOW_MACLIST} -j mark --mark-set $VARMARK
ebtables -t nat -A NOEXTRANET_MARK --among-src-file $DISALLOW_MACFILE -j mark --mark-set $VARMARK#INPUT
ebtables -t filter -N NOEXTRANET_IN
ebtables -t filter -A INPUT --mark $VARMARK -j NOEXTRANET_IN
#IPV4
ebtables -t filter -A NOEXTRANET_IN -p ipv4 --ip-dst $IPV4_A -j ACCEPT
ebtables -t filter -A NOEXTRANET_IN -p ipv4 --ip-dst $IPV4_B -j ACCEPT
ebtables -t filter -A NOEXTRANET_IN -p ipv4 --ip-dst $IPV4_C -j ACCEPT
ebtables -t filter -A NOEXTRANET_IN -p ipv4 --ip-dst $IPV4_BCAST -j ACCEPT
ebtables -t filter -A NOEXTRANET_IN -p ipv4 --ip-dst $IPV4_MCAST -j ACCEPT
ebtables -t filter -A NOEXTRANET_IN -p ipv4 --ip-dst $IPV4_LOCAL -j ACCEPT
ebtables -t filter -A NOEXTRANET_IN -p ipv4 -j DROP
#IPV6
ebtables -t filter -A NOEXTRANET_IN -p ipv6 --ip6-dst $IPV6_LOCAL -j ACCEPT
ebtables -t filter -A NOEXTRANET_IN -p ipv6  -j DROP#FORWARD
ebtables -t filter -N NOEXTRANET_FWD
ebtables -t filter -A FORWARD --mark $VARMARK -j NOEXTRANET_FWD
#IPV4
ebtables -t filter -A NOEXTRANET_FWD -p ipv4 --ip-dst $IPV4_A -j ACCEPT
ebtables -t filter -A NOEXTRANET_FWD -p ipv4 --ip-dst $IPV4_B -j ACCEPT
ebtables -t filter -A NOEXTRANET_FWD -p ipv4 --ip-dst $IPV4_C -j ACCEPT
ebtables -t filter -A NOEXTRANET_FWD -p ipv4 --ip-dst $IPV4_BCAST -j ACCEPT
ebtables -t filter -A NOEXTRANET_FWD -p ipv4 --ip-dst $IPV4_MCAST -j ACCEPT
ebtables -t filter -A NOEXTRANET_FWD -p ipv4 --ip-dst $IPV4_LOCAL -j ACCEPT
ebtables -t filter -A NOEXTRANET_FWD -p ipv4 -j DROP
#IPV6
ebtables -t filter -A NOEXTRANET_FWD -p ipv6 --ip6-dst $IPV6_LOCAL -j ACCEPT
ebtables -t filter -A NOEXTRANET_FWD -p ipv6 -j DROP}earse() {ebtables -t nat -F NOEXTRANET_MARK
ebtables -t nat -X NOEXTRANET_MARK
ebtables -t filter -D INPUT --mark $VARMARK -j NOEXTRANET_IN
ebtables -t filter -D FORWARD --mark $VARMARK -j NOEXTRANET_FWD
ebtables -t filter -F NOEXTRANET_FWD
ebtables -t filter -X NOEXTRANET_FWD
ebtables -t filter -F NOEXTRANET_IN
ebtables -t filter -X NOEXTRANET_IN
}#reload mac list DISALLOW_MACLIST
#修改 DISALLOW_MACLIST 变量后 调用reload重新载入规则 而不是整个efw重载
#sh /usr/efw/disallow_extranet.sh  reload
reload() {if [ -n  "$(ebtables -t nat -L|grep  "mark-set $VARMARK")" ]; then
ebtables -t nat -F NOEXTRANET_MARK
ebtables -t nat -A NOEXTRANET_MARK --among-src-file $DISALLOW_MACFILE -j mark --mark-set $VARMARK
fi
}# MAIN
case "$1" inadd)add;;earse)earse;;reload)reload;;*)exit 1 ;;
esacexit 0

2.4 /usr/efw 脚本规范
需要提供几个选项
add 添加规则
earse 删除
reload 重载mac列表


/etc/init.d/efw 的调用 sh $SHDIR/$file add 启动时创建规则
或者
修改 /usr/efw/maclist_extranet 的mac文件
只能一个行 每个mac地址用逗号分隔
修改完成后调用
sh /usr/efw/disallow_extranet.sh reload 以重载当前的规则 而不是重启整个 /etc/init.d/efw restart

openwrt 使用ebtables限制设备访问外网或内网相关推荐

  1. Openwrt无线中继设置并访问外网

    Openwrt无线中继设置并访问外网 本篇博文参考来自:http://blog.csdn.net/pifangsione/article/details/13162023 配置目标 主路由器使用AP模 ...

  2. 工控攻防演示——从外网到内网控制系统设备的入侵

    给实验室写的文章,在安全客上发表,在这里再发下 一.概述 实验目的通过工控靶场学习web渗透.内网渗透.工控安全相关知识技能. 靶场信息本实验通过vmware 搭建了靶场的外网和内网环境,在内网环境中 ...

  3. 极路由2运行python安装_极路由2 大麦22D/203/204刷OPENWRT实现NDR客户端拨号AND开机自启动AND内网无法访问...

    极路由2 大麦22D/203/204刷OPENWRT实现NDR客户端拨号AND开机自启动AND内网无法访问 时间:2020-04-09 02:57:30 / 来源:爱搜路由 / 作者:转载 基于极路由 ...

  4. 电脑同时访问外网和内网?双路由的详细配置及讲解

    电脑同时上外网和内网?双路由的详细配置讲解 一.准备工作 1.要有两张网卡 电脑要有两张网卡. 一般笔记本电脑都有有线网卡和无线网卡:当然外置接usb的有线/无线网卡也是可以的.有些台式机可能会只有1 ...

  5. 一台电脑同时访问外网和内网

    一台电脑同时访问外网和内网 一台电脑同时访问外网和内网 应用场景:一台电脑同时接入外网和内网,实现内网和外网同时访问. 需要硬件:一个外置usb网卡,一根接内网的网线,一根接外网的外网线 第一步:调试 ...

  6. 解决外网与内网或内网之间的通信,NAT穿透

    在网络编码中会发现程序在局域网中是可以适用的,但是在外网与内网之间和内网与内网之间就不可行. 问题就在于NAT.首先介绍下NAT. NAT的作用NAT(Network Address Translat ...

  7. 教程——从外网远程控制内网电脑

    由于希望在图书馆时也能通过笔记本控制寝室的主机,所以研究了一下远程控制,但寝室的网并不属于简单的一层内网,所以踩了一些坑,在这里把经验分享一下 (一) 在同一局域网下的远程控制 首先测试在同一局域网时 ...

  8. 如何实现外网跨网远程控制内网计算机?快解析来解决

    远程控制,是指管理人员在异地通过计算机网络异地拨号或双方都接入Internet等手段,连通需被控制的计算机,将被控计算机的桌面环境显示到自己的计算机上,通过本地计算机对远方计算机进行配置.软件安装程序 ...

  9. 内网、外网、内网穿透、端口映射、IPV4、IPV6场景探讨

    先附上各自概念,概念性的东西对于我们有一个大概的认识,那么实际使用与生活中又有哪些场景,来一一列举一些,了解下互联网的魅力! 一.内网 内网也叫局域网(Local Area Network,LAN), ...

最新文章

  1. java.lang.UnsupportedClassVersionError: Bad version number in .class file
  2. 重磅!可以发朋友圈和搜一搜的PC端微信来了,赶紧来下载!
  3. 游标 每天给每个用户发钱
  4. 空间统计分析_【空间分析】地理探测器原理
  5. logging synchronous
  6. linux 随机函数,Linux系统产生随机数方法
  7. PMP考试通关宝典,考生必看
  8. 编写一个JSP页面,利用Scriptlet编写一段计算代码,要求用0做除数,并使用page指令将该错误信息显示在另一个JSP页面上,产生的错误信息为“错误,不能用0做除数.“
  9. 一封来自 1985 年程序员的辞职信
  10. 计算机 access数据库,计算机等级考试二级ACCESS数据库基本使用方法
  11. 如何给PDF文件添加水印?
  12. 清除异常关闭进程的任务栏托盘区残留图标
  13. Java计算当前应用的tps_Java TPS实现
  14. Activiti详解与案例
  15. 实验项目名称:微波技术与天线CST仿真实验
  16. Cluster04 - Ceph概述 部署Ceph集群 Ceph块存储
  17. 从零开始之uboot、移植uboot2017.01(七、board_init_r分析)
  18. 设计模式 - 创建型模式_原型模式
  19. ADI Blackfin DSP处理器-BF533的开发详解66:MP3解码(含源码)
  20. 电子计算机 冯诺依曼,冯诺依曼计算机的特点

热门文章

  1. 抖客联盟API如何申请?
  2. Linux boot 时 USB 的初始化过程分析2
  3. 使用api制作我的足迹地图
  4. 黑苹果——推荐台式机(翻译自tonymacX86)
  5. python七段数码管绘制实验报告_python—绘制七段数码管
  6. 【自学笔记】前端面试题之CSS(部分HTML)
  7. テクニカルアーティストに必要な資料集めようぜ!
  8. Kali metasploit 更新以及问题 Unable to find a spec satisfying metasploit-framework (>= 0) in the set.
  9. 口语语汇单词篇(7)
  10. Windows CMD DOS命令