我为什么需要这个

我为什么需要这个

我为什么需要这个

我在一家大型公司网络上有一台运行新版 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

在我提供规则集之前,请注意以下几点:

  • 避免通过脚本修改防火墙。最佳流程:

    1. 使用命令保存当前规则集iptables-save > fwrules.v4
    2. 编辑规则
    3. 使用命令测试规则iptables-restore -t fwrules.v4
    4. 使用命令安全应用规则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 服务器地址又如何?如果它们位于本地子网中,您也应该允许它。
  • 规则的顺序非常重要。

相关内容