iptables 阻止除 http/https/ssh 之外的所有内容

iptables 阻止除 http/https/ssh 之外的所有内容

我的 vps 上有这个 iptables 配置,用于运行 Wordpress。我想要做的是阻止除端口 80 上的 http、端口 443 上的 https 和端口 22 上的 ssh 之外的所有传入请求。

Chain INPUT (policy ACCEPT)
    num  target     prot opt source               destination         
    1    f2b-sshd   tcp  --  anywhere             anywhere             multiport dports ssh
    
    Chain FORWARD (policy ACCEPT)
    num  target     prot opt source               destination         
    
    Chain OUTPUT (policy ACCEPT)
    num  target     prot opt source               destination         
    
    Chain f2b-sshd (1 references)
    num  target     prot opt source               destination         
    1    REJECT     all  --  [retracted_ip]       anywhere             reject-with icmp-port-unreachable
    2    REJECT     all  --  [retracted].com     anywhere             reject-with icmp-port-unreachable
    3    RETURN     all  --  anywhere             anywhere            

我在网上找到了一些命令,但我不确定它们是否会与 fail2ban 冲突。

答案1

一般来说:

iptables -L -v -n --line-numbers防火墙规则按照其设置和出现的顺序进行处理(在、iptables -L -v -n -t nat --line-numbers和 /或类似命令的输出中iptables-save)。

在错误的链和/或错误的顺序中创建新规则将导致不良后果、破坏功能、破坏安全性和/或锁定有效流量。

请注意,运行低级iptables命令来管理防火墙可能并不总是最好的解决方案。据我所知,在 Ubuntu 中使用 UFW 工具是首选,并且可以与 fail2ban 协同可靠地工作。


Fail2ban 创建一个或多个自定义链(处理阻止特定行为不当的 IP 地址的大部分繁重工作),如链f2b-sshd。通常,您让 fail2ban 管理这些链中的条目。

此外,fail2ban 还会为其在链中创建的自定义链创建规则INPUT。通常,这些规则必须来自首先在 INPUT链,在您创建任何其他规则之前。

在您当前的防火墙配置中,当您使用 iptables 和交换机-A将新规则附加到 INPUT 链时,一切都应该正常工作。


运行以下命令将附加常用规则以创建允许 ssh、http 和 https 并阻止所有其他传入流量的防火墙。

iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp  -m tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp  -m tcp --dport 443 -j ACCEPT
iptables -A INPUT -j REJECT --reject-with icmp-host-prohibited

答案2

首先让我们备份:)

sudo iptables-save > ./mybackup

如果您失去连接并需要 KVM,您可以轻松回到备份的开始

sudo iptables-restore < ./mybackup

然后你就可以开始添加规则

sudo iptables -A INPUT -d YOURIPPUBLIC -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A INPUT -d YOURIPPUBLIC  -p tcp -m tcp --dport 443 -j ACCEPT
sudo iptables -A INPUT -d YOURIPPUBLIC  -p tcp -m tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -d YOURIPPUBLIC  -p tcp -m tcp --dport 22 -j DROP
sudo iptables -A INPUT -d YOURIPPUBLIC  -j DROP

如果您想要为实例以外的 IP 设置防火墙,请按上述操作,YOURIPPUBLIC:33.33.33.33 或使用网络掩码 33.33.33.33/32

相关,已建立 - 如果在连接之前已建立,则跳过所有防火墙的下一个规则,若要建立连接,请遵循下一个规则:)

如果你想要整个网络

sudo iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
sudo iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp -m tcp --dport 22 -j DROP
sudo iptables -A INPUT -j DROP

您可以保存以供稍后编辑:

iptables-save > /.mynew.iptables.list.txt

相关内容