linux配置防火墙信任当前登陆IP
如果觉得去折腾云API接口麻烦,那就折腾主机防火墙吧,这个稍微简单点,而且是通用技能,其它时候也能用得上。
原理: 先 ssh 登录主机,然后将当前源IP加入防火墙的可信区域内,且只允许可信区域的源IP对其它端口访问。
文末给出脚本方式添加访问IP到防火墙可信区域的示例
主机防火墙更新可信IP
简述:先配置基础的防火墙区域,然后再弄个脚本每次更新IP
区域描述:
设置有2个区域,不同的源IP会进入不同的区域;
将默认会进入的 public 区域的默认策略设置为拒绝,只对外开放1个端口;
将需要信任的源IP加入 trusted 可信任区域内,允许全部访问请求;
这样请求到主机时,防火墙会根据它的IP,选择进入不同的区域,匹配不同的规则;
root用户命令行执行
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
|
# 查看防火墙是否在运行,有可能没有开启
firewall-cmd --state
# 开启防火墙,并设为开机启动
systemctl stop firewalld
systemctl start firewalld
systemctl enable firewalld
# public 区域设置
firewall-cmd --zone=public --add-port=5000/tcp --permanent # 添加允许所有IP访问的1个ssh端口
firewall-cmd --permanent --zone=public --set-target=DROP # 设置默认策略为拒绝
# 移除区域内其它策略
firewall-cmd --permanent --zone=public --remove-service=ssh
firewall-cmd --permanent --zone=public --remove-service=dhcpv6-client
firewall-cmd --permanent --zone=public --remove-service=cockpit
# trusted 可信区域设置
firewall-cmd --permanent --zone=trusted --add-source=<当前登录云主机时的源IP>
# 加载配置
firewall-cmd --reload
# 查看当前规则
firewall-cmd --zone=public --list-all
firewall-cmd --zone=trusted --list-all
|
基础设定就完成了,下面来动态设定部分
流程:
先 ssh 普通用户登录主机后,执行一个这个脚本,脚本会获取当前登录使用的IP地址,并添加到可信区域内去
为了方便普通用户使用 sudo,为这个防火墙命令设置为不需要输入密码
/etc/sudoers 文件末尾添加
1
|
<普通用户名称> ALL = NOPASSWD: /usr/bin/firewall-cmd
|
脚本:
1
2
3
4
5
6
7
8
9
10
11
|
#!/bin/bash
# 脚本名称: addIPtoTrusted.sh
# 重新加载防火墙配置,会清理掉上一次添加的临时源IP
sudo firewall-cmd --reload
# 获取本次登录主机所使用的源IP地址
remoteIp=$(w | grep wait| head -n 1 | awk '{print $3}')
# 添加到可信区域内
sudo firewall-cmd --zone=work --add-source=${remoteIp}
|