使用docker和iptables拒绝传入流量

时间:2020-04-28 15:39:25

标签: docker jenkins ansible

在独立服务器中,我有一个运行jenkins的docker容器。我想写一本允许我(一些公共IP,例如107.33.11.111)通过22和8080连接到我的独立服务器上的jenkins服务器的剧本。我的独立服务器上的eth0上出现了公共流量。我正在使用this guide尝试使这项工作成功。

这是我运行詹金斯的一个例子:

# privileged is needed to allow browser based testing via chrome
- name: Run jenkins container
  command: docker run --privileged -d -p 8080:8080 -p 50000:50000 -v jenkins_home:/var/jenkins_home jenkins/jenkins:lts-jdk11

然后我设置此防火墙规则:

- name: Firewall rule - allow port 22/SSH traffic only for me
  iptables:
    chain: INPUT
    in_interface: eth0
    destination_port: 22
    jump: ACCEPT
    protocol: tcp
    source: 107.33.11.111

- name: Firewall rule - allow port 8080 traffic only for me
  iptables:
    chain: INPUT
    in_interface: eth0
    destination_port: 8080
    jump: ACCEPT
    protocol: tcp
    source: 107.33.11.111

- name: Firewall rule - drop any traffic without rule
  iptables:
    chain: INPUT
    jump: DROP
    in_interface: eth0

当我执行上面的剧本并运行iptables -L时,我的输出仅修剪为:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination 

当我删除最后一条丢弃所有流量的规则时,我可以观察到整个输出,并且ip表显示我的ip被允许用于端口22和8080。但是,所有进入eth0的流量都可以到达这些端口也是

我需要做些什么才能将22和8080仅允许用于我的ansible剧本中的特定公共地址?

1 个答案:

答案 0 :(得分:3)

对于您的特定用例,您无需跳到另一条链,但是您可以在允许8080和22之后将默认策略设置为DROP

替换为剧本中的最后一个节

- name: Firewall rule - drop any traffic without rule
  iptables:
    chain: INPUT
    policy: DROP