Linux如何禁用ping

1.通过修改配置参数

执行以下命令来关闭ping请求的应答。

[root@localhost etc]# echo “1” > /proc/sys/net/ipv4/icmp_echo_ignore_all

执行以下命令来开启ping请求的应答。

[root@localhost etc]# echo “0” > /proc/sys/net/ipv4/icmp_echo_ignore_all

通过上图可以看出执行完命令之后,确实不能够ping通了,接着改为0之后又可以ping通了。但是上图配置的这种方式只是临时的,只对当前会话有用,当重启之后,就恢复了,所以有没有啥办法是重启之后对任何会话都适用的呢?还确实有这种能够使修改的配置长期生效,在以后的重启后都能够使服务器的ping不能够应答。配置方式如下,在/etc/sysctl.conf文件中增加以下命令行:

net.ipv4.icmp_echo_ignore_all = 1

保存文件,接着执行以下命令使其生效。

sysctl -p

2,通过iptables

iptables是Linux命令行防火墙,也可以配置规则禁用ping流量。在Linux服务器上通过iptables来禁用ping请求,请运行以下命令。首先来检测一下iptables的版本。

[root@localhost ~]# iptables -V

iptables是Linux命令行防火墙,它允许我们根据一组规则管理传入和传出流量。新增了两条规则丢掉ping请求和ping应答。以下规则用于正常禁用与服务器之间的 ping 操作。

[root@localhost ~]# sudo iptables -A INPUT -p icmp –icmp-type echo-request -j DROP
[root@localhost ~]## sudo iptables -A OUTPUT -p icmp –icmp-type echo-reply -j DROP

上面是关闭ping请求和应答的iptables。那么如何恢复ping请求和ping应答呢?其实很简单,把刚才那两条规则删除掉即可,删除通过-D来删除,新增是通过-A来新增。

[root@localhost ~]# iptables -D OUTPUT -p icmp –icmp-type echo-reply -j DROP
[root@localhost ~]# iptables -D INPUT -p icmp –icmp-type echo-request -j DROP

tc命令使用总结

查看queue状态

查看所有网卡 ​​tc qdisc ls

查看指定网卡 tc qdisc show dev enp0s3​

delay延迟 tc qdisc add dev enp0s3 root netem delay 1000ms​

命令详解
qdisc: 类型为 queuing discipline,不懂的请先查询一下基本概念
add: add a new rule
dev eth0: rules will be applied on device eth0
root: modify the outbound traffic scheduler (aka known as the egress qdisc)
netem: use the network emulator to emulate a WAN property
delay: the network property that is modified
1000ms: introduce delay of 1000 ms

执行前

执行后

delay最后还是有两个参数

命令1.增加振幅

delay不是一个固定的值,而是在后面这个参数的增加减少幅度内变动

tc qdisc add dev enp0s3 root netem delay 1000ms 500ms​

可以看到delay的幅度在500(1000-500)和1500(1000+500)之间了。

命令2. uniform variation with correlation value

tc qdisc add dev enp0s3 root netem delay 1000ms 500ms 20%​

使振幅根据uniform variation with correlation value发生变化。

命令3. distribution normal正态分布变化

tc qdisc add dev enp0s3 root netem delay 1000ms 500ms distribution normal​

Packet Loss丢包 tc qdisc add dev enp0s3 root netem loss 50%​

Packet Corruption 包损 tc qdisc add dev enp0s3 root netem corrupt 50%​

通过PING看不出corruption,包的传送都没有问题的

Packet Duplicates 重复包 tc qdisc add dev enp0s3 root netem duplicate 50%​

通过PING看不出Duplicates,包的传送都没有问题的

Bandwidth limit限制带宽 tc qdisc add dev enp0s3 root tbf rate 1mbit burst 32kbit latency 400ms

参数说明:
tbf: use the token buffer filter to manipulate traffic rates
rate: sustained maximum rate
burst: maximum allowed burst
latency: packets with higher latency get dropped

其他操作

删除 tc qdisc del dev enp0s3 root​

修改 tc qdisc change dev enp0s3 root netem delay 1000ms​

通常,要对网卡进行流量控制的配置,需要进行如下的步骤:

1、为网卡配置一个队列

2、在该队列上建立分类

3、根据需要建立子队列和子分类

4、为每个分类建立过滤器

下面,将以HTB队列为主,结合需求来讲述TC的使用。假设eth0出口有100Mbit/s的带宽,分配给WWW 、E-mail和Telnet三种数据流量,其中分配给WWW的带宽为40Mbit/s,分配给Email的带宽为40Mbit/s,分配给Telnet的带宽为20Mbit/s。

需要注意的是, 在TC 中使用下列的缩写表示相应的带宽:

  • Kbps:kiIobytes per second,即 “千字节每秒”
  • Mbps:megabytes per second,即 “兆字节每秒 ”
  • Kbit:kilobits per second,即 “千比特每秒”
  • Mbit:megabits per second,即 “兆比特每秒”

有关队列的TC命令的一般形式:

# tc qdisc [add|change|replace|link] dev DEV [parent qdisk-id|root][handle qdisc-id] qdisc[qdisc specific parameters]

 1、创建HTB队列

为网卡etho配置一个HTB队列的tc命令:

# tc qdisc add dev eth0 root handle 1: htb default 11

  • add 表示要添加
  • dev eth0 表示要操作的网卡为eth0
  • root 表示为网卡eth0添加的是一个根队列
  • handle 1: 表示队列的句柄为1:
  • htb 表示要添加的队列为HTB队列
  • default 11 是htb特有的队列参数,意思是所有未分类的流量都将分配给类别1:11

2、为根队列创建相应的类别

有关类别的TC一般命令形式:

# tc class [add|change|replace] dev DEV parent qdisc-id [classid class-id] qdisc [qdisc specific parameters]

可以使用以下3个命令为根队列1创建三个类别,分别是1:11、1:12、1:13

tc class add dev eth0 parent 1: classid 1:11 htb rate 40mbit ceil 40mbit

tc class add dev eth0 parent 1: classid 1:12 htb rate 40mbit ceil 40mbit

tc class add dev eth0 parent 1: classid 1:13 htb rate 40mbit ceil 20mbit

各项的含义:

  • parent 1: 表示类别的父亲为根队列1:
  • classid 1:11 表示创建一个标识为1:11的类别
  • rate 40mbit 表示系统将为该类别确保带宽40mbit
  • ceil 40mbit 表示该类别的最高可占用带宽为40mbi

3、为各个类别设置过滤器

有关过滤器的tc一般命令:

# tc filter [add|change|replace] dev DEV [parent qdisc-id|root] protocol protocol prio priority filtertype [filtertype specific parameters] flowid flow-id

由于需要将WWW、E-mail、Telnet三种流量分配到三个类别,即上述1:11、1:12和1:13,因此,需要创建三个过滤器,如下面的三个命令:

# tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dport 80 0xffff flowid 1:11
# tc filter add dev eth0 prtocol ip parent 1:0 prio 1 u32 match ip dport 25 0xffff flowid 1:12
# tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dport 23 oxffff flowid 1:13

各项的含义:

  • protocol ip 表示该过滤器应该检查报文分组的协议字段
  • prio 1 表示它们对报文处理的优先级是相同的,对于不同优先级的过滤器,系统将按照从小到大的优先级顺序来执行过滤器,对于相同的优先级,系统将按照命令的先后顺序执行
  • 这几个过滤器还用到了u32选择器(命令中u32后面的部分)来匹配不同的数据流。以第一个命令为例,判断的是dport字段,如果该字段与Oxffff进行与操作的结果是80,则 flowid 1:11 表示将把该数据流分配给类别1:11

Linux系统中有多个命令可用于控制带宽,下面将介绍常用的几个命令。

Linux系统中有多个命令可用于控制带宽,下面将介绍常用的几个命令。

1. tc命令:tc命令是Linux系统中最常用的带宽控制工具之一,它可以用于控制网络流量的速率、延迟、丢包等。下面是tc命令的一些常用选项和用法:

– tc qdisc add:添加一个队列规则
– tc class add:添加一个分类规则
– tc filter add:添加一个过滤规则
– tc qdisc del:删除一个队列规则
– tc class del:删除一个分类规则
– tc filter del:删除一个过滤规则
– tc qdisc show:显示当前的队列规则
– tc class show:显示当前的分类规则
– tc filter show:显示当前的过滤规则

2. wondershaper命令:wondershaper是一个小型的脚本工具,可以方便地控制网络带宽。通过wondershaper命令,可以设置网络的最大传输速率、最大接收速率,以及设置延迟和丢包。

– wondershaper eth0 1024 256:限制eth0接口的最大传输速率为1024kbps,最大接收速率为256kbps
– wondershaper clear eth0:清除eth0接口上的带宽限制

3. trickle命令:trickle命令可以控制进程的带宽使用,通过限制进程的上传和下载速度,来达到控制带宽的目的。

– trickle -d 1024 -u 256 :限制命令的下载速度为1024kbps,上传速度为256kbps

4. htb工具:htb是Linux系统中一个非常强大的带宽控制工具,它可以用于创建复杂的带宽控制策略。

– htb init:初始化htb工具
– htb rate 1Gbit:设置根类别的速率为1Gbps
– htb class add dev eth0 parent 1: classid 1:1 htb rate 100Mbit:为eth0接口添加一个类别,限制带宽为100Mbps
– htb class change dev eth0 parent 1: classid 1:1 htb rate 200Mbit:修改eth0接口的类别,将带宽限制改为200Mbps
– htb delete:删除所有的htb规则

5. iptables命令:iptables是Linux系统中用于配置网络防火墙的工具,它也可以用于限制网络带宽。

– iptables -A INPUT -m limit –limit 10/s -j ACCEPT:设置输入流量的带宽限制为每秒10个包
– iptables -A OUTPUT -m limit –limit 10/s -j ACCEPT:设置输出流量的带宽限制为每秒10个包
– iptables -A INPUT -m limit –limit 10/s -j DROP:设置输入流量的带宽限制为每秒10个包,超过限制则丢弃
– iptables -A OUTPUT -m limit –limit 10/s -j DROP:设置输出流量的带宽限制为每秒10个包,超过限制则丢弃

以上是常用的几个Linux带宽控制命令。通过使用这些命令,可以灵活地控制网络的带宽使用,满足不同的需求。

WonderShaper 安装与使用指南

WonderShaper 安装与使用指南

项目地址:https://gitcode.com/gh_mirrors/wo/wondershaper

1. 项目介绍

WonderShaper 是一个脚本工具,由 Bert Hubert 等人开发,用于限制网络适配器的带宽。它允许用户自定义下载和上传速率,适用于家庭网络中的流量管理或者测试不同网络条件对应用程序性能的影响。WonderShaper 遵循 GPL-2.0 许可协议。

2. 项目快速启动

步骤一:克隆仓库

首先,打开终端并克隆 WonderShaper 的 Git 仓库:

git clone https://github.com/magnific0/wondershaper.gitcd wondershaper

步骤二:安装

在终端中运行以下命令以安装 WonderShaper:

sudo make install

步骤三:设置开机启动

要让 WonderShaper 在系统启动时自动运行,执行:

sudo systemctl enable wondershaper.servicesudo systemctl start wondershaper.service

步骤四:使用 WonderShaper

查看帮助信息:

/wondershaper -h

设置网络接口的带宽限制,例如限制 eth0 接口的下载速率为 1Mbit/s,上传速率为 512Kbit/s:

sudo /wondershaper -a eth0 -d 1024 -u 512

要清除已设置的限制:

sudo /wondershaper -c -a eth0

3. 应用案例和最佳实践

  • 优化家庭网络:通过分配不同设备的网络带宽,确保关键任务如视频会议、在线学习或游戏的稳定性。
  • 模拟低速网络环境:测试你的应用在慢速连接上的表现,以优化用户体验。
  • 故障排查:临时限速某个接口,以确定是否与带宽相关的问题有关。

最佳实践建议在调整带宽限制前记录原始配置,并定期检查 WonderShaper 的设置,以保持其有效性。

4. 典型生态项目

虽然 WonderShaper 是一个独立工具,但它常与其他网络管理和监控工具一起使用,比如:

  • iftop:实时显示网络流量信息。
  • nethogs:按进程显示网络带宽使用情况。
  • collectdPrometheus:收集系统性能数据,包括网络利用率,用于长期监控和分析。

结合这些工具,你可以更全面地管理和监控网络资源。


以上即为 WonderShaper 的安装与使用指南,希望对你有所帮助。在实践中如有疑问或发现任何问题,请查阅官方仓库的 Issue 或者向社区寻求支持。

rustdesk自建服务器

1. 安装pm2

sudo apt update && sudo apt upgrade;
sudo apt install npm;
sudo npm install -g pm2;

2.安装rustdesk server

sudo apt install wget
wget --no-check-certificate https://github.com/rustdesk/rustdesk-server/releases/download/1.1.6/rustdesk-server-linux-x64.zip
unzip rustdesk-server-linux-x64.zip

3. 启动

pm2 start hbbs
pm2 start hbbr
pm2 startup
pm2 save

开放防火墙 TCP(21115, 21116, 21117, 21118, 21119)
UDP(21116)

ID服务器: curl ip.sb
Key: cat id_*.pub

PM2常用命令:

  1. pm2 start <script_file|config_file> [options] 启动指定应用,如pm2 start index.js –name httpServer;
  2. pm2 stop <appName> [options] 停止指定应用,如pm2 stop httpServer;
  3. pm2 list  把所有pm2启动实例列举出来,注意:pm2 stop 某个项目后,该项目还会存在pm2 list 的列表里面, 只是状态是 stop, 要想去掉该项目,用pm2 delete
  4. pm2 reload|restart <appName> [options]  重启指定应用,如pm2 restart httpServer;
  5. pm2 show <appName> [options] 显示指定应用详情,如pm2 show httpServer;
  6. pm2 delete <appName> [options] 删除指定应用,如pm2 delete httpServer,如果修改应用配置行为,最好先删除应用后,重新启动方才生效,如修改脚本入口文件;
  7. pm2 kill 杀掉pm2管理的所有进程;
  8. pm2 logs <appName>  查看指定应用的日志,即标准输出和标准错误;
  9. pm2 monit 监控各个应用进程cpu和memory使用情况;
  10. pm2 startOrReload <appName> 如果项目没有启动就执行 start  如果项目正在运行 就执行relaod

方法二

2.防火墙设置

系统重装好了,我们需要在服务器的防火墙中开放RustDesk需要的端口。放行以下端口

TCP:21115-21119
UDP:21116
温馨提示:
有些服务器Linux系统预装了防火墙,你需要给以上端口放行,或者关闭防火墙!

安装 RustDesk服务器

1.使用FinalShell服务器管理软件

2.更新系统源和软件

apt update      //更新源
apt upgrade     //更新软件 

运行一键安装Rustdesk脚本

1.系统重启好后,粘贴RustDesk Server一键安装脚本,回车开始安装。

一键安装脚本:

wget https://raw.githubusercontent.com/techahold/rustdeskinstall/master/install.sh
chmod +x install.sh
./install.sh

一键更新脚本:

wget https://raw.githubusercontent.com/smianao/rustdeskinstall/master/update.sh && chmod +x update.sh && ./update.sh

查看并复制密钥Key备用

客户端配置

1.主控端电脑,安装rustdesk客户端

2. 手动配置

主界面依次点击设置-网络-解锁网络设置,ID/中继服务器设置如下:

ID服务器:为你云服务器IP地址
中继服务器:为你云服务器IP地址
API服务器:空
Key:上一步获取的key

3. 通过导入导出配置

ID/中继服务器界面,可导入导出配置

4.将配置写入rustdesk.exe 文件名中

将Windows客户端名称修改为如下格式,发给被控电脑使用即可。

rustdesk-host=<你的服务器IP/域名>,key=<你的key>.exe

利用GitHub Actions编译客户端(更加隐私安全)

如果担心中继服务器信息泄露,或者有更严苛的分发需求,可以使用GitHub Actions,将中继服务器以及key等信息,直接编译到客户端里。被控端直接运行你编译的客户端,无需再填入中继服务器等信息,就可以正常实现被控。但是使用GitHub Actions编译的时间会比较长一些,一般是1小时多些。也是本人比较推荐的方式,可以做到比较安全的连接。

1.准备工作

编译客户端的前提,你需要一个Github账号,没有的可以注册一个,非常简单,这里就不演示了!
https://github.com/

2.创建分支

访问Github的RustDesk项目
登录Github账号
点击 “Fork”创建分支项目,简单说,就是把该项目克隆到你的github仓库
参数保持默认,点击这里创建,等待创建完成。
到这里就创建完成了

3.设置环境变量

将服务器等信息,填入变量,以便接下来的编译。
回到刚刚创建的分支项目,转到 “Settings → Secrets and variables → Actions”
单击“New repository secret”,变量名:RENDEZVOUS_SERVER,对应值填写服务器IP/域名
点击 “Add secret”
单击“New repository secret”,变量名: RS_PUB_KEY,对应值填写key
点击 “Add secret”
单击“New repository secret”,变量名: API_SERVER,对应值填写API地址
点击 “Add secret”

4.启用工作流权限

在您刚刚创建的 fork上,转到“Settings → Actions → General”
右侧,上方勾选“Allow all actions and reusable workflows”
点击”Save”
滑动到底部,在 Workflow permissions 下启用 “Read and write permissions”
点击“Save”

5.启动工作流

点击上方“Actions”(项目横向主菜单)
在左侧,选择 “Flutter Nightly Build” 然后在右侧,单击 “Enable workflow”
最后,您可以单击 “Run workflow” 为所有支持的平台构建 RustDesk 客户端

6.客户端下载

Github编译的时间可能会久一点,过一个小时左右,你可以在你创建的分支项目下,看是否有编译好的客户端,如果刚好有编译好的,你便可以下载对应平台的客户端使用。

7.客户端使用演示

以Windows平台为例,双击运行或安装编译好的客户端,进入网络查看,没有对应的服务器信息,因为我们直接将该信息编译到程序里,操作使用下,可以正常远控。这样,我们便可直接将客户端,发给被控端使用,而无需再手动编辑服务器等信息,可谓非常便捷!

Oracle Cloud甲骨文云初始配置

用Putty登陆入,用户名是opc或ubuntu

切换到root角色

sudo -i
  1. 安装相关依赖

CentOS如下

yum -y install wget
yum update -y && yum install curl -y

Ubuntu如下

apt-get install wget
apt-get update -y && apt-get install curl -y
  1. 删除、关闭、打开各自系统的无用附件、防火墙、端口及规则

CentOS系统

删除多余附件

systemctl stop oracle-cloud-agent
systemctl disable oracle-cloud-agent
systemctl stop oracle-cloud-agent-updater
systemctl disable oracle-cloud-agent-updater

停止firewall

systemctl stop firewalld.service

禁止firewall开机启动

systemctl disable firewalld.service


Ubuntu系统

开放所有端口

iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -F

Ubuntu镜像默认设置了Iptable规则,关闭它

apt-get purge netfilter-persistent
reboot

或者强制删除

rm -rf /etc/iptables &amp;&amp; reboot

ssh

方法一:

使用下例中ssky-keygen和ssh-copy-id,仅需通过3个步骤的简单设置而无需输入密码就能登录远程Linux主机。 
ssh-keygen 创建公钥和密钥。 
ssh-copy-id 把本地主机的公钥复制到远程主机的authorized_keys文件上。
ssh-copy-id 也会给远程主机的用户主目录(home)和~/.ssh, 和~/.ssh/authorized_keys设置合适的权限 。

步骤1: 用 ssh-key-gen 在本地主机上创建公钥和密钥
ligh@local-host$ ssh-keygen -t  rsa
Enter file in which to save the key (/home/jsmith/.ssh/id_rsa):[秘钥文件名] 
Enter passphrase (empty for no passphrase): [秘钥密码(直接输入回车即为不带密码的秘钥)]
Enter same passphrase again: [重复输入秘钥密码]
Your identification has been saved in /home/jsmith/.ssh/id_rsa.
Your public key has been saved in /home/jsmith/.ssh/id_rsa.pub. 
The key fingerprint is: 33:b3:fe:af:95:95:18:11:31:d5:de:96:2f:f2:35:f9 
ligh@local-host

步骤2: 用 ssh-copy-id 把公钥复制到远程主机上
ligh@local-host$ ssh-copy-id -i ~/.ssh/id_rsa.pub  root@192.168.0.3
ligh@remote-host‘s password:
Now try logging into the machine, with ―ssh ?remote-host‘‖, and check in: 
.ssh/authorized_keys to make sure we haven‘t added extra keys that you weren‘t expecting.
[注: ssh-copy-id 把密钥追加到远程主机的 .ssh/authorized_key 上.]

步骤3: 直接登录远程主机
ligh@local-host$ ssh remote-host 
Last login: Sun Nov 16 17:22:33 2008 from 192.168.1.2 
[注: SSH 不会询问密码.] 
ligh@remote-host$ 
[注: 你现在已经登录到了远程主机上]

方法二

一、概述

1、就是为了让两个linux机器之间使用ssh不需要用户名和密码。采用了数字签名RSA或者DSA来完成这个操作

2、模型分析

假设 A 为客户机器,B 为目标机;

要达到的目的:
A机器ssh登录B机器无需输入密码;
加密方式选 rsa|dsa均可以,默认dsa

二、具体操作流程

单向登陆的操作过程(能满足上边的目的):
1、登录A机器 
2、ssh-keygen -t [rsa|dsa],将会生成密钥文件和私钥文件 id_rsa,id_rsa.pub或id_dsa,id_dsa.pub
3、将 .pub 文件复制到B机器的 .ssh 目录, 并 cat id_rsa.pub >> ~/.ssh/authorized_keys
4、大功告成,从A机器登录B机器的目标账户,不再需要密码了;(直接运行 #ssh 用户名@ip )

http://blog.csdn.net/kongqz/article/details/6338690

以下两点注意:

1、配置私钥
a、使用命令ssh-keygen -t rsa生成密钥,会生成一个私钥和一个公钥,在提示输入passphrase时如果不输入,直接回车,那么以后你登录服务器就不会验证密码,否则会要求你输入passphrase,默认会将私钥放在/(用户名)/.ssh/id_rsa公钥放在
/用户名/.ssh/id_rsa.pub。
b、将公钥拷贝到远程服务器上的/(用户名)/.ssh/authorized_keys文件
(scp /用户名/.ssh/id_rsa.pub server:/用户名/.ssh/authorized_keys),注意,文件名一定要叫authorized_keys。权限600
c、客户端上保留私钥,公钥留不留都可以。也就是服务器上要有公钥,客户端上要有私钥。这样就可以实现无密码验证登录了。
2、如果想要获得最大化的安全性,禁止口令登录,可以修改远程主机上/etc/ssh/sshd_conf中的
PasswordAuthentication yes 改为
PasswordAuthentication no
也即只能使用密匙认证的openssh,禁止使用口令认证

1.禁用 root 用户通过 ssh 登录: 编辑 /etc/ssh/sshd_config,设置 PermitRootLogin 为 no 可禁止普通用户以 root 用户身份远程登录。
2.禁止对 SSH 进行基于密码的身份验证:编辑 /etc/ssh/sshd_config,设置 PasswordAuthentication 为 no 可禁止对 SSH 进行基于密码的身份验证。
注:若要禁止基于密码的身份验证,但允许对 root 执行基于私钥的身份验证,可设置 PermitRootLogin 为 prohibit-password 。

1、/etc/ssh/ssh_config配置文件

选项参数                                      说明
Host *                      选项“Host”只对能够匹配后面字串的计算机有效。“*”表示所有的计算机。
ForwardAgent no             设置连接是否经过验证代理(如果存在)转发给远程计算机。
ForwardX11 no                设置X11连接是否被自动重定向到安全的通道和显示集(DISPLAY set)
RhostsAuthentication no        设置是否使用基于rhosts的安全验证
RhostsRSAAuthentication no       设置是否使用用RSA算法的基于rhosts的安全验证
RSAAuthentication yes              设置是否使用RSA算法进行安全验证
PasswordAuthentication yes        设置是否使用口令验证
FallBackToRsh no                      设置如果用ssh连接出现错误是否自动使用rsh
UseRsh no                           设置是否在这台计算机上使用“rlogin/rsh”
BatchMode no            如果设为“yes”,passphrase/password(交互式输入口令)的提示将被禁止。当不能交互式输入口令的时候,这个选项对脚本文件和批处理任务十分有用
CheckHostIP yes         设置ssh是否查看连接到服务器的主机的IP地址以防止DNS欺骗。建议设置为“yes”
StrictHostKeyChecking no   如果设置成“yes”,ssh就不会自动把计算机的密匙加入“$HOME/.ssh/known_hosts”文件,并且一旦计算机的密匙发生了变化,就拒绝连接
IdentityFile ~/.ssh/identity        设置从哪个文件读取用户的RSA安全验证标识
Port 22                                   设置连接到远程主机的端口
Cipher blowfish                           设置加密用的密码
EscapeChar ~                              设置escape字符

2、/etc/ssh/sshd_config配置文件

Port 22            SSH 预设使用 22 这个 port,您也可以使用多的 port !
Protocol 2,1    选择的 SSH 协议版本,可以是 1 也可以是 2 ,如果要同时支持两者,就必须要使用 2,1 
ListenAddress 0.0.0.0       监听的主机适配卡!举个例子来说,如果您有两个 IP,分别是 192.168.0.100 及 192.168.2.20 ,那么只想要开放 192.168.0.100 时,就可以写如同下面的样式:
ListenAddress 192.168.0.100     只监听来自 192.168.0.100 这个 IP 的SSH联机。如果不使用设定的话,则预设所有接口均接受 SSH
PidFile /var/run/sshd.pid        可以放置 SSHD 这个 PID 的档案!左列为默认值
LoginGraceTime 600                当使用者连上 SSH server 之后,会出现输入密码的画面,在该画面中,在多久时间内没有成功连上 SSH server ,就断线!时间为秒!
Compression yes                                是否可以使用压缩指令?
HostKey /etc/ssh/ssh_host_key                  SSH version 1 使用的私钥
HostKey /etc/ssh/ssh_host_rsa_key              SSH version 2 使用的 RSA 私钥
HostKey /etc/ssh/ssh_host_dsa_key              SSH version 2 使用的 DSA 私钥
KeyRegenerationInterval 3600                    由前面联机的说明可以知道, version 1 会使用 server 的 Public Key ,每隔一段时间来重新建立一次!时间为秒!
ServerKeyBits 768                               Server key 的长度!
SyslogFacility AUTH                             当有人使用 SSH 登入系统的时候,SSH会记录信息
LogLevel INFO                                   登录记录的等级—》全部
PermitRootLogin no                               是否允许 root 登入!预设是允许的,但是建议设定成 no!
UserLogin no                                    在 SSH 底下本来就不接受 login 这个程序的登入!
StrictModes yes                          当使用者的 host key 改变之后,Server 就不接受联机
RSAAuthentication yes                    是否使用纯的 RSA 认证!?仅针对 version 1 !
PubkeyAuthentication yes                  是否允许 Public Key ?只有 version 2
AuthorizedKeysFile   .ssh/authorized_keys   设定若要使用不需要密码登入的账号时,那么那个账号的存放档案所在名
RhostsAuthentication no                       本机系统不使用 .rhosts , .rhosts 不安全!
IgnoreRhosts yes                              是否取消使用 ~/.ssh/.rhosts 来做为认证!
RhostsRSAAuthentication no    针对version 1使用 rhosts 档案在/etc/hosts.equiv配合 RSA 演算方式来进行认证!
HostbasedAuthentication no     这个项目与上面的项目类似,不过是给 version 2 使用的!
IgnoreUserKnownHosts no         是否忽略家目录内的 ~/.ssh/known_hosts 这个档案所记录的主机内容
PasswordAuthentication yes      密码验证当然是需要的!
PermitEmptyPasswords no         上面那一项如果设定为 yes 的话,这一项就最好设定为 no ,这个项目在是否允许以空的密码登入!
ChallengeResponseAuthentication yes   挑战任何的密码认证!所以,任何 login.conf 规定的认证方式,均可适用!
PAMAuthenticationViaKbdInt yes    是否启用其它的 PAM 模块!启用这个模块将会导致 PasswordAuthentication 设定失效!
 
与Kerberos 有关的参数设定!底下不用设定
KerberosAuthentication no
KerberosOrLocalPasswd yes
KerberosTicketCleanup yes
KerberosTgtPassing no
 
有关在 X-Window 底下使用的相关设定
X11Forwarding yes
X11DisplayOffset 10
X11UseLocalhost yes
 
PrintMotd no   登入后是否显示出一些信息呢?例如上次登入的时间、地点等,预设是 yes 为了安全,可以考虑改为 no 
PrintLastLog yes   显示上次登入的信息!预设也是 yes
KeepAlive yes       一般而言,如果设定这项目的话,那么 SSH Server 会传送KeepAlive 的讯息给 Client 端,以确保两者的联机正常!在这个情况下,任何一端死掉后, SSH 可以立刻知道!而不会有僵尸程序的发生!
UsePrivilegeSeparation yes    使用者的权限设定项目!
MaxStartups 10                同时允许几个尚未登入的联机画面
DenyUsers *                   设定受抵挡的使用者名称
AllowUsers *                  设定允许的使用者名称

zerotier 内网穿透

安装:curl -s https://install.zerotier.com | sudo bash

一.配置 Linux 的数据转发和路由控制

  • Linux 系统内核可以通过 sysctliptables 两个命令控制网络数据转.
  • 查看内核 IP 转发设置,0 表示处于关闭状态:
  • $ sudo sysctl net.ipv4.ip_forward
  • net.ipv4.ip_forward = 0
  • 编辑配置文件开启 Linxu 内核的 IP 数据转发:
  • sudo vim /etc/sysctl.conf
  • 将第 28 行的注释去掉,设置 net.ipv4.ip_forward=1
  • net.ipv4.ip_forward=1 # lin 28
  • 激活配置文件设置:
  • $ sudo sysctl -p
  • net.ipv4.ip_forward = 1
  • 查看内核 IP 转发设置,1 表示开启状态:
  • $ sudo sysctl net.ipv4.ip_forward
  • net.ipv4.ip_forward = 1

二.查看网口信息

$ ifconfig
可以发现,在 Ubuntu 上 enp123s0f0 用来接入真实物理网络,zt7u3fcxwr 用来接入 zerotier 虚拟网络. 注意后续命令中使用网口名称的地方~
使用 iptables 启用 enp123s0f0 及zt7u3fcxwr  的网络地址转换和 IP 伪装:
sudo iptables -t nat -A POSTROUTING -o enp123s0f0 -j MASQUERADE
sudo iptables -t nat -A POSTROUTING -o zt7u3fcxwr -j MASQUERADE

iptables -I FORWARD -i zthxxxx -j ACCEPT
iptables -I FORWARD -o zthxxxx -j ACCEPT
iptables -t nat -I POSTROUTING -o zthxxxx -j MASQUERADE





允许流量转发和跟踪活动连接:
sudo iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
接下来设置从zt7u3fcxwr 到 enp123s0f0 流量转发。 反向规则不是必需的,因为在本文所述场景下没有用到:
sudo iptables -A FORWARD -i zt7u3fcxwr -o enp123s0f0 -j ACCEPT

linux流量转发

iptables -t nat -A POSTROUTING -o vmbr0(真实网卡) -j MASQUERADE

iptables -A FORWARD -m conntrack –ctstate RELATED,ESTABLISHED -j ACCEPT

 iptables -A FORWARD -i zero网卡 -o vmbr0(真实网卡) -j ACCEPT

安装 apt-get install iptables-persistent

netfilter-persistent save (保持iptables规则)

  1. 加入网络命令‌:
    • 加入网络:zerotier-cli join 网络ID
    • 查看当前连接的网络列表:zerotier-cli listnetworks
  2. 查看状态和服务命令‌:
    • 查看Zerotier服务状态:zerotier-cli info
    • 启动Zerotier服务:sudo systemctl start zerotier-one.service
    • 设置Zerotier服务开机自启动:sudo systemctl enable zerotier-one.service
    • 停止Zerotier服务:sudo systemctl stop zerotier-one.service

流量转发

sudo iptables -t nat -A POSTROUTING -o $PHY_IFACE -j MASQUERADE sudo iptables -A FORWARD -i $PHY_IFACE -o $ZT_IFACE -m state –state RELATED,ESTABLISHED -j ACCEPT sudo iptables -A FORWARD -i $ZT_IFACE -o $PHY_IFACE -j ACCEPT

这三条 iptables 规则用于配置网络地址转换(NAT)和数据包转发;

含义如下:

  1. 规则 1: sudo iptables -t nat -A POSTROUTING -o $PHY_IFACE -j MASQUERADE这条规则在 nat 表的 POSTROUTING 链中添加了一条规则。-o $PHY_IFACE 表示这条规则适用于所有通过 $PHY_IFACE 这个网络接口(通常是物理接口)出去的数据包。-j MASQUERADE 指定了 NAT 操作中的伪装(masquerading)。这意味着,当数据包从 $PHY_IFACE 发送出去时,其源 IP 地址会被替换为 $PHY_IFACE 的 IP 地址。这通常用于允许内部网络通过一个公共 IP 地址进行外部通信;
  2. 规则 2: sudo iptables -A FORWARD -i $PHY_IFACE -o $ZT_IFACE -m state --state RELATED,ESTABLISHED -j ACCEPT这条规则在 filter 表的 FORWARD 链中添加了一条规则。-i $PHY_IFACE 表示适用于从 $PHY_IFACE 这个接口进入的数据包,-o $ZT_IFACE 表示这些数据包要转发到 $ZT_IFACE 这个接口。-m state --state RELATED,ESTABLISHED 指定了只有那些与已有连接相关或已经建立的连接的数据包才被接受(ACCEPT)。这个规则通常用于允许来自外部网络的返回流量进入内部网络,从而支持诸如 HTTP 会话等;
  3. 规则 3: sudo iptables -A FORWARD -i $ZT_IFACE -o $PHY_IFACE -j ACCEPT这条规则在 filter 表的 FORWARD 链中添加了一条规则。-i $ZT_IFACE 表示适用于从 $ZT_IFACE 这个接口进入的数据包,-o $PHY_IFACE 表示这些数据包要转发到 $PHY_IFACE 这个接口。-j ACCEPT 表示这些数据包会被接受并转发。这条规则允许来自 $ZT_IFACE 的流量经过路由器转发到 $PHY_IFACE,从而实现网络之间的数据传输;总结:
  • 第一条规则用于设置源地址伪装,允许内部网络设备通过一个公共 IP 地址进行外部通信;
  • 第二条规则允许返回流量和已经建立的连接的数据包从外部网络进入内部网络;
  • 第三条规则允许来自内部网络的数据包被转发到外部网络;

甲骨文云服务器Oracle cloud 分配并启用 IPv6 地址教程

过程1: 创建IPv6 CIDR块

(1)打开Oracle 虚拟云网络控制台

(2)选择需要添加IPv6的VCN
添加CIDR

(3)点击左侧菜单栏中的CIDR Blocks/Prefixes

(4)点击右侧界面中的 Add CIDR Block/IPv6 Prefix
添加CIDR

(5)勾选Assign an Oracle allocated IPv6 /56 preflx,并点击添加CIDR按钮

添加CIDR

(6)稍等一会后,你会发现在CIDR Blocks界面中多出了一个 /56 的 IPv6 段了

    将IPv6 CIDR块与子网关联

    1. 打开Oracle 虚拟云网络控制台
    2. 点击页面左侧边栏的 子网
    3. 选择使用中的子网
    4. 在做侧边栏中找到IPv6 Prefixes 进入并在右侧界面中点击Add IPv6 Prefix
    5. 在弹出的界面中勾选Assign an Oracle allocated IPv6 /64 prefix 在下面的输入框中输入2位16进制的代码

    过程2:更新安全列表规则

    要使实例能够通过 IPv6 发送和接收流量,您必须更新安全组规则以包含 IPv6 地址的规则。比如你的网站 80端口

    更新入站安全组规则

    1. 打开Oracle 虚拟云网络控制台
    2. 点击页面左侧边栏的 安全列表 并选择正在使用的列表。
    3. 在入站规则选项卡中,选择编辑入站规则。
    4. 对于允许 IPv4 流量的每条规则,选择添加规则并配置该规则以允许相应的 IPv6 流量。例如,要添加允许通过 IPv6 的所有 HTTP 流量的规则,请为“类型 ”和“源”选择HTTP。::/0
    5. 保存规则。

    过程3:更新路由表

    更新公有子网的路由表

    1. 打开Oracle 虚拟云网络控制台
    2. 点击页面左侧边栏的 路由表。选择正在使用的路由表
    3. 选择路由表。选择添加路由规则
    4. 选择添加路线。选择::/0目的地 。
    5. 保存更改。

    为实例分配IPv6地址

    1. 打开实例控制台
    2. 进入需要改为IPv6的实例详情页面
    3. 找到左侧边栏里的附加的 VNIC,并点击右侧的VNIC
    4. 选择左侧边栏里的IPv6 地址后选择右侧的分配IPv6地址,在弹出的页面中选择自动从 IPv6 前缀中分配
    5. 现在我们回到实例的管理面板,查看主机的详细信息,就会发现已经被分配了新的IPv6地址了。

    Linux win 系统使用 USBIP 远程共享 USB 设备

    操作步骤

    配置 USB Server

    • 在本地计算机上(Ubuntu),依次执行以下命令,安装 USBIP 并加载相关的内核模块。
      1. sudo apt-get install usbip
      2. sudo modprobe usbip-core
      3. sudo modprobe vhci-hcd
      4. sudo modprobe usbip_host
    • 插入 USB 设备,并执行以下命令,查询可用的 USB 设备。
      1. usbip list --local
      例如,在本地计算机上插入一个usb,返回如下结果:
    • busid 1-1 (1bc0:0055)
      unknown vendor : unknown product (1bc0:0055)
    • 记录 busid 的值,并依次执行以下命令,启动监听服务,指定 USBIP 端口号,共享 USB 设备。
      1. sudo usbipd -D [--tcp-port PORT]sudo usbip bind -b [busid]
      例如,USBIP 指定端口号为3240端口(即 USBIP 的默认端口),busid 为1-1,则执行以下命令:
      1. sudo usbipd -D
      2. sudo usbip bind -b 1-1
    • (可选)执行以下命令,创建 SSH 隧道,并使用端口监听。 说明没有公网 IP 的本地计算机,请执行此步骤。如您的本地计算机有公网 IP,请跳过此步骤。
      1. ssh -Nf -R USB/IP指定端口号:localhost:USB/IP指定端口号 root@your_hostyour_host
      表示云服务器的 IP 地址。 例如,USBIP 的端口号为3240端口,云服务器的 IP 地址为192.168.15.24,则执行以下命令:
      1. ssh -Nf -R 3240:localhost:3240 root@192.168.15.24
    • unknown vendor : unknown product (1bc0:0055)

    配置 USB Client

    1. 依次执行以下命令,下载 USB/IP 源。
      1. rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
      2. rpm -ivh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
    2. 依次执行以下命令,安装 USBIP。
      1. yum -y install kmod-usbip usbip-utils
      2. modprobe usbip-core
      3. modprobe vhci-hcd
      4. modprobe usbip-host
    3. 执行以下命令,查询云服务器可用的 USB 设备。
      1. usbip list --remote 127.0.0.1
      例如,找到usb 的信息,返回如下结果:
      1. Exportable USB devices
      2. ======================
      3. -127.0.0.1 1-1.3: unknown vendor : unknown product (1bc0:0055) product(096e:031b):/sys/devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-1/1-1.3:(Defined at Interface level)(00/00/00)
    4. 执行以下命令,将 USB 设备绑定至服务器中。
      1. usbip attach --remote=127.0.0.1 --busid=1-1.3
    5. 执行以下命令,查看当前 USB 设备列表。
      1. lsusb
      返回类似如下信息,即表示共享成功。

    配置 WIN Client

    1.下载usbip-win-0.3.6-dev

    https://github.com/cezanne/usbip-win

    1. 执行以下命令,查询云服务器可用的 USB 设备。
      1. usbip list --remote 127.0.0.1
      例如,找到usb 的信息,返回如下结果:
      1. Exportable USB devices
      2. ======================
      3. -127.0.0.1 1-1.3: unknown vendor : unknown product (1bc0:0055) product(096e:031b):/sys/devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-1/1-1.3:(Defined at Interface level)(00/00/00)
    2. 执行以下命令,将 USB 设备绑定至
      1. usbip attach --remote=127.0.0.1 --busid=1-1.3