一直用的阿里云的 vps(轻量云和 ECS),有一个独立于 vps 的防火墙服务,一直用的是那个,Debian 的防火墙也一直处于关闭状态,Fail2ban 依赖于 IPtables,也就一直放着没有配置,最近在看 ssh 和 Frps 的登陆记录才发现不停有机器在尝试登录,这才意识到一个防火墙和 Fail2ban 的重要性。
Debian 10 默认的防火墙换成了 IPtables 的替代 nftables, 1 但是对于没有学习过这方面知识的门外汉来说,IPtables 和 Nftables 实在是过于复杂,于是这里就用更容易入门的 UFW,(简易防火墙)。
什么是防火墙,为什么要用防火墙。
就像防火墙这个名字一样,是为了防止火烧到自己的庭院的,也就是一个屏蔽和隔离筛选作用。防火墙最著名的一个应用就是一些国家利用这个技术限制网民访问特定网站,当然错不在工具,而在人。
说回正题,在一般的家用宽带下下面的设备,没有公网ip,作恶的人找不到你的门牌号,是很难直接访问你的设备,也就很难进行主动的网络攻击,但是对于完全暴露在公网中的服务器来说,任何人都可以轻松访问,任何人都知道你的家庭住址,如果不关好门,你家里的财产就危险了。
而防火墙就是担当家门这么一个角色,你可以选择关上或者打开某一扇门,是否允许人从这个门进入你的家。
防火墙可以通过识别不同的网络协议阻挡出站或者入站流量。出站流量是你在本地搭建的例如网站服务向别人提供服务的流量,而入站流量则是你使用其他人提供的服务,或者例如 SSH 需要登入服务器的流量,而对于个人服务器来说,为了安全一般是限制入站流量,防止作恶的人登录你的服务器上的服务。
这里是在 Debian buster 上安装,通过 SSH。
你需要 sudo 权限,UFW可以直接通过官方源安装
- sudo apt-get install ufw
为了防止无法远程登入 SSH 等,UFW不会自动启动。
静静等待安装完成,现在你可以检查 UFW 的状态
- sudo ufw status verbose
现在输出会类似如下:
- Status: inactive
更多命令可以通过 ufw --help 查看。
通常推荐默认拒绝所有入站流量,允许所有出站流量
- $ sudo ufw default deny incoming
- Default incoming policy changed to 'deny'
- (be sure to update your rules accordingly)
-
- $ sudo ufw default allow outgoing
- Default outgoing policy changed to 'allow'
- (be sure to update your rules accordingly)
UFW 可以使用应用程序包附带的描述服务的配置文件中包含 UFW 配置,使用 app 配置可以更方便的管理应用程序的 UFW 设置
查看所有的应用程序配置文件:
- sudo ufw app list
查看 app 具体信息
- sudo ufw app info OpenSSH
快捷开放某个程序需要的防火墙设置
- sudo ufw allow OpenSSH
所有配置都在 /etc/ufw/applications.d/。如需修改,前往此目录修改即可。
例如OpenSSH的配置:
- [OpenSSH]
- title=Secure shell server, an rshd replacement
- description=OpenSSH is a free implementation of the Secure Shell protocol.
- ports=22/tcp
如果你的 SSH 端口自定义了,也可以直接修改,
- sudo vim /etc/ufw/applications.d/openssh
修改保存即可
开放某个端口,例如
- #开放tcp端口
- sudo ufw allow 8080/tcp
- #UDP
- sudo ufw allow 8080/udp
开放端口范围,
-
- sudo ufw allow 8080:8090
执行
- sudo ufw enable
这时会有提醒此操作会阻断已连接的 ssh 链接,输入y确定即可
这时再次输入
- sudo ufw status
就会显示 ufw 目前的规则概要
- ➜ ~ sudo ufw status
- Status: active
-
- To Action From
- -- ------ ----
- OpenSSH ALLOW Anywhere
- OpenSSH (v6) ALLOW Anywhere (v6)
首先安装 Fail2ban
- sudo apt-get install fail2ban
Fail2ban 默认启用 ssh 的过滤器,可以在/etc/fail2ban/jail.conf 查看,但是 Fail2ban 更新会覆盖此文件,建议复制一个 jail.local 进行编辑。
- sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
此后建议编辑 jail.local
对于 jail.local,你能找到许多 unit
例如 sshd 在文件中如此显示
- [sshd]
- #mode = normal
- port = ssh
- logpath = %(sshd_log)s
- backend = %(sshd_backend)s
输入
- sudo fail2ban-client status
- Status
- |- Number of jail: 1
- `- Jail list: sshd
可以看到,sshd的过滤器已经默认启动了。
默认配置在 jail.local 的 [DEFAULT] 下,推荐至少在 ignoreip 中加入自己常用的 ip,(如果不常用有固定公网 ip 登录的倒是无所谓)其他一些配置可以根据自己的需要酌情修改
jail.local 中本来就预设了一些配置,如需添加只需按照自己服务器的情况添加配置,同时添加 enabled = true 以启用此 jail
- [nginx-http-auth]
-
- enabled = true
- filter = nginx-http-auth
- port = http,https
- logpath = /var/log/nginx/error.log
- [nginx-badbots]
-
- enabled = true
- port = http,https
- filter = nginx-badbots
- logpath = /var/log/nginx/access.log
- maxretry = 2
- [nginx-nohome]
-
- enabled = true
- port = http,https
- filter = nginx-nohome
- logpath = /var/log/nginx/access.log
- maxretry = 2
- [nginx-noproxy]
-
- enabled = true
- port = http,https
- filter = nginx-noproxy
- logpath = /var/log/nginx/access.log
- maxretry = 2
需要确认打开 Nginx 的 log 记录,并且正确填写目录
http 和 https 对应你在前文 NFW 中设置的 app
编辑好后
- sudo systemctl restart fail2ban
以启用这些 jails