zoukankan      html  css  js  c++  java
  • IPTABLES使用总结(内网模拟银行网络)

    iptables中有以下三种类型的表:

    1. FILTER表,默认的表,包含以下三种内建链:

      • INPUT链,发给本地sockets的包
      • FORWARD链,经由系统发送的包
      • OUTPUT链,本地生成并发出的包
    2. NAT表,当一个包试图创建新连接时将访问该表,该表包含以下内建链:

      • PREROUTING链,更改刚接收到的包
      • OUTPUT链,更改本地产生的包
      • POSTROUTING链,更改即将发出的包
    3. MANGLE表,用于包的更改:

      • PREROUTING链:更改传入连接
      • OUTPUT链:更改本地产生的包
      • INPUT链:更改传入的包
      • POSTROUTING链:更改即将发出的包
      • FORWARD链:更改经过的包

    本次业务需求,我们仅需要操作FILTER表。

    使用iptables思路

      由于每条tcp连接对于每个主机来说,都需要两个端口。对服务端来说,需要监听端口,即inputPort,也需要对客户端进行响应的出端口,即 outputPort。对客户端来说,也需要两个端口,一个去连接服务端的outputPort,一个接受服务端返回数据的inputPort。

     

      限制端口,可以在客户端进行限制,也可以在服务端进行限制。一般都是客户端去连接服务端的某个指定端口,所有只有服务端的inputPort是固定的,客户端的inputPort、outputPort和服务端的outPort都是随机端口,每次重新连接后,都会改变。故我们仅需用iptables对服务端的input端口进行限制即可。

    iptables 具体配置详解

    说明:
        -A:参数就看成是添加一条 INPUT 的规则
        -p:指定是什么协议 我们常用的tcp 协议,当然也有udp,例如53端口的DNS
        --dport:就是目标端口,当数据从外部进入服务器为目标端口
        --sport:数据从服务器出去,则为数据源端口
        -j:就是指定是 ACCEPT接收或者DROP不接收

    仅对input进行拦截。

       iptables -P INPUT DROP
       iptables -P FORWARD ACCEPT
       iptables -P OUTPUT ACCEPT

    清理原有所有iptables规则,并查看结果

    sudo iptables -F && sudo iptables -X && sudo iptables -Z && sudo iptables -S

    结果如下:

       -P INPUT ACCEPT
       -P FORWARD DROP
       -P OUTPUT ACCEPT

    允许回环流量 

    Loopback接口,也被称为lo ,就是一台电脑用来进行网络连接到自身。 
    iptables -A INPUT -i lo -j ACCEPT

    允许下面端口被别人连接

    因为output没有做限制,所以只需要限制input即可。
    iptables -A INPUT -p tcp -m multiport --dports 22,80,443,8080,8081,31020:31024,31031:31036,2375 -j ACCEPT

    允许自己去连接别人的以下端口

    因为对input做了限制,所以当自己去连接别家服务器的端口时,自己作为客户端,input端口需要开通,且该端口时随机的,故只能对数据源端口进行区分
    iptables -A INPUT -p tcp -m multiport --sports 22,31410,8080,31020:31024,31031:31036 -m conntrack --ctstate ESTABLISHED -j ACCEPT

    允许docker容器间的通信

    首先先查看本机docker使用的网段,再进行设置,此处docker网段为172.17.0.1/24,若不设置该规则,masami将无法访问mysql数据库
    iptables -A INPUT -s 172.17.0.0/24 -d 172.17.0.0/24 -j ACCEPT

    下面是目前使用的iptables规则

    目前仅对kafka和baas进行了限制,未对k8s的slave和master进行限制

    10.0.0.59 master1
    10.0.0.69 slave1
    10.0.0.71/192.168.9.28 baas1
    
    10.0.0.70 master2
    10.0.0.91 slave2
    10.0.0.92/192.168.9.51 baas2
    
    10.0.0.83 master3
    10.0.0.95 slave3
    10.0.0.74/192.168.9.32 baas3
    
    10.0.0.55 master4
    10.0.0.49 slave4
    10.0.0.42/192.168.9.30 baas4
    
    10.0.0.56 master5
    10.0.0.61 slave5
    10.0.0.73/192.168.9.29 baas5
    
    10.0.0.65/192.168.9.45 kafka1
    10.0.0.77/192.168.9.46 kafka2
    
    清理原有规则 
    iptables -F && iptables -X && iptables -Z && reboot
    
    kafka1
    iptables -P INPUT DROP
    iptables -P FORWARD ACCEPT
    iptables -P OUTPUT ACCEPT
    允许下面端口被别人连接
    iptables -A INPUT  -p tcp -m multiport --dports 22,80,443,2375 -j ACCEPT
    允许回环流量
    iptables -A INPUT -i lo -j ACCEPT
    允许下面端口被特定ip连接
    iptables -A INPUT -p tcp -s 10.0.0.69,10.0.0.91,10.0.0.95,10.0.0.49,10.0.0.61,10.0.0.65,10.0.0.77 -m multiport --dports 9092:9094,2181:2183,2888:2890,3888:3890 -j ACCEPT
    允许自己去连接别人的以下端口
    iptables -A INPUT -p tcp -m multiport --sports 22,9092:9094,2181:2183,2888:2890,3888:3890 -m conntrack --ctstate ESTABLISHED -j ACCEPT
    允许docker0和本地网卡流量
    iptables -A INPUT -s 172.18.0.0/24 -d 10.0.0.65 -j ACCEPT
    允许docker0内部流量
    iptables -A INPUT -s 172.18.0.0/24 -d 172.18.0.0/24 -j ACCEPT
    
    
    kafka2
    iptables -P INPUT DROP
    iptables -P FORWARD ACCEPT
    iptables -P OUTPUT ACCEPT
    允许回环流量
    iptables -A INPUT -i lo -j ACCEPT
    允许下面端口被别人连接
    iptables -A INPUT  -p tcp -m multiport --dports 22,80,443,2375 -j ACCEPT
    允许下面端口被特定ip连接
    iptables -A INPUT -p tcp -s 10.0.0.69,10.0.0.91,10.0.0.95,10.0.0.49,10.0.0.61,10.0.0.65,10.0.0.77 -m multiport --dports 9092:9094,2181:2183,2888:2890,3888:3890 -j ACCEPT
    允许自己去连接别人的以下端口
    iptables -A INPUT -p tcp -m multiport --sports 22,9092:9094,2181:2183,2888:2890,3888:3890 -m conntrack --ctstate ESTABLISHED -j ACCEPT
    允许docker0和本地网卡流量
    iptables -A INPUT -s 172.18.0.0/24 -d 10.0.0.77 -j ACCEPT
    允许docker0内部流量
    iptables -A INPUT -s 172.18.0.0/24 -d 172.18.0.0/24 -j ACCEPT
    
    
    baas5
    iptables -P INPUT DROP
    iptables -P FORWARD ACCEPT
    iptables -P OUTPUT ACCEPT
    允许回环流量
    iptables -A INPUT -i lo -j ACCEPT
    允许下面端口被别人连接
    iptables -A INPUT  -p tcp -m multiport --dports 22,80,443,8080,8081,31020:31024,31031:31036,2375 -j ACCEPT
    允许自己去连接别人的以下端口
    iptables -A INPUT -p tcp -m multiport --sports 22,31410,8080,31020:31024,31031:31036 -m conntrack --ctstate ESTABLISHED -j ACCEPT
    允许masami和mysql通讯
    iptables -A INPUT -s 172.17.0.0/24 -d 172.17.0.0/24 -j ACCEPT
    
    
    baas4
    iptables -P INPUT DROP
    iptables -P FORWARD ACCEPT
    iptables -P OUTPUT ACCEPT
    允许回环流量
    iptables -A INPUT -i lo -j ACCEPT
    允许下面端口被别人连接
    iptables -A INPUT  -p tcp -m multiport --dports 22,80,443,8080,8081,31020:31024,31031:31036,2375 -j ACCEPT
    允许自己去连接别人的以下端口
    iptables -A INPUT -p tcp -m multiport --sports 22,31410,8080,31020:31024,31031:31036 -m conntrack --ctstate ESTABLISHED -j ACCEPT
    允许masami和mysql通讯
    iptables -A INPUT -s 172.17.0.0/24 -d 172.17.0.0/24 -j ACCEPT
    
    baas3
    iptables -P INPUT DROP
    iptables -P FORWARD ACCEPT
    iptables -P OUTPUT ACCEPT
    允许回环流量
    iptables -A INPUT -i lo -j ACCEPT
    允许下面端口被别人连接
    iptables -A INPUT  -p tcp -m multiport --dports 22,80,443,8080,8081,31020:31024,31031:31036,2375 -j ACCEPT
    允许自己去连接别人的以下端口
    iptables -A INPUT -p tcp -m multiport --sports 22,31410,8080,31020:31024,31031:31036 -m conntrack --ctstate ESTABLISHED -j ACCEPT
    允许masami和mysql通讯
    iptables -A INPUT -s 172.17.0.0/24 -d 172.17.0.0/24 -j ACCEPT
    
    baas2
    iptables -P INPUT DROP
    iptables -P FORWARD ACCEPT
    iptables -P OUTPUT ACCEPT
    允许回环流量
    iptables -A INPUT -i lo -j ACCEPT
    允许下面端口被别人连接
    iptables -A INPUT  -p tcp -m multiport --dports 22,80,443,8080,8081,31020:31024,31031:31036,2375 -j ACCEPT
    允许自己去连接别人的以下端口
    iptables -A INPUT -p tcp -m multiport --sports 22,31410,8080,31020:31024,31031:31036 -m conntrack --ctstate ESTABLISHED -j ACCEPT
    允许masami和mysql通讯
    iptables -A INPUT -s 172.17.0.0/24 -d 172.17.0.0/24 -j ACCEPT
    
    baas1
    iptables -P INPUT DROP
    iptables -P FORWARD ACCEPT
    iptables -P OUTPUT ACCEPT
    允许回环流量
    iptables -A INPUT -i lo -j ACCEPT
    允许下面端口被别人连接
    iptables -A INPUT  -p tcp -m multiport --dports 22,80,443,8080,8081,31020:31024,31031:31036,2375 -j ACCEPT
    允许自己去连接别人的以下端口
    iptables -A INPUT -p tcp -m multiport --sports 22,443,31410,8080,38254,31020:31024,31031:31036 -m conntrack --ctstate ESTABLISHED -j ACCEPT
    允许masami和mysql通讯
    iptables -A INPUT -s 172.17.0.0/24 -d 172.17.0.0/24 -j ACCEPT

    转载请注明出处:https://www.cnblogs.com/zooqkl
  • 相关阅读:
    FMDB的简单使用
    SQLite3的基本使用
    KVC与KVO的实现原理
    数据存储与IO(二)
    数据存储与IO(一)
    cocoapods卸载与安装的各种坑
    Core Data的一些常见用法
    UITextField限制中英文字数和光标定位以及第三方输入限制问题
    prompt-tuning paper reading
    ACL2021 事件抽取相关论文阅读
  • 原文地址:https://www.cnblogs.com/zooqkl/p/10305674.html
Copyright © 2011-2022 走看看