iptables:允许某些 ips 并阻止所有其他连接

Dav*_*vid 35 linux firewall iptables

如何允许某些 ips 并阻止 iptables 中的所有其他连接?

xen*_*ide 31

很久以前我写了一篇关于桌面用户基本 Iptables 规则博客文章,你可能应该阅读它,以及它关于状态防火墙设计的链接文章。但是内核 2.6.39 之前的版本(ipset如果您有 10 个以上的白名单(其中 10 个是任意的),那么您可能希望使用它来将 IP 列入白名单)。

首先处理我们知道要接受或删除的状态和接口。

iptables -P FORWARD DROP # we aren't a router
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -s 192.168.1.1 -j ACCEPT
iptables -P INPUT DROP # Drop everything we don't accept
Run Code Online (Sandbox Code Playgroud)

如果你只想通过 IP 做一个允许,没有状态

iptables -A INPUT -s 192.168.1.1 -j ACCEPT
iptables -A OUTPUT -d 192.168.1.1 -j ACCEPT
iptables -P INPUT DROP
iptables -P OUTPUT DROP
Run Code Online (Sandbox Code Playgroud)

不过,这样做可能会遇到问题,我建议使用 state 来让您的生活更轻松。例如,不允许-i lo并且-o lo肯定会导致某些应用程序出现问题。

  • 您应该拒绝不需要的数据包,而不是 DROP,因为它可以更轻松地诊断问题并防止超时。请参阅[拒绝带有 ICMP 错误的 IP 数据包,或只是丢弃它们?](http://security.stackexchange.com/questions/3290/reject-ip-packets-with-an-icmp-error-or-just-drop -他们) (5认同)

Gil*_*il' 10

这是一个(未经测试!)仅阻止传入连接的示例。允许通过环回接口连接,来自 192.168.3.x、ICMP 或到 SSH 端口。所有其他连接都被拒绝。

iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p icmp -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -s 192.168.3.0/24 -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -j REJECT
Run Code Online (Sandbox Code Playgroud)


小智 9

以下规则将仅允许您的 IP 并阻止所有其他 IP 通过端口 22 或 ssh。断开连接前用新端子进行测试。

iptables -I INPUT -p tcp ! -s yourIPaddress --dport 22 -j DROP
Run Code Online (Sandbox Code Playgroud)

  • 谢谢你的简洁回答。如果我想允许一些 IP 和 IP 范围,这将如何改变。我可以添加一些 IP 地址和范围来代替“yourIPaddress”吗?如果我在 2888 等非标准端口上使用 SSH,那么该命令会将示例中的“22”更改为“2288”?此外,这是否还会阻止 rsync、sftp 等从除允许的 IP 之外的所有 IP 发送到该服务器? (3认同)