Answers:
我很久以前就为台式机用户写了一篇有关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
一定会对某些应用程序造成问题。
iptables -F
是为了清除所有规则,那么甚至无法ping ubuntu.com
这是一个(未经测试!)示例,仅阻止传入连接。允许通过回送接口从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
lo
在上面的示例中,状态匹配中排除了该示例,并且始终允许该示例。
以下规则将仅允许您的IP并通过端口22或ssh阻止所有其他IP。断开连接之前,请使用新的端子进行测试。
iptables -I INPUT -p tcp ! -s yourIPaddress --dport 22 -j DROP
yourIPaddress
我可以代替一些IP地址和范围吗?并且,如果我在非标准端口(例如2888)上使用SSH,则该命令会将22
示例中的更改为2288
?另外,这还会阻止除允许的IP之外的所有IP的rsync,sftp等到此服务器的访问吗?
-p tcp
很重要,因为--dport
没有它就无法工作。我还建议您使用-j REJECT
而不是DROP
因为REJECT
使端口与封闭端口相同,DROP
并使发往该端口的数据包出现黑洞。实际上,远程攻击者可以DROP
从实际关闭的端口中检测配置的端口。
这是完整的工作示例。
还可以使应用程序正常工作(例如:我对keepass的评论未启动)