我为什么需要这个
我在一家大型公司网络上有一台运行新版 jenkins 的服务器。我已将所有作业(>600)迁移到新服务器。这些作业连接到我们网络上的不同服务器。启动 jenkins 后,某些作业将运行覆盖工件,将 docker 镜像推送到内部注册表等。为了防止这种情况发生,而无需进入所有 600 个作业并禁用它们,我希望禁用来自服务器的本地网络访问。网络管理员说他们不想弄乱防火墙规则,担心他们会禁用对一些重要服务器的访问。所以我需要在服务器端使用 iptables 来实现。
我需要什么
我希望做的是禁用除一个 IP 之外的 LAN 访问,并启用 Internet 访问。更详细地说,它是这样的。
允许通过端口 22 访问 ssh 服务器,通过端口 8080 访问 jenkins (我与服务器位于不同的子网)
允许访问互联网以安装插件和构建外部依赖项。
降低从服务器到本地网络 10.0.0.0/8 的任何内容。服务器位于 10.xxx/24,它可以通过 10.xx1 上的路由器访问不同的子网
我尝试过什么
放弃前的最后一次尝试。什么也没做。
#my ip
iptables -j ACCEPT -s 10.x.x.x -i ens160 -A IN_public
iptables -j ACCEPT -d 10.x.x.x -o ens160 -A OUTPUT_direct
#subnet
iptables -j DROP -d 10.0.0.0/8 -o ens160 -A OUTPUT_direct
答案1
在我提供规则集之前,请注意以下几点:
避免通过脚本修改防火墙。最佳流程:
- 使用命令保存当前规则集
iptables-save > fwrules.v4
- 编辑规则
- 使用命令测试规则
iptables-restore -t fwrules.v4
- 使用命令安全应用规则
iptables-apply -t <timeout> fwrules.v4
。其中<timeout>
确认超时时间(以秒为单位)。如果您不确认新规则集,它将回滚到上一个规则集。
- 使用命令保存当前规则集
我猜测服务器有一个网络接口。
- 规则本身设置:
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
# allow reply packets
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
# allow incoming ICMP like ping and other
-A INPUT -p icmp -j ACCEPT
# allow to ssh and to jenkins from anywhere
-A INPUT -m conntrack --ctstate NEW -p tcp -m multiport --dports 22,8080 -j ACCEPT
# allow localhost connections
-A INPUT -i lo -j ACCEPT
# allow output packets to trust host
-A OUTPUT --dst 10.0.0.12 -j ACCEPT
# block output packets to other lan hosts
-A OUTPUT --dst 10.0.0.0/8 -j REJECT
COMMIT
- DNS 服务器地址又如何?如果它们位于本地子网中,您也应该允许它。
- 规则的顺序非常重要。