通过iptables进行wireguard的权限管理
一、背景
由于目前openvpn的开源方案,链接VPN如果路由过多的话会导致链接速度变慢,效果非常的不理想,并且当iptables规则多的时候,转发明显性能下降;
准备采用wireguard的方式来代替openvpn的隧道协议,但是wireguard目前没有一个很好的权限管理方案;
二、服务端
2.1、安装wireguard
curl -O https://raw.githubusercontent.com/atrandys/wireguard/master/wg_mult.sh && chmod +x wg_mult.sh && ./wg_mult.sh
2.2、设置访问权限
环境变量:WG_PEER_IP可以获取连接着的IP地址
PostUp = /path/to/script.sh
PostDown = /path/to/teardown.sh
然后在根据情况设置ipset和iptables
2.3、脚本案例
#!/bin/bash
result=$(curl -s "VPN后端连接接口地址" | jq '.d')
permissionsAccept=($(jq '.accept[]' <<<$result))
permissionsDrop=($(jq '.drop[]' <<<$result))
# 创建新的ipset组
ipset create $WG_PEER_IP hash:ip
ipset create ${WG_PEER_IP}-drop hash:ip
for ((i=0;i<${#permissionsAccept[@]};i++))
do
ipset add $WG_PEER_IP ${permissionsAccept[$i]//\"/}
done
for ((i=0;i<${#permissionsDrop[@]};i++))
do
ipset add ${WG_PEER_IP}-drop ${permissionsDrop[$i]//\"/}
done
# 设置iptables生效规则
iptables -A FORWARD -s $WG_PEER_IP -m set --match-set ${WG_PEER_IP}-drop dst -j DROP
iptables -A FORWARD -s $WG_PEER_IP -m set --match-set $WG_PEER_IP dst -j ACCEPT
# 剩余没有匹配到的全部拒绝
iptables -A FORWARD -s $WG_PEER_IP -j DROP
if [ $code = -1 ];then
exit 1 ;
fi
#!/bin/bash
iptables -D FORWARD -s $WG_PEER_IP -m set --match-set $WG_PEER_IP dst -j ACCEPT
iptables -D FORWARD -s $WG_PEER_IP -m set --match-set ${WG_PEER_IP}-drop dst -j DROP
iptables -D FORWARD -s $WG_PEER_IP -j DROP
ipset destroy $WG_PEER_IP
ipset destroy ${WG_PEER_IP}-drop
2.4、常用脚本变量
WIREGUARD_PUBKEY: Wireguard 公钥。默认值为 $HOME/.wireguard/wg0.key.
WIREGUARD_PRIVATE_KEY: Wireguard 私钥。默认值为 $HOME/.wireguard/wg0.pem.
WIREGUARD_SVC_IP: Wireguard 服务 IP 地址。默认值为 127.0.0.1.
WIREGUARD_SVC_PORT: Wireguard 服务端口。默认值为 9443.
WIREGUARD_DEV_IP: 设备的 IP 地址。默认值为 127.0.0.1.
WIREGUARD_DEV_PORT: 设备的端口。默认值为 9443.
WIREGUARD_NETWORK: Wireguard 网络名称。默认值为 mywireguard.
WIREGUARD_CHANNEL: Wireguard 通道名称。默认值为 channel0.
WIREGUARD_CONTROL_URL: Wireguard 控制页面 URL。
WG_PEER_DNS: Wireguard 通道的 peer DNS 名称。默认值为 mywireguard.com.
WG_PEER_IP: Wireguard 通道的 peer IP 地址。默认值为 192.168.0.100.
WG_CHANNEL_FAILURE_ACTION: Wireguard 通道失败时的处理方式。默认值为 continue.
WG_CONTROL_URL: Wireguard 控制页面 URL。
WG_PRIVATE_KEY: Wireguard 私钥。默认值为 $HOME/.wireguard/wg0.pem.
WG_PUBKEY: Wireguard 公钥。默认值为 $HOME/.wireguard/wg0.key.
WG_DEV_IP: 设备的 IP 地址。默认值为 127.0.0.1.
WG_DEV_PORT: 设备的端口。默认值为 9443.
WG_NETWORK: Wireguard 网络名称。默认值为 mywireguard.
WG_CHANNEL: Wireguard 通道名称。默认值为 channel0.
WG_CONTROL_MODE: Wireguard 控制模式 (0 表示禁用,1 表示启用)。默认值为 0.
三、客户端
3.1、二进制文件
我对wireguard-tools的评价 {{< rating 5 5>}}
mac: https://www.123pan.com/s/cRk7Vv-NLSsH.html 提取码:2Zcc
这里要注意下,Mac因为他必须是sudo运行,但是不可能每次都输入密码,那么基本上等于废弃了,所以需要做一个初始化,把
wg-quick设置成免输入密码的,代码如下:
echo "$USER ALL=(ALL) NOPASSWD:这里改成你wg-quick的绝对路径" | sudo tee -a /etc/sudoers.d/wireguard
win: https://github.com/WireGuard/wireguard-tools/blob/master/src/wg-quick/darwin.bash
win的可以直接使用这个脚本,也可以自己编译一个
通过iptables进行wireguard的权限管理的更多相关文章
- # openVPN+LDAP AD认证,组权限管理
# openVPN+LDAP AD认证,组权限管理 原创内容http://www.cnblogs.com/elvi/p/7661178.html # openVPN+LDAP AD认证,组权限管理 # ...
- sudoers权限管理
该/etc/sudoers文件的权限管理很完善,覆盖了linux中的各种命令,各种shell.编辑器等等,在此留作以后作为参考. # This file MUST be edited with the ...
- Linux 服务器用户权限管理改造方案与实施项目
Linux 服务器用户权限管理改造方案与实施项目 在了解公司业务流程后,提出权限整改方案改进公司超级权限root泛滥的现状. 我首先撰写方案后,给boss看,取得boss的支持后,召集大家开会讨论. ...
- MySQL高级学习笔记(二):mysql配置文件、mysql的用户与权限管理、mysql的一些杂项配置
文章目录 mysql配置文件 二进制日志log-bin 错误日志log-error 数据文件 两系统 Myisam存放方式 innodb存放方式 如何配置 mysql的用户与权限管理 MySQL的用户 ...
- Android权限管理之RxPermission解决Android 6.0 适配问题
前言: 上篇重点学习了Android 6.0的运行时权限,今天还是围绕着Android 6.0权限适配来总结学习,这里主要介绍一下我们公司解决Android 6.0权限适配的方案:RxJava+RxP ...
- Android权限管理之Android 6.0运行时权限及解决办法
前言: 今天还是围绕着最近面试的一个热门话题Android 6.0权限适配来总结学习,其实Android 6.0权限适配我们公司是在今年5月份才开始做,算是比较晚的吧,不过现在Android 6.0以 ...
- Android权限管理之Permission权限机制及使用
前言: 最近突然喜欢上一句诗:"宠辱不惊,看庭前花开花落:去留无意,望天空云卷云舒." 哈哈~,这个和今天的主题无关,最近只要不学习总觉得生活中少了点什么,所以想着围绕着最近面试过 ...
- SpringMVC+Shiro权限管理【转】
1.权限的简单描述 2.实例表结构及内容及POJO 3.Shiro-pom.xml 4.Shiro-web.xml 5.Shiro-MyShiro-权限认证,登录认证层 6.Shiro-applica ...
- Android6.0运行时权限管理
自从Android6.0发布以来,在权限上做出了很大的变动,不再是之前的只要在manifest设置就可以任意获取权限,而是更加的注重用户的隐私和体验,不会再强迫用户因拒绝不该拥有的权限而导致的无法安装 ...
- Oracle 表空间和用户权限管理
一. 表空间 Oracle数据库包含逻辑结构和物理结构. 数据库的物理结构指的是构成数据库的一组操作系统文件. 数据库的逻辑结构是指描述数据组织方式的一组逻辑概念以及它们之间的关系. 表空间是数据库逻 ...
随机推荐
- 如何使用 Megatron-LM 训练语言模型
在 PyTorch 中训练大语言模型不仅仅是写一个训练循环这么简单.我们通常需要将模型分布在多个设备上,并使用许多优化技术以实现稳定高效的训练.Hugging Face Accelerate 的创建 ...
- JavaWeb编程面试题——Spring Boot
引言 面试题==知识点,这里所记录的面试题并不针对于面试者,而是将这些面试题作为技能知识点来看待.不以刷题进大厂为目的,而是以学习为目的.这里的知识点会持续更新,目录也会随时进行调整. 关注公众号:编 ...
- S32DS学习日志:debug文件和烧录的.hex文件
工程导入之后先clean一下,重新编译生成的文件默认在Production文件下面,得重新设置 折腾半天用jlink烧录没反应,原来是这里错了. production下的文件是用来用来集成bootlo ...
- 解密Prompt系列9. 模型复杂推理-思维链COT基础和进阶玩法
终于写了一篇和系列标题沾边的博客,这一篇真的是解密prompt!我们会讨论下思维链(chain-of-Thought)提示词究竟要如何写,如何写的更高级.COT其实是Self-ASK,ReACT等利用 ...
- Cronjob 定时任务
Job: 负责处理任务,即仅执行一次的任务,它保证批处理任务的一个或多个Pod成功结束. CronJob: 则就是在Job上加上了时间调度. 我们用Job这个资源对象来创建一个任务,我们定一个Job来 ...
- memcached使用中踩的一些坑
背景 线上启用memcached(以下简称mc)作为热点缓存组件已经多年,其稳定性和性能都经历住了考验,这里记录一下踩过的几个坑. 大key存储 某年某月某日,观察mysql的读库CPU占比有些异常偏 ...
- PHP文件包含总结
1.文件包含小知识 1.1 包含函数 PHP共有4个与文件包含相关的函数: include require include_once require_once include与include_once ...
- 11k+ Star 一款更适合中国用户的开源 BI 工具
在当今数字化时代,数据分析和可视化成为企业决策和发展的重要支撑,很多 BI 工具昂贵的许可费用,让许多中小型企业用户和个人用户望而却步,开源 BI 工具的出现,让其成为很多用户进行数据分析展示的首选. ...
- 温故知新,signalR、RSA加密、ConcurrentQueue队列
这是一个用户密码异步加解密的Demo,包含了RSA非对称加密,ConcurrentQueue线程安全队列使用,signalR实时推送加解密信息等内容. 说在前面的话 距离上次更新已然快过去一年了,这中 ...
- knn和线性分类器
一.knn算法概述 knn首选是最简单的分类算法,其是有监督学习的分类算法之一. 二.knn算法过程 knn(k nearest neighbors k个最近的邻居):knn是当预测一个新的值x的时候 ...