如何在 iptables 中允许某些 ip 并阻止所有其他连接?
答案1
我写了一个有关桌面用户基本 Iptables 规则的博客文章很久以前,你可能应该阅读它,以及它的链接文章状态防火墙设计。但是内核 2.6.39 之前的版本(其中包括,ipset
如果您有超过 10 个要列入白名单的 IP(其中 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
肯定会给某些应用程序带来问题。
答案2
这是一个(未经测试!)的示例,它会阻止传入仅连接。允许通过环回接口从 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
答案3
以下规则将仅允许您的 IP 并阻止通过端口 22 或 ssh 的所有其他 IP。断开连接之前使用新终端进行测试。
iptables -I INPUT -p tcp ! -s yourIPaddress --dport 22 -j DROP
答案4
这是完整的工作示例。
也使应用程序正常工作(回复:我关于keepass未启动的评论)