当某个 IP 访问某些端口时,如何自动禁止它?

当某个 IP 访问某些端口时,如何自动禁止它?

我有一个 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,但是存在一些问题。

  1. 我在 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。这种情况的正确规则是什么?

  2. 自动封禁 IP 的推荐方法是什么?我只想到:netstat -ntu | awk '{print $5}' |sort | uniq -c | sort -n每秒检查一次结果,并将不良 IP 添加到 iptables。

  3. 我知道 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

解释

  1. actionstart:我们可以添加一些仅在 fail2ban 启动期间执行的操作命令。因此,我们/etc/fail2ban/persistent.bans在启动时添加了

  2. actionban:每当对某个 IP 实施禁令时,该 IP 都会被添加到 persistent.bans 文件中,该文件将在 fail2ban 运行期间生效。如果您认为某个 IP 没有参与恶意攻击,您可以稍后轻松编辑此文件。

  3. 你可以手动禁止有问题的 IP,使用

    sudo fail2ban-client set sshd banip  112.0.0.0/8  
    sudo fail2ban-client set sshd banip  222.186.0.0/16
    

答案2

普萨德检查端口扫描并做出相应反应,检查此项关联有关如何配置它的简短说明。我刚刚在谷歌上搜索了一下,还有许多其他教程。它可以在 ubuntu 存储库中找到,请参阅这里

Fail2ban可能对你有用,看看他们的维基百科了解更多信息。它本质上会帮你检查日志文件,并可以自动阻止 IP 地址。它可在 ubuntu 存储库中找到,请参阅这里

相关内容