如何阻止除某些端口之外的所有端口?

如何阻止除某些端口之外的所有端口?

我正在尝试使用,iptables但我对理解文档一无所知,甚至在尝试实现它时我已经两次将自己锁定在服务器之外。

这些是我想要实施的简单规则:

  • 允许所有人使用端口 80、6667 和 6697
  • 例如,仅允许端口 22 用于我的 IP10.10.10.10

请问有人可以帮助我实施这些简单的规则,而不会将自己锁在外面吗?

答案1

iptables如果您还没有准备好学习网络基础知识、TCP(ICMP/UDP/SCTP...)/IP、Linux 的 netfilter 以及如何首先进行适当的防火墙,我建议您不要直接使用。

在这里,由于您使用的是 Debian,所以我会ufwiptables.

它为传出流量设置默认策略 ACCEPT,为传入或转发流量设置 DROP。它不会阻止所需类型的 ICMP/DHCP/广播/组播流量,并根据需要处理 IPv4 和 IPv6,从而避免你的脚出问题。

然后您要做的就是为您想要的服务打孔。有些软件包还会安装文件/etc/ufw/applications.d/来帮助您通过应用程序打孔,而不必手动指定端口(您也可以创建自己的端口)。

ufw app list

为您提供这些支持的应用程序的列表。然后你可以这样做:

ufw allow from 10.10.10.10 app OpenSSH
ufw allow from any app WWW
ufw allow ircd/tcp # by service name (from /etc/services...)
ufw allow 6697/tcp # by explicit port number
ufw enable

你可以运行iptables-save看看它生成了哪些规则。它还将调整 IP 堆栈的一些设置。另请参阅 中的额外配置/etc/ufw

答案2

使用过滤表iptables并添加您想要的规则,首先刷新过滤表中的所有规则iptables

sudo iptables -t filter -F

然后添加规则以允许 ESTABLISHED,RELATED 连接:

sudo iptables -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

然后为了允许每个人使用 TCP 端口 80、6667 和 6697,添加:

sudo iptables -t filter -A INPUT -p tcp -m multiport --dports 80,6667,6697 -j ACCEPT

并允许端口 22 仅用于您的 ip 添加:

sudo iptables -t filter -A INPUT -s <your ip address> -p tcp --dport 22 -J ACCEPT

然后阻止其他任何内容添加:

sudo iptables -t filter -A INPUT -j DROP

完毕。

答案3

如果您有兴趣学习如何使用 iptables,我建议您不是尝试在服务器上配置它,而是在本地计算机(例如虚拟机或笔记本电脑)上安装 iptables 并在那里进行试验。这样,如果您犯了错误,您就不会将自己锁定在系统之外。

就我个人而言,即使在管理 Linux 服务器并手动编写 iptables 脚本十五年之后,我也从未更新过防火墙配置,除非我有办法在犯错误时立即重新启动服务器(无论是通过 KVM 系统、主机托管商的控制面板) ,或者能够亲自走到机器前)。毕竟,错误总是有可能的,并且您不想因为一个简单的拼写错误而意外地将自己锁定在自己的服务器之外七个小时。

相关内容