我正在使用 Ubuntu 18.04 iptables
。
我希望攻击者在尝试映射我的端口时看到一致的状态。我希望我的所有端口都显示为已过滤(即删除所有内容)。但是,当我使用某些应用程序时,它们需要特定的开放端口。
我希望对于这个特定端口,如果没有应用程序侦听该端口,防火墙将丢弃所有内容(而不是回复拒绝)。如果有应用程序正在侦听,则允许所有内容。
是否可以?
答案1
虽然我不知道有一条简单的iptables
规则可以根据实际侦听该端口的服务来打开/关闭端口,但您可以通过将默认策略更改iptables
为DROP
并允许来实现所需的目的仅有的您需要的端口。
例如,假设你一直在sshd
听(port 22
apache2
port 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)停止。