![iptables 规则针对来自特定 IP 和端口的传入](https://linux22.com/image/1573850/iptables%20%E8%A7%84%E5%88%99%E9%92%88%E5%AF%B9%E6%9D%A5%E8%87%AA%E7%89%B9%E5%AE%9A%20IP%20%E5%92%8C%E7%AB%AF%E5%8F%A3%E7%9A%84%E4%BC%A0%E5%85%A5.png)
我有 2 台服务器,一台用于 Web 请求(我将其命名为web
),另一台用于数据库(我将其命名为db
)。两台服务器都是 CentOS 7。
我想制定以下规则iptables
:
- 所有对服务器的请求
db
都应被阻止(所有端口上的所有 IP); - 只有
web
服务器(y.y.y.y
)可以db
通过端口5432
和访问服务器6379
; - 只需静态ip(
x.x.x.x
)即可访问端口22
。
所以我写了这些规则,但我不确定它们是否正确
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
iptables -A INPUT -p tcp --dport 5432 -s y.y.y.y -j ACCEPT
iptables -A INPUT -p tcp --dport 6379 -s y.y.y.y -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -s x.x.x.x -j ACCEPT
答案1
虽然这些规则看起来正确(假设它们进入服务器db
),但您缺少一条重要规则,即:
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
如果没有该规则,并且采用默认INPUT
策略DROP
,您的db
服务器本身将无法访问网络,例如安装升级或ping
/traceroute
可达性检查等。
因此完整的iptables
规则集应该是
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport 5432 -s y.y.y.y -j ACCEPT
iptables -A INPUT -p tcp --dport 6379 -s y.y.y.y -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -s x.x.x.x -j ACCEPT
请确保不要执行iptables -P INPUT DROP
via,ssh
因为它会将您锁定在服务器之外。