如何使用iptables阻止除80443外的所有端口?[重复]


15

阻塞所有端口(输入和输出)很容易,但是用“ except”一词很难。我不知道任何满足条件的规则。

PS:我知道这个问题并不新鲜。但实际上,我没有找到任何帮助。所以,请帮我!


您不能关闭所有端口,然后在下一行中打开一个端口吗?
sinni800 2014年

我这样做:iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP iptables -I INPUT -p tcp --dport 80 -j ACCEPT ------这是行不通的!
user71169 2014年

Answers:


25

首先!是NOT符号。

iptables -A INPUT -p tcp -m tcp -m multiport ! --dports 80,443 -j DROP

其次,您编写的规则可能没有预期的结果。您删除了所有内容,包括对端口80的连接的响应。因此,出于Web服务器的目的,您将无法连接到该端口。

这些规则允许进行RELATED和ESTABLISHED连接,因此Web服务器应该可以运行,如果实际上这是您要尝试的操作。

iptables -A INPUT -p tcp -m tcp -m multiport --dports 80,443 -j ACCEPT
<insert further allowed list here>
iptables -A INPUT -m conntrack -j ACCEPT  --ctstate RELATED,ESTABLISHED
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -j DROP
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -j DROP
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -j DROP

2
如果使用了Bash shell,是否不应该!这样逃脱\!
Cristian Ciupitu 2014年

@CristianCiupitu不,它不需要逃脱。您可能会发生一些奇怪的事情,但是只要我坚持不懈,我就不必逃避它。
Cyber​​nard 2014年

我检查了“ iptables -nvL”的输出,以查看连接中的软件包。您的规则似乎可行。但是我无法检查它是否真的有效,除非使用某些使用那些端口的应用程序。应用程序使用端口并不意味着它仅使用该端口。那么,有什么建议检查吗?
user71169 2014年

1
@cybernard,是的,你是对的。平原!不需要逃脱。对不起,误报。
Cristian Ciupitu 2014年

3
@MohammadShahid规则不会自动永久生效,重新启动后它将消失,您可以登录。如果要保持ssh连接,则需要在端口列表中添加22。
赛伯纳德

5
# Set the default policy of the INPUT chain to DROP
iptables -P INPUT DROP

# Accept incomming TCP connections from eth0 on port 80 and 443
iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 443 -j ACCEPT

这应该给你你所需要的


4
请记住,如果您通过SSH连接,则应打开TCP端口22
Maximilian Ast,2016年

是的,不要忘记您的SSH端口,在设置默认策略为drop之前,可能应该添加SSH端口。;)
James Little

3

您可以将默认操作设置为DROP,然后创建允许80和443的异常规则,如下所示:

# Setting default policies:
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

# Exceptions to default policy
iptables -A INPUT -p tcp --dport 80 -j ACCEPT       # HTTP
iptables -A INPUT -p tcp --dport 443 -j ACCEPT      # HTTPS

iptables将遍历“例外”列表,直到找到匹配项。然后它将执行-j参数指定的操作(在这种情况下为ACCEPT)。如果找不到匹配项,它将退回到默认策略并丢弃数据包。

请注意,通过这种解决方法,所有子域都将被锁定。例如,使用此方法,您可以使其在www.mydomain.com上正常运行,但您的子域则说www.sub.mydomain.com不会因DNS错误而打开。


应该可以,但是不可以。我很困惑
user71169 2014年

什么不起作用?它允许所有传入数据包,还是不允许?可以使用输出更新您的问题iptables -nvL吗?
mtak 2014年

为什么要投反对票?我已经将此产品投入生产,因此我100%确信它可以正常工作。
mtak 2014年

抱歉! 不是我,有人这样做的:))是的,您确定像我一样,但是不起作用。那就是为什么我要提出这个问题。
user71169 2014年

2
不要结束了ssh
Ashesh
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.