zoukankan      html  css  js  c++  java
  • iptables四表五链及默认规则使用,

    网络基础

    TCP/IP模型:

        应用层===传输层===网络层===数据链里层===物理层

      数据封装:

        MAC帧头+IP报头+TCP/UDP报头===HTTP请求

        数据帧

         TCP/UDP报头:

           随机产生一个大于1024的端口

           目的端口:80

         IP报头:

           源IP地址

           目的IP地址

         MAC帧头:

           源MAC地址

           目的MAC地址

    端口号Port:

      作用:标识不同应用程序

      数字:0---65535,小于1024端口为著名端口

      常用端口:

    http         tcp/80
    https        tcp/443
    SSH          tcp/22
    telnet        tcp/23
    ftp            tcp/21(命令连接),tcp/20(数据连接)
    mysql        tcp/3306
    smtp         tcp/25
    pop3        tcp/110
    dns            tcp/53,udp/53
    dhcp           udp/67(服务端),udp/68(客户端)
    SAMBA        tcp/139,tcp/445,udp/137.udp/138
    ntp              udp/123
    zabbix         tcp/10050(agent),tcp/10051(server)
    

     ARP-----Address Resolution Protocol 地址解析协议

      作用:根据已知的IP地址获取对应的MAC地址

    Linux iptables 

      作用:

        进行数据过滤:入方向,出方向,转发穿过服务器的

        为数据打标记

        网络地址转换

      Linux防火墙

        内核集成的模块netfilter

        iptables工具:实现添加,删除,修改,查看防火墙规则

    钩子函数,用来钩数据的

    input:处理进来的数据

    output:处理出去的数据

    forward:处理转发的数据

    prerouting:截获路由前的操作,数据处理没进网卡前

    postrouting:截获路由后的操作,数据处理完了,从网卡流出去后

    五条链

    存规则的:INPUT,OUTPUT,FORWARD,PREROUTING,POSTROUTING

    iptables四表:

        filter(实现实现数据过滤):INPUT,OUTPUT,FORWARD

        nat (实现实现网络地址转换,换ip的):PREROUTING,OUTPUT,POSTROUTING

        mangle(为数据打标记):INPUT,FORWARD,OUTPUT,PREROUTING,POSTROUTING

        raw(数据跟踪的)PREROUTING,OUTPUT

    iptables工具的使用

    # iptales <command> <chain> <rule>

    命令command

    查看类:

      -L:显示指定表中得规则

        -n:以数字的格式显示IP及端口号

        -v:显示规则相关的详细信息

        -x:显示计数器显示精确的数字

        --line-numbers:显示规则的号码

        -t:<table>:指定表名,默认为filter表

    # iptables -nL --line-numbers -v

    管理规则

    1)添加规则

      -A:追加一条规则,添加到链的尾部

      -I CHAI【number】:插入一条规则,插入为CHAIN的第number条;number不写表示插入到第一条。-I INPUT

    2)删除规则

      -D CHAIN【number】:删除指定链的第number条规则

    3)修改规则

      -R CHAIN【number】:替换指定的规则

    4)清空所有规则

      -F  CHAIN

    5)修改链的默认规则

      -P CHAIN <处理方法> 

    规则的匹配标准

    1)源IP地址

      -s address

        ! -s 192.168.1.1

        -s 192.168.1.0/24

    2)目的IP地址

      -d address

        !-d 10.1.1.1

        -d 10.1.1.0/24

    3)协议

      -p tcp  -sport port1[:port2]

      -p tcp --dport port1[:port2]

      -p udp --sport port1[:port2]

      -p udp --dport port1[:port2]

      -p icmp

        --icmp-type 8    echo-request

        --icmp-type 0  echo-reply

    4)匹配数据包进行的网卡接口

      -i eth0

    5)匹配数据包流出的网卡接口

      -o eth1

    数据包的处理行为 -j target

      ACCEPT  允许

      REJECT  拒绝

      DROP     丢弃

      LOG    记录日志

    先堵后通

    主机IP是192.168.150.163d

    实例1:允许客户端访问SSH服务  -P(修改某一条链的默认规则)

    [root@node1 ~]# iptables -P INPUT DROP
    [root@node1 ~]# iptables -P OUTPUT DROP
    [root@node1 ~]# iptables -P FORWARD DROP

    [root@node1 ~]# iptables -A INPUT -s 192.168.122.1 -d 192.168.122.135 -p tcp --dport 22 -j ACCEPT
    [root@node1 ~]# iptables -A OUTPUT -s 192.168.122.135 -d 192.168.122.1 -p tcp --sport 22 -j ACCEPT

    实例2:允许所有客户端访问web服务器

    [root@node1 ~]# iptables -I INPUT -d 192.168.122.135 -p tcp --dport 80 -j ACCEPT
    [root@node1 ~]# iptables -I OUTPUT -s 192.168.122.135 -p tcp --sport 80 -j ACCEPT

    实例3:允许客户端10.1.2.101  ping服务器

    [root@node1 ~]# iptables -A INPUT -s 192.168.122.1 -d 192.168.122.135 -p icmp --icmp-type 8 -j ACCEPT
    [root@node1 ~]# iptables -A OUTPUT -s 192.168.122.135 -d 192.168.122.1 -p icmp --icmp-type 0 -j ACCEPT

    实例4:允许服务器ping其他主机

    [root@node1 ~]# iptables -A OUTPUT -s 192.168.122.135 -p icmp --icmp-type 8 -j ACCEPT
    [root@node1 ~]# iptables -A INPUT -d 192.168.122.1 -p icmp --icmp-type 0 -j ACCEPT

    实例5:允许服务器ping本机

    [root@node1~]# iptables -A INPUT -i lo -j ACCEPT

    [root@node1~]# iptables -A OUTPUT -o lo ACCEPT

    实例6:允许DNS服务器解析所有主机名

    [root@node1~]# iptables -A INPUT -d 192.168.122.135 -p udp --dport 53 -j ACCEPT

    [root@node1~]# iptables -A OUTPUT -s 192.168.122.135 -p udp --sport 53 -j ACCEPT

    [root@node1~]# iptables -A INPUT -s 192.168.122.135 -p udp --dport 53 -j ACCEPT

    [root@node1~]# iptables -A INPUT -d 192.168.122.135 -p udp --sport 53 -j ACCEPT 

    [root@node1~]# iptables -A INPUT -d 192.168.122.135 -p tcp --dport 53 -j ACCEPT

    [root@node1~]# iptables -A OUTPUT -s 192.168.122.135 -p tcp -sport 53 -j ACCEPT

    [root@node1~]# iptables -A INPUT -s 192.168.122.135 -p tcp --dport 53 -j ACCEPT

    [root@node1~]# iptables -A OUTPUT -d 192.168.122.135 -p tcp --sport 53 -j ACCEPT

    保存防火墙规则

    Centos 6:

    [root@node1~]# service iptables save

    iptables:将防火墙规则保存到 /etc/sysconfig/iptables:    [确定]

    Centos 7:

    [root@node1~]# iptables-save > /iptables.rule

    恢复规则

    [root@node1~]# iptables-restore < /iptables.rule

    实例7:删除规则

    [root@node1~]# iptables -D INPUT 3

    实例8:修改规则

    [root@node1~]# iptables -R INPUT 7 -d 192.168.122.135 -p icmp --icmp-type 0 -j ACCEPT

    iptables模块

    1、multiport 离散多端口

      -m multiport

        --sports port1,port2,port3

        --dports port1,port2,port3

    [root@node01 ~]# iptables -I INPUT -s 192.168.122.1 -d 192.168.122.135 -p tcp -m multiport --dports 80,139,445,22 -j ACCEPT

    2、iprange

      -m iprange

        --src-range IP1[-IP2]  连续写多个连续的源ip

        --dst-range IP1[-IP2]  连续写多个连续的目的ip

    [root@node01 ~]# iptables -A INPUT -m iprange --src-range 192.168.1.1-192.168.1.10 -d 192.168.122.135 -p tcp --dport 80 -j ACCEPT

    常说的加入白名单

    3、state 状态,用连接的状态进行数据过滤

      -m state --state <状态>  决定什么样状态接收,什么样状态拒绝,像ftp根据端口放行就很麻烦,使用-m state --state模块就简单很多

      state状态:

        NEW状态

          针对某个服务的首次访问

        ESTABLISHED状态

          1、某服务的后续所有访问状态

          2、表示服务器的响应数据

        RELATED状态

          相关联的连接,给ftp用的。比如ftp服务器,只有命令连接完成,才能进行建立数据连接

          ftp两种工作模式

            主动连接:

                20/tcp:数据连接

                21/tcp:命令连接

                   当客户端向服务端通过21端口建立命令连接,命令连接就是传输命令的,像get,put等,命令连接创建好后会通过20号端口主动向客户端建立数据连接

            被动连接:

                   当客户端访问ftp服务器时候,通过21号端口建立命令连接后,ftp服务器会在本地随机产生一个大于1024的随机端口,完了告诉客户端,客户端在通过那个随机端口建立数据连接

        INVALID状态

          无效的连接

    1、就不用每条都写OUTPUT的规则了,有一条ESTABLISHED就能全部能出去(响应)OUTPUT

    [root@node01 ~]# iptables -I OUTPUT -s 192.168.122.135 -m state --state ESTABLISHED -j ACCEPT

    2、保证首次访问和后续的所有访问都可以正常

    [root@node01 ~]# iptables -I INPUT -d 192.168.122.135 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
    [root@node01 ~]# iptables -I INPUT -d 192.168.122.135 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT

    实例:允许ftp服务的访问

    首先要卸载ip_nat_ftp和ip_conntrack_ftp

    [root@node01 ~]# yum install -y iptables-services

    # vim /etc/sysconfig/iptables-config

    IPTABLES_MODULES="ip_nat_ftp ip_conntrack_ftp"

    # systemctl restart iptables

    [root@node01 ~]# iptables -I INPUT -d 192.168.122.135 -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT
    [root@node01 ~]# iptables -I INPUT 2  -d 192.168.122.135 -m state --state RELATED,ESTABLISHED -j ACCEPT

  • 相关阅读:
    Kubernetes(k8s)中namespace的作用、反向代理访问k8s中的应用、k8s监控服务heapster
    Kubernetes(k8s)中dashboard的部署。
    Kubernetes(k8s)中Pod资源的健康检查
    Kubernetes(k8s)安装dns附件组件以及使用
    Kubernetes(k8s)的deployment资源
    Kubernetes(k8s)的Service资源
    Kubernetes(k8s)的RC(Replication Controller)副本控制器
    Kubernetes(k8s)常用资源的使用、Pod的常用操作
    简易图书管理系统(主要是jsp+servlet的练习),基于jsp+servlet的图书管理系统
    js 提取 sql 条件 表名 limit
  • 原文地址:https://www.cnblogs.com/charon2/p/10364780.html
Copyright © 2011-2022 走看看