我有一个 vps,它托管一些只有我使用的服务。今天,我发现有人通过
netstat -ntu | awk '{print $5}' |sort | uniq -c | sort -n
并发现了一些结果(我从下面删除了我的 IP)
1 xxxxxxxxxxx:59564
1 xxxxxxxxxxx:59569
1 xxxxxxxxxxx:59570
1 xxxxxxxxxxx:59576
1 120.236.148.199:2226
1 127.0.0.1:41108
1 127.0.0.1:41148
1 127.0.0.1:41156
1 127.0.0.1:41158
1 127.0.0.1:41178
1 127.0.0.1:41180
1 183.61.236.54:3128
1 213.13.37.231:3128
1 218.244.149.184:8888
1 46.164.141.173:8080
1 58.96.172.205:8888
1 Address
1 servers)
2 ::1:9988
2 219.156.157.186:80
10 127.0.0.1:3306
11 127.0.0.1:3999
我有一些仅供自己使用的 web 服务,我想在它们访问其他端口时禁止所有 IP,但是存在一些问题。
我在 8699 上设置了一个 socks5 代理,但它似乎打开了其他端口来为我的连接提供服务:
tcp6 0 0 default.hostname:8699 my_vps_ip_here.bro:59570 ESTABLISHED tcp6 0 0 default.hostname:8699 my_vps_ip_here.bro:59576 ESTABLISHED tcp6 0 0 default.hostname:8699 my_vps_ip_here.bro:59564 ESTABLISHED tcp6 0 0 default.hostname:8699 my_vps_ip_here.bro:59569 ESTABLISHED
netstat -ntu | awk '{print $5}' |sort | uniq -c | sort -n
不显示我正在连接8699
,仅显示59570, 59576, 59564, 59569
。这种情况的正确规则是什么?自动封禁 IP 的推荐方法是什么?我只想到:
netstat -ntu | awk '{print $5}' |sort | uniq -c | sort -n
每秒检查一次结果,并将不良 IP 添加到 iptables。我知道 iptables 和 ufw 可以禁止 ip,ufw 看起来更像是一个管理器,但还有更好的选择吗?
答案1
**
自动禁止 IP 的推荐方法是什么?
**
iptables 和 ufw 可以通过一些自动化做得更好。fail2ban 就是这样做的,我推荐它作为一个不错的选择。进行初步检查,
检查是否已建立连接 sudo lsof -i -n | egrep '<sshd>' | grep ESTABLISHED sudo lsof -i -n | egrep '<ssh>' | grep ESTABLISHED
检查奇怪的用户和 sudo-ers
getent group sudo | cut -d: -f4 grep -Po '^sudo.+:\K.*$' /etc/group
持续禁令
只需稍加调整,您就可以禁止重复尝试并恢复有效的禁令。
安装 fail2ban,
apt install fail2ban
现在在 fail2ban vim 或 nano 中编辑 multiport.conf 文件,
nano /etc/fail2ban/action.d/iptables-multiport.conf
将这些行附加到“actionstart”(我猜是从第 4 行开始)
cat /etc/fail2ban/persistent.bans | awk '/^fail2ban-<name>/ {print $2}' \
| while read IP; do iptables -I fail2ban-<name> 1 -s $IP -j <blocktype>; done
看起来像这样
[Definition]
# Option: actionstart
# Notes.: command executed once at the start of Fail2Ban.
# Values: CMD
#
actionstart = <iptables> -N f2b-<name>
<iptables> -A f2b-<name> -j <returntype>
<iptables> -I <chain> -p <protocol> -m multiport --dports <port> -j f2b-<name>
cat /etc/fail2ban/persistent.bans | awk '/^fail2ban-<name>/ {print $2}' \
| while read IP; do iptables -I fail2ban-<name> 1 -s $IP -j <blocktype>; done
将此行附加到“actionban”中,紧接着actionban = ...
永久禁止 IPS 的行
echo "fail2ban-<name> <ip>" >> /etc/fail2ban/persistent.bans
现在重新启动fail2ban,
sudo service fail2ban restart
并给予一些‘禁令’
sudo fail2ban-client set sshd banip 112.0.0.0/8
sudo fail2ban-client set sshd banip 222.186.0.0/16
现在检查有效的持久禁令,
tail /var/log/fail2ban.log
你应该看到类似这样的内容,
NOTICE [sshd] Restore Ban 112.0.0.0/8
这样可以避免重复攻击,现在你可以使用 iptables 只允许你的 ip
附言:由于 fail2ban 会持续禁止攻击者,因此您可以放心,并确保没有使用以下服务建立连接,
sudo lsof -i -n | egrep '\<ssh\>'
sudo lsof -i -n | egrep '\<sshd\>'
(请注意,您需要为特定服务设置特定的“监狱”)并查看持久禁令
cat /etc/fail2ban/persistent.bans
输出:
fail2ban-sshd 112.0.0.0/8
fail2ban-sshd 218.92.0.0/16
fail2ban-sshd 218.92.0.138
解释
actionstart:我们可以添加一些仅在 fail2ban 启动期间执行的操作命令。因此,我们
/etc/fail2ban/persistent.bans
在启动时添加了actionban:每当对某个 IP 实施禁令时,该 IP 都会被添加到 persistent.bans 文件中,该文件将在 fail2ban 运行期间生效。如果您认为某个 IP 没有参与恶意攻击,您可以稍后轻松编辑此文件。
你可以手动禁止有问题的 IP,使用
sudo fail2ban-client set sshd banip 112.0.0.0/8 sudo fail2ban-client set sshd banip 222.186.0.0/16