# 火绒杀毒软件与Win10 WSL1子系统的网络服务冲突 今天玩儿[WSL](https://zh.wikipedia.org/wiki/Windows_Subsystem_for_Linux),碰上了一个相当灵异的问题,最后发现是火绒安全软件的问题,相当遗憾。 # 过程 起因是试图在WSL下开`sshd`服务。 按照[这篇教程](https://hbaaron.github.io/blog_2017/%E5%9C%A8wsl%E4%B8%8B%E5%AE%89%E8%A3%85%E4%BD%BF%E7%94%A8sshd%E5%85%A8%E6%94%BB%E7%95%A5/),设置了`sshd`服务,包括设置只监听`127.0.0.1`(安全原因),开启允许密码登录,设置防断线心跳包,生成`key`等等。然后又搞了一下设置`sudoer`以允许无密码开启`sshd`服务: ``` metorm ALL=(ALL) NOPASSWD: /usr/sbin/sshd -D ``` 比较琐碎,也就懒得仔细写了,都不是关键问题。 问题在于,一切做好之后,发现无论如何搞就是不能登录——*无论如何搞*,意思就是没有报错,并且提高权限、加防火墙规则乃至关防火墙等等都没有解决问题。 开始怀疑是刚才改`sshd_config`文件出的问题,于是首先试图把绑定`127.0.0.1`那一行改回默认,也就是监听所有地址,然后就崩了: ``` http: ../sysdeps/posix/getaddrinfo.c:2603: getaddrinfo: Assertion `IN6_IS_ADDR_V4MAPPED (sin6->sin6_addr.s6_addr32)' failed. ``` 有人说关掉`ipv6`,但是我这混教育网的,`ipv6`是关不得的。 于是试图关掉`4->6`隧道,无效。 又有人说重启,想想装完WSL确实没有重启呢,结果重启之后无效。 于是乎,开始怀疑WSL莫非所有的服务都出问题了?用`netstat -a`查看了开启的端口,结论是WSL下这个命令貌似猫用都没有,总是空的。 尝试了[Python自带的http服务](https://coolshell.cn/articles/1480.html),果然,无法访问(不过也没有崩溃)。 于是扩大搜索范围,找到了[`github`上的报错](https://github.com/Microsoft/WSL/issues/2142),问题指向了我安装的火绒杀毒。验证就很简单了,首先尝试退出火绒,问题依旧;于是再进一步,完全卸载之,重启,发现一切正常。 # 结论们 1. WSL下的`netstat -a`是无效的,总是空的 2. 火绒安全软件会由于某种原因,无提示阻断WSL中开启的**一切**网络服务,即使你没有开火绒自带的防火墙,即使你退出了软件 3. `python2`下非常好用的`python -m SimpleHTTPServer `服务,在`python3`中升级为`python3 -m http.server` 4. 很多教程建议,在使用`计划任务`功能实现开机启动`sshd`服务的时候,勾选“最高权限运行”以防出现权限问题。然而这样做会造成`bash`可执行文件下一直挂着一个高权限进程,再次启动它就会出现“已经有一个实例以最高权限运行”的错误,简而言之就是后面要用`WSL`的话都需要以管理员身份启动。这显然是无法接受的。我去掉了计划任务中“最高权限”的内容,也没见出什么问题。