我有 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
因为它会将您锁定在服务器之外。