场景
- 在 vultr 买了一个服务器后,发现可以 ping 通
- 但是输入网址却无法连接
- 但是开启了 ss 之后,可以连接到这个服务器
解决办法
- 一开始以为是墙的问题,可以封禁端口,导致 80 端口不能使用
- 但是我换了其他端口也无法连接
- 后来用 wireshark 抓包,发现返回 icmp 协议: host administratively prohibited
- 谷歌后查发现是服务器防火墙没有开放 80 端口的缘故
- 那么另外一个问题随之而来呢,为什么通过 ss 之后就可以连接到服务器呢
- ss 服务端和 ss 客户端用 socks5 协议封装,服务端再发到真正的目的地
- 换句话 socks5 协议穿透了防火墙,可以查看这里
SOCK5 协议
以下来自维基百科
- SOCKS5 是一种网络传输协议,主要用于客户端与外网服务器之间通讯的中间传递。SOCKS 是”SOCKetS”的缩写
目的
- SOCKS5 是一个代理协议,旨在为位于 Intranet 防火墙后的用户提供访问 Internet 的代理服务,这是个有一定年头的协议,其 RFC 提案的时间比 HTTP 1.0 还要早两个月
用途
实现
iptables
以下来自维基百科>)
- iptables 是 linux 内核防火墙的命令行工具
- 通常也指代内核级防火墙
- iptables 用于 ipv4,ip6tables 用于 ipv6
- iptables 可以检测,修改,转发,重定向和丢弃 ipv4 数据包
基本概念
表(tables)
- 过滤 ipv4 数据包的代码已经内置于内核之中,并且按照不同的目的被组织成表的集合
- 表由一组预先定义的链组成,链包含遍历顺序规则
- 包含五张表,比较常用的就是 filter 表:用于存放于与防火墙相关操作的默认表
链(chain)
- 表由链组成
- 内核空间中:从一个网络接口进来,到另一个网络接口取得 PREROUTING(路由前)
- 数据包从内核流入用户空间的 INPUT (数据包流入口)
- 数据包从用户空间流出的 FORWARD (转发关卡)
- 进入/离开本机的外网接口 OUTPUT (数据包出口)
- 进入/离开本机的内网接口 POSTROUTING (路由后)
操作
- 去到所在文件,一般是在/etc/init.d/iptables
- 可以进行关闭(stop),开启(start),重启(restart)