我的应用程序服务器位于受组织范围防火墙保护的网络上,并且我的服务器也使用fail2ban
.也就是说,我想设置一个额外的保护层iptables
。我的配置有点问题。
要求:
- 拒绝所有人访问,然后允许特定 IP 范围 (4.3.4.0/16)
- 应用程序中的延续 LDAP 功能(
ldap_connect
在 PHP 中使用) - 能够通过 URL 检索外部内容
已知:
- 应用服务器IP为1.2.3.4
- LDAP 服务器解析为 1.2.100.200 并使用端口 636
- 我的笔记本电脑的静态IP是4.3.2.1
我尝试过的:
从iptables
允许通过端口 22、80 和 443 进行流量的普通配置开始,我添加了以下内容。
# explicitly allow ssh access from my laptop
iptables -A INPUT -s 4.3.2.1 -d 1.2.3.4 -p tcp --dport 22 -j ACCEPT
# deny all traffic
iptables --policy INPUT DROP
# allow traffic from a specific IP range
iptables -A INPUT -s 4.3.4.0/24 -j ACCEPT
# allow traffic from LDAP server IP
iptables -A INPUT -s 1.2.100.200 -j ACCEPT
iptables -A INPUT -p tcp --dport 636 -j ACCEPT
我使用 保存该配置service iptables save
,然后重新启动服务。
问题:
如果我已经登录,我可以浏览和使用该应用程序(下面的一件事除外)。如果我没有登录,LDAP 身份验证就会挂起。
第二个问题是我无法使用新配置访问外部内容。我使用 HTTPS 从另一台机器检索数据。这只是添加一条规则以允许出站流量到达外部计算机的 IP 的问题吗?
答案1
LDAP 服务器是否可能使用非标准端口?
您可以通过以下方式查看 ldap 服务器正在侦听哪个端口netstat -tlpn
第二个问题是我无法使用新配置访问外部内容
我假设您的意思是应用这些规则后您无法从这台计算机连接到网络资源。请求可能会发出(因为您显然没有将OUTPUT
默认策略设置为 DROP),但远程服务器的响应将被防火墙丢弃。
您可以在生成您关心的流量时通过监控默认策略的数据包计数来验证这种情况是否发生:
root@xxxxxxvld02 ~ $ iptables -nvL
Chain INPUT (policy ACCEPT 157 packets, 18048 bytes)
pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 63 packets, 6998 bytes)
pkts bytes target prot opt in out source destination
在上面,157 packets
链上INPUT
是最终应用默认策略的数据包的计数(规则在左侧有自己的计数,并且不要更改顶部的数字)。
您可能想要创建一条规则,明确允许与现有连接相关的流量:
iptables -I INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT