Firewall

简介

防火墙是一种网络安全设备,主要是通过硬件和软件的作用于内部和外部网络的环境间产生一种保护的屏障,从而实现对计算机不安全网络因素的阻断。

  • 所有流入流出的所有网络通信均要经过此防火墙。
  • 功能
    • 访问控制、隔离保护
  • 组成
    • 服务访问政策、验证工具、包过滤和应用网关

功能作用

  • 入侵检测功能
    • 主要有反端口扫描、检测拒绝服务工具、检测CGI/IIS服务器入侵、检测木马或者网络蠕虫攻击、检测缓冲区溢出攻击等功能,
    • 可以极大程度上减少网络威胁因素的入侵,有效阻挡大多数网络安全攻击。
  • 网络地址转换功能(NAT)
    • 分为源地址转换和目的地址转换,即SNAT和DNAT。可以由服务的发起者是谁来区分两者。
    • SNAT: 内部地址要访问公网上的服务时,内部地址会主动发起连接,将内部地址转换成公有ip
      • 修改源ip地址的目的一般都是为了让这个包能再回到自己这里,所以在iptables中,SNAT是在出口,也即POSTROUTING链发挥作用。
      • SNAT主要用于隐藏内部网络结构,避免受到来自外部网络的非法访问和恶意攻击,有效缓解地址空间的短缺问题,
    • DNAT:当内部需要对外提供服务时,外部发起主动连接公有ip的网关,路由器或着防火墙的网关接收到这个连接,然后把连接转换到内部,此过程是由带公有ip的网关代替内部服务来接收外部的连接,然后在内部做地址转换。
      • 修改目的ip地址的原因一般就是为了改变包发送的目的地,让包走出去,而不是留下来,所以在iptables中,DNAT是在入口,也即PREROUTING链中发挥作用,以便让包进入FORWARD表。
      • DNAT主要用于外网主机访问内网主机,以此避免内部网络被攻击。
      • DNAT与端口转发的区别在哪里?
  • 网络操作的审计监控功能
    • 对系统管理的所有操作以及安全信息进行记录,提供有关网络使用情况的统计数据,方便计算机网络管理以进行信息追踪。
  • 强化网络安全服务(类似GFW)
    • 集中化的安全管理,将安全系统装配在防火墙上,在信息访问的途径中就可以实现对网络信息安全的监管。

Linux实现原理

  • Linux系统内核中的安全框架Netfilter,为其他内核模块提供数据包过滤、网络地址转换(NAT)和负载均衡的功能。
  • 常用的iptables和firewalld服务都依赖于Netfilter来过滤数据包,两者自身并不具备防火墙的功能,只是创建并维护规则。
    • 不同之处在于iptables基于“过滤规则链”,firewalld基于zone区域。
    • iptables无守护进程,不能算作真正的服务,firewalld存在守护进程

三表五链 - 三表(应用规则)

  • filter 用于过滤,防火墙,过滤数据包
  • nat 用于网络地址转换、端口转发
  • mangle 用于拆解报文,作出修改,封装报文
  • raw表, 关闭nat表上启用的连接追踪机制,以提高性能。
    • 表规则应用优先级:raw>mangle>nat>filter
    • 每个表中能存在的链如下

三表五链 - 五链(数据包状态/ 过滤规则链)

  • PREROUTING 进入路由之前的数据包
  • INPUT 目的地址为本机的输入数据包
  • FORWARD 目的地址不为本机的包,可以实现转发(需要开启)
  • OUTPUT 源地址为本机的输出数据包
  • POSTROUTING 发送到网卡之前的数据包

Nftables

  • Allows configuration of tables, chains and rules provided by the Linux kernel firewall.
  • Nftables replaces iptables.
    • 解决的iptables的不足
      • 不同协议实现的代码重复
      • Nftables通过增强的通用集和映射基础结构,可以更快地进行数据包分类。
      • 解决语法不一致的问题,并提供更好,更紧凑的语法。
  • OpenWRT和ubuntu都使用Nftables

与iptables表的对应关系

nftables簇 iptables实用程序
ip iptables
ip6 ip6tables
inet iptables和ip6tables
arp arptables
bridge ebtables
  • ip(即IPv4)是默认簇,如果未指定簇,则使用该簇。
  • 创建同时适用于IPv4和IPv6的规则,请使用inet。inet允许统一ip和ip6簇,以便更容易地定义规则。

输出解释

1
2
3
4
5
6
7
8
9
10
11
table inet warp {
chain warp-in {
type filter hook input priority mangle; policy accept;
ip6 saddr 2606:4700:d0::a29f:c001 udp sport 1701 @th,72,24 set 0x0
}

chain warp-out {
type filter hook output priority mangle; policy accept;
ip6 daddr 2606:4700:d0::a29f:c001 udp dport 1701 @th,72,24 set 0x46c997
}
}
  • type 可以是filterroute或者nat
  • hook 在IPv4/IPv6/Inet地址簇中,可以是preroutinginputforwardoutput或者postrouting。其他地址簇中的钩子列表请参见nft(8)。

iptables命令

查看默认表filter的规则

对于每条链,内核会按照顺序依次检查 iptables 防火墙规则,如果发现有匹配的规则目录,则立刻执行相关动作,停止继续向下查找规则目录;如果所有的防火墙规则都未能匹配成功,则按照默认策略处理。

1
2
3
4
$ sudo iptables -vnL 
Chain INPUT (policy ACCEPT 2211K packets, 855M bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT all -- tun0 * 0.0.0.0/0 0.0.0.0/0
  • 命令
    • 默认 -t filter
    • -v 显示详细信息,-n显示具体ip和端口数值
  • 输出
    • policy ACCEPT 当前链的默认策略 ACCEPT
    • pkts:对应规则匹配到的报文的个数。
    • bytes:对应匹配到的报文包的大小总和。
    • target:规则对应的target,往往表示规则对应的”动作”,即规则匹配成功后需要采取的措施。
    • prot:表示规则对应的协议,是否只针对某些协议应用此规则。
    • opt:表示规则对应的选项。
    • in:表示数据包由哪个接口(网卡)流入,我们可以设置通过哪块网卡流入的报文需要匹配当前规则。
    • out:表示数据包由哪个接口(网卡)流出,我们可以设置通过哪块网卡流出的报文需要匹配当前规则。
    • source:表示规则对应的源头地址,可以是一个IP,也可以是一个网段。
    • destination:表示规则对应的目标地址。可以是一个IP,也可以是一个网段。

添加的动作

命令部分:-j + 如下动作

  • ACCEPT:允许数据包通过。
  • DROP:直接丢弃数据包,不给任何回应信息,这时候客户端会感觉自己的请求泥牛入海了,过了超时时间才会有反应。
  • REJECT:拒绝数据包通过,必要时会给数据发送端一个响应的信息,客户端刚请求就会收到拒绝的信息。
  • SNAT:源地址转换,解决内网用户用同一个公网地址上网的问题。
  • MASQUERADE:是SNAT的一种特殊形式,适用于动态的、临时会变的ip上。
  • DNAT:目标地址转换。
  • REDIRECT:在本机做端口映射。
  • LOG:在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则,也就是说除了记录以外不对数据包做任何其他操作,仍然让下一条规则去匹配。

iptables管理命令

  • 选择表
    • -t指定表
  • 添加新规则
    • -A在链的最后追加一条规则 
    • -I在链的开头或指定序号插入一条规则 
    • -x显示精确值,不做单位换算
  • 替换规则
    • -R替换一条指定的规则
  • 查看规则
    • -L列出所有规则 
    • -n以数据形式显示地址与端口信息 
    • -v以更加详细的方式显示 
    • –line-numbers查看规则时,显示规则序号
  • 删除或清空规则
    • -D删除指定序号的一条规则 
    • -F清空指定表中的所有规则
  • 设置默认策略
    • -P为指定的链设置默认规则
  • 新建规则链
    • -N新建自定义链
  • 重命名链
    • -E重命名自定义链
  • 删除链
    • -X删除自定义空链 
    • -Z计数器清零

常见实例

Add a NAT rule to translate all traffic from the 192.168.0.0/24 subnet to the host’s public IP:

1
2
3
4
5
6
7
8
$sudo iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE

$ sudo iptables -t nat -vnL --line-numbers
Chain POSTROUTING (policy ACCEPT 19 packets, 1551 bytes)
num pkts bytes target prot opt in out source destination
6 0 0 MASQUERADE all -- * * 192.168.0.0/24 0.0.0.0/0

$ sudo iptables -t nat -D POSTROUTING 6 #delete

有待学习

  • docker相关的iptables的输出
  • OpenWRT上iptables完全是空的,是显示错误还是防火墙用了firewalld
  • node5上的warp的mangle在哪里?

Ubuntu配置

Windows配置

  • 入站规则
  • 出站规则

OpenWRT配置

to finished

需要进一步的研究学习

暂无

遇到的问题

暂无

开题缘由、总结、反思、吐槽~~

参考文献

https://blog.csdn.net/weixin_45649763/article/details/103338747

https://juejin.cn/post/7108726951304495135

https://icloudnative.io/posts/using-nftables/

Nas Disk Speed Test

导言

电脑直接传输特别慢平均10M

群晖DS220j文件传输速度、外网访问速度、moment套件使用情况以及耗电情况。 最高写入速度为105MB/S,最高读取速度为110MB/S。

西数红盘 2T。 145MB/s。

知乎评测: 局域网实际拷贝速度还不错,基本能达到千兆水平。下图是拷贝GB级文件(如电影)的截图,拷贝照片和音乐之类的小文件会慢不少,10MB大小的文件写入速度有60MB/s左右,更小的文件就只有30MB/s了。

排查配置

网口

路由器是Redmi AX3000wifi6 WAN口和LAN口都是千兆口 2000Mbit 3000Mbit

电脑的网口是B450 迫击炮的主板 千兆口

网线

电脑连路由器的的网线是cat.6A的

电脑连墙壁接口的是cat.5e的

网线,DS220J 送的是cat.5e

只要网线够短,cat.5e至少有5Gb/s,一般都不是瓶颈。^1

额外测试

网线直连电脑和群晖的机器,用这根CAT.6A,速度也很慢。

(结果第二天就好多了,路由器平均50M,直连能跑满,感觉原因在于路由器缓存转发的问题,端口都是千兆的)


其余测试

检测硬盘

diskgenius

命令行硬盘测速

控制面板 开启ssh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
ssh -p 2333 [email protected]
sudo -s

sh-4.4# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/md0 2.3G 1.1G 1.2G 50% /
devtmpfs 225M 0 225M 0% /dev
tmpfs 243M 24K 243M 1% /dev/shm
tmpfs 243M 15M 228M 7% /run
tmpfs 243M 0 243M 0% /sys/fs/cgroup
tmpfs 243M 1.5M 241M 1% /tmp
/dev/vg1/volume_1 1.8T 1.5T 289G 85% /volume1
/dev/vg3/volume_3 4.0T 2.0G 4.0T 1% /volume3
/dev/vg3/volume_4 4.0T 89M 4.0T 1% /volume4

# 磁盘读性能
sh-4.4# hdparm -Tt /dev/vg1/volume_1

/dev/vg1/volume_1:
Timing cached reads: 1092 MB in 2.00 seconds = 545.67 MB/sec
Timing buffered disk reads: 456 MB in 3.03 seconds = 150.28 MB/sec
sh-4.4# hdparm -Tt /dev/md4

/dev/md4:
Timing cached reads: 1086 MB in 2.00 seconds = 542.89 MB/sec
Timing buffered disk reads: 838 MB in 3.00 seconds = 279.23 MB/sec
sh-4.4# hdparm -Tt /dev/mapper/vg3-volume_4

/dev/mapper/vg3-volume_4:
Timing cached reads: 1076 MB in 2.00 seconds = 537.13 MB/sec
Timing buffered disk reads: 592 MB in 3.01 seconds = 196.89 MB/sec

# 磁盘写性能
sh-4.4# dd if=/dev/vg3/volume_3 bs=1024 count=1000000 of=/1Gb.file
1000000+0 records in
1000000+0 records out
1024000000 bytes (1.0 GB, 977 MiB) copied, 13.0458 s, 78.5 MB/s
sh-4.4# dd if=/dev/vg1/volume_1 bs=1024 count=1000000 of=/1Gb.file
1000000+0 records in
1000000+0 records out
1024000000 bytes (1.0 GB, 977 MiB) copied, 18.837 s, 54.4 MB/s

群晖测网速

群晖的docker里也有speedtest

参考文献

Synology NAS Configuration

Nas 购买的考虑点

https://post.smzdm.com/p/a5d23w98/

  1. 处理器:建议至少是Intel的双核,ARM的还是不好使。单核性能太弱了。虚拟机,docker什么的就别想了。
    1. 群晖官方套件不支持DS220j,十分不建议尝试。
  2. 内存:尽量8GB组双通道
  3. 网口:群晖的都是1Gb的老千兆(虽然我电脑,路由器网口也是),但是威联通是2.5Gb的。
  4. M2.SSD加速:是否支持SSD加速
  5. USB口是不是3.2Gen2

群晖 DS220J (本体1200)

控制台与数据访问

  1. PC公用路由器控制:http://find.synology.com或者http://synologynas:5000
  2. QuickConnect:https://QuickConnect.to/shaojiemike or http://222.195.90.2/ (能ping通,就能访问)
  3. 电脑SMB直接访问
    1. \\192.168.31.247 (双斜杠,右键home有选项:映射网络驱动器)
    2. \\tsjNas (需要在局域网下)
    3. \\222.195.90.2/ (需要开启路由器的SMB(137-139,445)端口转发,否则能ping通,但是不能访问)

wireguard 网络配置脚本

使用开机wireguard脚本连接上网

  • 任意盘位置 /volume1/xxx编辑脚本,赋予权限
  • 群晖添加计划:点击任务计划。点击新增 -> 触发的任务 -> 用户定义的脚本(注意选择root用户权限)
    • 也可以选择写入启动文件中 vi /etc/rc
1
2
3
4
5
6
7
8
# 设置本地ssh eth0的222.195.90.2的高优先级,不至于开启wg断开ssh
ip ro add default via 222.195.90.254 dev eth0 table eth0-table
# 为了使得除开本地ssh网络走wg,需要删除屏蔽default的wg的DHCP
ip ro d default via 222.195.90.254 dev eth0 src 222.195.90.2 table main
# 防止服务端重启,Nas的wg客户端失联
ip ro a 114.214.233.0/24 via 222.195.90.254 dev eth0 src 222.195.90.2 table main
# 启动wg
wg-quick up wg1

常见问题与解决方案

删除失效网络硬盘

Win10 无法直接取消,会报错”此连接不存在”,参考文章[^1]

需要删除两项 regedit注册表 计算机\HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2\##10.0.0.12#homes计算机\HKEY_CURRENT_USER\Network 下对应的盘符即可。

十分不建议组RAID

如果要利用空间不要组RAID,通过添加存储池来使用每个盘。

RAID0也不要组,文件是打散的,虽然读和写块,但是是一个整体。坏一个就全坏了。

先配置存储池和存储空间

然后设置文件夹

再重新映射盘符即可

停用与启用硬盘

若要激活硬盘:
已停用硬盘的分配状态会更改为未初始化,这表示此硬盘未安装 DSM,可以分配给存储池。请执行以下任何操作以激活硬盘:

  1. 从硬盘插槽中移除硬盘,然后将其重新插入硬盘插槽。
  2. 重启系统。

图形化界面控制台很卡顿

原因内存和性能不行,建议升级DS220j+ 额外拓展内存

电脑直接传输特别慢平均10M

群晖DS220j文件传输速度、外网访问速度、moment套件使用情况以及耗电情况。 最高写入速度为105MB/S,最高读取速度为110MB/S。

西数红盘 2T。 145MB/s。

知乎评测: 局域网实际拷贝速度还不错,基本能达到千兆水平。下图是拷贝GB级文件(如电影)的截图,拷贝照片和音乐之类的小文件会慢不少,10MB大小的文件写入速度有60MB/s左右,更小的文件就只有30MB/s了。

正常插在路由器LAN口下,无法找到群晖的IP

很有可能之前设置了静态IP,然后换了网络环境,网络掩码变了自然完全找不到。唯一的办法就是一定要保存和记录下之前的静态IP。

参考文档

Web Server: Nginx V.S. Apache2

常见的web服务器

常见的web服务器有Apache、nginx、IIS

  1. Apache
    1. Apache音译为阿帕奇, 是全世界最受欢迎的web服务器,因其快速、可靠并且可通过简单的API扩充,能将Python\Perl等解释器部署在其上面等优势,受到广泛的关注与使用。
    2. 但是现在用的人少了,而且性能没nginx好
  2. nginx
    1. Apache的致命缺陷就是在同时处理大量的(一万个以上)请求时,显得有些吃力,所以“战斗民族”的人设计的一款轻量级的web服务器——nginx, 在高并发下nginx 能保持比Apache低资源低消耗高性能 ,
  3. IIS
    1. iis是Internet Information Services的缩写,意为互联网信息服务,是由微软公司提供的基于运行Microsoft Windows的互联网基本服务,
Read more

Home Network

ping、arp、tracert、route命令

tracert

https://zhuanlan.zhihu.com/p/504688650

ipv6

查看是否有ipv6

ipw.cn 查看是否有ipv6(手机热点是ipv6优先的)

如图,由于不支持,所以ping不了ipv6

1
2
3
4
5
6
7
8
9
D:\PowerShell\github\hugoMinos [main ≡ +1 ~4 -0 !]> ping 2001:da8:d800:112::23

Pinging 2001:da8:d800:112::23 with 32 bytes of data:
PING: transmit failed. General failure.
PING: transmit failed. General failure.
PING: transmit failed. General failure.

2001:da8:d800:112::23 的 Ping 统计信息:
数据包: 已发送 = 3,已接收 = 0,丢失 = 3 (100% 丢失),

光猫,路由器修改ipv6

光猫背后账号,密码,和移动的网址http://192.168.1.1/

参考:https://www.luyouwang.net/8778.html

这网络界面根本改不了,G

这是普通用户账号密码,查询移动给的吉比特智能网关GM220-S的超级管理员

1
2
账号:CMCCAdmin
密码:aDm8H%MdA

感觉应该开启了ipv6的样子,难道是子路由没开?

原因是子路由普联TL-WR886N不支持ipv6

LAN1的T568B水晶头还只有4根: 网线8根线1236重要。

网线8根线一般只使用1、2、3、6编号的芯线传递数据,即1、2用于发送,3、6用于接收。

4578属于备用线路,1236有故障时自动切换4578,如果4578没有接好,导致的结果就是1236中的某一根出现问题时,因没有备用线路而断网。

NAT6

解决办法:

  1. 首先换成小米的WIFI6的路由器
  2. 打开ipv6的功能,由于家里暂时没有外网访问家庭设备的需求
    1. 没有设置桥接
    2. 采用了简单的NAT6来实现家庭ipv6上网
    3. 虽然恩山的论坛说很慢,因ipv6地址更长,所以效率更低,速度更慢。,但是NAT6百兆还是能跑满的

获取pppoe 账号密码

备份config.bin后,用routerpassview工具打开,查找用户名,结果发现密码就是123456。我真是无语了(小潮🦅

意外之喜,我家竟然是“千兆网”

原本以为我家是爸爸法院送的移动网不会怎么样,结果直接插GM220-S的千兆口,竟然是非对等带宽的千兆网

但是弱电箱就埋了两根线,一根是到客厅的iptv的线,另一根是到主卧室的(但是水晶头里的线被剪断一半的,导致实际测速只有百兆的线。

临时处理:暂时用iptv的线当拉出来的网线。能达到300Mbps的WIFI-6

需要进一步的研究学习

暂无

遇到的问题

  1. 学校的服务器全部ping不通

没有登录网络的肯定ping不通

登录了ping不通的原因是,脚本默认是8号端口,改成0号教育网端口就行了。

1
2
3
4
5
6
7
8
9
10
11
12
13
D:\PowerShell> ping -r 9 -w 10000 222.195.72.114

Pinging 222.195.72.114 with 32 bytes of data:
Reply from 222.195.72.114: bytes=32 time=60ms TTL=60
Route: 172.17.0.3 -> (局域网)
202.38.73.217 -> (node5)
202.38.96.189 -> (北京教育网)
210.45.112.254 -> (合肥教育网)
222.195.72.114 -> (snode2)
222.195.72.114 ->
202.38.96.188 ->(北京教育网)
202.38.73.254 ->(合肥教育网)
172.17.0.1
  1. ipv6不知道是不是因为变化了,也连接不上

家里路由器不支持ipv6,所以连接不上

开题缘由、总结、反思、吐槽~~

参考文献

https://jingyan.baidu.com/article/ac6a9a5e47b4222b653eac95.html

SSHForward

导言

服务器没网,姜师兄说可以ssh转发网络请求到本地windows

四类ssh转发

SSH 端口转发自然需要 SSH 连接,而SSH 连接是有方向的,从 SSH Client 到 SSH Server 。

而我们所要访问的应用也是有方向的,应用连接的方向也是从应用的 Client 端连接到应用的 Server 端。比如需要我们要访问Internet上的Web站点时,Http应用的方向就是从我们自己这台主机(Client)到远处的Web Server。

本地转发Local Forward

如果SSH连接和应用的连接这两个连接的方向一致,那我们就说它是本地转发。

1
2
3
ssh -L [bind_address:]port:host:hostport <SSH hostname>
ssh -L 3333:127.0.0.1:2333 -vN -f -l shaojiemike 222.195.72.218
debug1: Local connections to LOCALHOST:3333 forwarded to remote address(222.195.72.218) 127.0.0.1:2333


本地转发在本地这台机器上监听一个端口,然后所有访问这个端口的数据都会通过ssh 隧道传输到远端的对应端口上。命令中的 host 和 <SSH hostname> 可以是不同的主机。

远程转发Remote Forward

如果SSH连接和应用的连接这两个连接的方向不同,那我们就说它是远程转发。

1
ssh -R [bind_address:]port:host:hostport <SSH hostname>

远程转发与本地转发正好相反,打开ssh隧道以后,在远端服务器监听一个端口,所有访问远端服务器指定端口都会通过隧道传输到本地的对应端口上,下面是例子。

动态转发

  • TODO

X转发

  • TODO

实用参数

1
2
3
4
-C:压缩数据传输。
-f :后台认证用户/密码,通常和-N连用,不用登录到远程主机。
-N :不执行脚本或命令,通常与-f连用。
-g :在-L/-R/-D参数中,允许远程主机连接到建立的转发的端口,如果不加这个参数,只允许本地主机建立连接。
1
2
3
4
5
6
-f      Requests ssh to go to background just before command execution.  This is useful if ssh is going to ask for passwords or
passphrases, but the user wants it in the background. This implies -n. The recommended way to start X11 programs at a remote
site is with something like ssh -f host xterm.

If the ExitOnForwardFailure configuration option is set to "yes", then a client started with -f will wait for all remote port
forwards to be successfully established before placing itself in the background.

常见例子

将发往本机的80端口访问转发到174.139.9.66的8080端口

1
ssh -C -f -N -g -L 80:174.139.9.66:8080 [email protected]

将发往174.139.9.66的8080访问转发到本机的80端口

1
ssh -C -f -N -g -R 80:174.139.9.66:8080 [email protected]

使用远程管理服务器上的MySQL

1
ssh -C -f -N -g -L 80:174.139.9.66:8080 [email protected]

一次同时映射多个端口

1
ssh -L 8888:www.host.com:80 -L 110:mail.host.com:110 -L    25:mail.host.com:25 user@host -N  

反向隧道技术

  1. 先在公司机器(LAN_ip)上执行
    1
    ssh -NfR 2222:localhost:22 home_ip
    -R : 建立反向连接 将 home_ip port转发
  2. 然后到home_ip上面
    ssh localhost -p 2222

SOCKS代理

1
ssh -NfD 8888 user@remote_ip

现在在浏览器socks 5 proxy设置为localhost:8888,所有之前无法访问的网站现在都可以访问了。

假设本地主机A提供了HTTP服务,主机B无网络

1
ssh -fNgR 80:localhost:80 root@host-B

通过访问 http://host-B 来访问主机A上的HTTP服务了。

如果没有主机B的root账号,则只能远程转发到1024以后的端口号

1
ssh -fNgR 8080:localhost:80 lige@host-B

通过访问http://host-B:8080 来访问主机A上的HTTP服务

假设本地主机A无网络,主机B提供了HTTP服务

但是由于怕防火墙屏蔽,而不想直接访问

1
ssh -fNgL 80:localhost:80 root@host-B

ssh_config设置技巧

客户端

.ssh/config修改

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Host *
ControlPersist yes
ControlMaster auto
ControlPath /tmp/sshcontrol-%C
ControlPersist 1d
# 以上四条配合使用,实现多条ssh连接共享,而且保持1天内ssh存在。再次执行ssh命令几乎秒连
TCPKeepAlive=yes
# 发送空TCP包来保持连接,但是可能被防火墙过滤
ServerAliveInterval 30
# 表示每隔多少秒(30秒),从客户端向服务器发送一次心跳(alive检测)
# 心跳具体格式: debug1: client_input_global_request: rtype [email protected] want_reply 1
ServerAliveCountMax 240
# 表示服务端多少次(240次)心跳无响应后, 客户端才会认为与服务器到SSH链接已经断开,然后断开连接。

Port 443

Host *
ForwardAgent yes
# 可以讓本地的 SSH Key 在遠端 Server 上進行轉送,也就是经过跳板机Server1,使用本地key访问Server2,不用把key传到Server1上导致泄露
# 虽然Server1不会获得key,但是可以使用key。所以该选项不宜用于Host *,应该只添加您信任的服务器以及打算用于代理转发的服务器。
# 注意跳板机需要设置允许代理转发, /etc/ssh/sshd_config 将AllowAgentForwarding的值设置为yes, 并重启服务
AddKeysToAgent yes
ForwardX11 yes
ForwardX11Trusted yes
Compression yes
# 压缩,加快数据传输速度

服务器端

更改ssh服务器的配置文件/etc/ssh/sshd_config

1
2
3
ClientAliveInterval 60
# 默认是0,不发送
ClientAliveCountMax 3

原理同上
重启ssh服务以使配置生效

1
systemctl restart sshd

服务器端如何将端口绑定到外部地址上

我们可以把这个映射的端口绑定在0.0.0.0的接口上,方法是加上参数-b 0.0.0.0。

同时修改SSH服务器端 /etc/sshd_configGatewayPorts noGatewayPorts yes来打开它。

自动重连/保持长时间连接

1
2
Host *
ServerAliveInterval 60

检查隧道状态

  1. netstat
  2. ps
  3. autossh

实践

服务器网站端口转发到本地

1
ssh -L 6006:127.0.0.1:6006 -N -f -l acsacom snode6.swangeese.fun

给服务器提供网络代理

本地网络代理到服务器

1
2
ssh -fNgR 7333:127.0.0.1:7890 [email protected]
ssh -fNgR 7333:127.0.0.1:80 [email protected]
  • 7333数字不要太小,以免冲突。
  • 7890是本地clash端口,80也可以。
title
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#YJH proxy
export proxy_addr=localhost
export proxy_http_port=7890
export proxy_socks_port=7890
function set_proxy() {
export http_proxy=http://$proxy_addr:$proxy_http_port #如果使用git 不行,这两个http和https改成socks5就行
export https_proxy=http://$proxy_addr:$proxy_http_port
git config --global https.proxy http://$proxy_addr:$proxy_http_port
git config --global https.proxy https://$proxy_addr:$proxy_http_port
export all_proxy=socks5://$proxy_addr:$proxy_socks_port
export no_proxy=127.0.0.1,.huawei.com,localhost,local,.local
}
function unset_proxy() {
git config --global --unset http.proxy
git config --global --unset https.proxy
unset http_proxy
unset https_proxy
unset all_proxy
}
function test_proxy() {
curl -v -x http://$proxy_addr:$proxy_http_port https://www.google.com | egrep 'HTTP/(2|1.1) 200'
# socks5h://$proxy_addr:$proxy_socks_port
}
# set_proxy # 如果要登陆时默认启用代理则取消注释这句

服务器git下载设置代理端口

1
2
3
4
5
6
export http_proxy=http://127.0.0.1:7333
# wget 正常使用
export all_proxy=socks5://127.0.0.1:7333
# git 正常使用
unset http_proxy
unset all_proxy

特定软件也需要设置代理

1
2
3
4
5
6
7
git config --global https.proxy http://127.0.0.1:1080
git config --global https.proxy https://127.0.0.1:1080
git config --global http.proxy 'socks5://127.0.0.1:1080'
git config --global https.proxy 'socks5://127.0.0.1:1080'

git config --global --unset http.proxy
git config --global --unset https.proxy

mac上转发失败

首先看看Windows上的输出


Mac的错误

在完成windows所有输出后,

  1. 首先调用了shell
  2. 错误
1
2
3
debug1: Remote: Forwarding listen address "localhost" overridden by server GatewayPorts
debug1: remote forward failure for: listen 7890, connect 127.0.0.1:7890
Warning: remote port forwarding failed for listen port 7890

猜测应该是已经端口占用了

1
netstat -nat |grep -i '7233'

解决办法一:换端口

首先,可以选择换端口,换成 7233

1
sudo lsof -i TCP:7233
  1. 进程验证
  2. wget验证
  3. curl验证(原本会走WLT)
1
redirecting to http://wlt.ustc.edu.cn


解决办法二:Kill掉相关进程

1
2
3
4
sudo lsof -i TCP:7890
sudo kill -9 process_id_1 process_id_2 process_id_3
sudo ps -ef | grep 'nc -X' | grep -v grep | awk '{print $2}' | sudo xargs -r kill -9
sudo lsof -i TCP:7233 |grep shaojiemike| awk '{print $2}'|sudo xargs -r kill -9

  • FD: File Descriptor number of
  • 不敢kill师兄的,然后发现并没有用,寄。kill掉师兄的之后就行了,嘻嘻~~ 师兄不要怪我

参考文献

http://blog.sina.com.cn/s/blog_704836f40100lwxh.html

https://blog.csdn.net/xyyangkun/article/details/7025854?utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.no_search_link&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.no_search_link

SSL

什么是SSL证书

SSL是SecureSocketLayer的缩写,即安全套接层协议,SSL证书是一种数字证书,主要是给予网站HTTPS安全协议加密传输与信任的功能。SSL证书拥有数字加密与认证过程,加密协议可以保护网站。

高层的应用协议如HTTP、FTP、Telnet等能透明地建立于SSL协议之上。其在应用层协议通信之前就已经完成加密算法、通信密钥的协商以及服务器认证工作。在此之后应用层协议所传送的数据都会被加密,从而保证们在互联网上通信的安全。

个人网站需要证书吗?

先了解一下安装SSL证书有哪些作用吧。
  
  1.网站数据的加密:对网站的数据进行加密,达到能够保护数据不会被泄露的效果。
  2.身份的验证: 安装SSL证书可以证实真实信息,防止流量被劫持、防止被中间人攻击等。
  3.显示绿色小锁,消除不安全信息:在网址栏当中会展示绿色小锁,消除主流浏览器对该网址提示“不安全”标记。
  4.利于收录:谷歌百度等主流搜索引擎会优先展示和收录https的网站,也就是安装SSL证书的网站。
  5.绿色的地址栏:安装高级的SSL证书可在地址栏当中显示绿色企业名称,有利于企业品牌的宣传以及客户的信任。
  
如果你的个人网站不需要信息加密、不需要身份验证、不需要用户的体验、也不需要优化,那么你也就没必要去购买安装SSL证书。

个人网站DV证书的授权

https://blog.csdn.net/bennny/article/details/82988260