2014-06-17 09:06:40 +0000 2014-06-17 09:06:40 +0000
15
15

如何用iptables屏蔽除80,443以外的所有端口?

封锁所有的端口(进出)很容易,但是有 “除外 "二字就很难了。我不知道有什么规则可以满足这个条件。

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

答案 (3)

25
25
25
2014-06-18 01:46:30 +0000

首先!是NOT符号。

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

其次,你写的规则可能没有达到预期的结果。你丢掉了所有的东西,包括80端口上连接的响应。因此,你将无法连接到它说的目的是一个Web服务器。

这些规则允许关联和建立的连接,因此,如果你想做的是这个的话,那么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
5
5
5
2014-06-17 09:12:54 +0000
# 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

这应该是你所需要的。

3
3
3
2014-06-17 09:11:51 +0000

你可以将默认操作设置为 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 错误而无法打开。