当没有应用程序监听时,从特定端口丢弃数据包(而不是拒绝)?

当没有应用程序监听时,从特定端口丢弃数据包(而不是拒绝)?

我正在使用 Ubuntu 18.04 iptables

我希望攻击者在尝试映射我的端口时看到一致的状态。我希望我的所有端口都显示为已过滤(即删除所有内容)。但是,当我使用某些应用程序时,它们需要特定的开放端口。

我希望对于这个特定端口,如果没有应用程序侦听该端口,防火墙将丢弃所有内容(而不是回复拒绝)。如果有应用程序正在侦听,则允许所有内容。

是否可以?

答案1

虽然我不知道有一条简单的iptables规则可以根据实际侦听该端口的服务来打开/关闭端口,但您可以通过将默认策略更改iptablesDROP并允许来实现所需的目的仅有的您需要的端口。

例如,假设你一直在sshd听(port 22apache2port 80如果通过 ssh 连接,请不要这样做!

# Start with empty tables
iptables -F
iptables -X

# Change INPUT policy to DROP
iptables -P INPUT DROP

# Make sure the machine itself can connect to the internet
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# Maybe allow ICMP's echo/reply (i.e. ping)
iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT

# Add ports for which there are services listening
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT

这边走,除 22 和 80 之外的所有端口iptables 郵件。

如果需要开放新端口,只需添加(“附加”)新规则

iptables -A INPUT -p tcp --dport NN -j ACCEPT

如果不再需要某个端口,请删除相关规则

iptables -D INPUT -p tcp --dport 80 -j ACCEPT

如果您想要一种基于服务的自动允许/拒绝(从您的问题来看是这样),您可以始终拥有一个基本iptables规则集,然后修改服务的脚本以附加(-A)相关规则启动并删除它(-D)停止

相关内容