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


26

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


正如Gilles演示的概念是这样的:为要允许的每个特定事物添加ACCEPT规则(无论是通过源IP还是其他限定条件),然后将默认策略设置为REJECT。
Caleb

Answers:


27

我很久以前就为台式机用户写了一篇有关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

如果您只想通过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

不过,这样做可能会遇到问题,我建议您使用状态来简化生活。例如,不允许,-i lo并且-o lo一定会对某些应用程序造成问题。


4
而不是DROP,您应该拒绝不需要的数据包,因为它使诊断问题变得更加容易并且可以防止超时。请参阅拒绝具有ICMP错误的IP数据包,或者只是丢弃它们?
吉尔(Gilles)'所以

我尝试了两种设置,但KeePass2无法启动,知道吗?另外,如果我这样做iptables -F是为了清除所有规则,那么甚至无法ping ubuntu.com
Pawel Cioch

@PawelCioch为什么KeePass2仍然需要互联网连接?
亚历克斯

@Alex将数据库文件存储在远程位置,这个我要单个IP。但我想出了一切,设置比此处的示例更为复杂
Pawel Cioch,

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

@Gilles要正确使用RELATED和ESTABLISHED状态,您需要将初始数据包匹配为NEW状态。 lo在上面的示例中,状态匹配中排除了该示例,并且始终允许该示例。
penguin359 2011年

@ penguin359:您能否详细说明为什么需要新的?我不是iptables专家,我从家用路由器部分复制了这些规则,这在NEW上不匹配。据我了解,第一条规则之后剩下的就是新(或未跟踪)数据包。(如果我实在太过分了,并且您无法在评论中进行解释,请在发布您的版本时附上解释作为答案,然后我将删除我的版本。)
Gilles'SO-别邪恶了'

@Gilles在接受任何内容之前,我总是将其设置为INVALID状态……这使得任何非INVALID,相关,已建立的内容必须为NEW状态。但是我不知道其他任何原因都必须指定NEW。从理论上讲,如果您不处理INVALID,并且不指定NEW,则最终可能会接受INVALID。但是一旦处理了INVALID,在我看来,检查每个规则上的NEW状态仅需要对数据包进行更多处理。
xenoterracide 2011年

@Gilles的默认拒绝策略也很糟糕,因为它会为接收到的每个数据包发送一个拒绝数据包,这加剧了DOS攻击。
xenoterracide 2011年


7

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

iptables -I INPUT -p tcp ! -s yourIPaddress --dport 22 -j DROP

3
谢谢您的简洁答复。如果我要允许一些IP和IP范围,这将如何变化。yourIPaddress我可以代替一些IP地址和范围吗?并且,如果我在非标准端口(例如2888)上使用SSH,则该命令会将22示例中的更改为2288?另外,这还会阻止除允许的IP之外的所有IP的rsync,sftp等到此服务器的访问吗?
PKHunter,2017年

1
请注意,这-p tcp很重要,因为--dport没有它就无法工作。我还建议您使用-j REJECT而不是DROP因为REJECT使端口与封闭端口相同,DROP并使发往该端口的数据包出现黑洞。实际上,远程攻击者可以DROP从实际关闭的端口中检测配置的端口。
米科·兰塔莱宁

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.