zoukankan      html  css  js  c++  java
  • Linux 中的iptables 规则策略

    Linux 的防火墙

    防火墙的分类:

    防火墙的分类

    作用

    优势

    劣势

    硬件防火墙

    对数据的传输做限制,消除安全隐患。数据过滤

    性能高

    成本高

    软件防火墙

    通过策略规范数据访问连接,提高安全。数据过滤

    防火墙是开源的,费用低。

    性能不如硬件防火墙,

    数据过滤:

    数据过滤: 通过防火墙的策略对数据进行规范,如下图:防火墙允许1 2客户机访问服务器,3不能访问服务器,这一过程叫数据过滤

    数据过滤:

    出方向:服务器允许那些数据可以发送出去

    入方向:那些数据可以进入服务器

    穿    1.0网段进入网卡1通过网卡2转发出去访问2.0网段,中间服务充当路由器转发的功能。

     

    数据封装:

    网络为了保证数据的正确传输,任何数据在外传输都会进行封装。数据到达目的主机,会进行解封装,

    Osi七层模型

     

    端口号是依赖单个IP地址存在的,如果有一个ip只能启65535端口,两个ip65535*2端口。    端口号:0-65535   

    源端口号一般情况 >1024

    数据封装的过程:

    应用层:游览器产生一个http请求 确保数据能到达目的地---传输层

    传输层:进行封装、添加TCP/UDP报头 TCP/UDP报头:源端口号,目的端口号)

    (传输层根据应用层协议确定添加的报头) 到达网络层

    网络层:对传输层的添加IP报头(源ip,目的ip)    (只知道大致的地址)

    数据链路层:对网络层的数据添加MAC帧头(源mac地址、目的mac地址)  (mac唯一确定具体的地址)

    解封装的过程:

    源主机给目的主机发送数据

    目的数据收到源主机的的数据进行解封装

    解封MAC帧头,确认MAC的目的地址是不是目的主机的MAC

    是接续解封装

    否丢弃数据包

    解封IP 报头,确认IP报头的目的ip是目的主机的IP地址

    是继续解封装

    否丢弃数据包

    解封TCP/IP 检测目的端口号由目的主机对应的端口号的进程去响应解决请求

    没有对应的目的端口会丢弃数据包

    解封装后收到请求后,目的主机会响应源主机的请求。响应请求的过程也是数据封装

     

    linux防火墙    四表五链

    内核模块:netfilter

    实现数据过滤:

    入方向

    出方向

    转发

    Linux防火墙有钩子函数

    Input 截获进入服务器的数据

    Forward 截获由服务器转发的数据

    Output 截获由服务器发出的数据

    Prerouting 截获路由前的操作

    Postrouting 截获路由之后的操作

    根据钩子函数创建防火墙规则

    Linux 存储防火墙规则在链

    五个钩子函数对应的五个链(chain):用来存储防火墙规则

    INPUT

    FORWARD

    OUTPUT

    PREROUTING

    POSTROUTING

    4张表

    Filter 实现数据过滤

    Nat 实现网络地址转换

    Mangle 为数据打标记(一般通过数字标识)

    Raw 数据跟踪

    五条链根据防火墙实现的规则不同,被分配在四张表里面

    Filter 实现数据过滤

    INPUT FORWARD OUTPUT 根据需求写对应的链

    Nat 实现网络地址转换

    OUTPUT PREROUTING POSTROUTING      实现IP报头源ip和目的ip的转换

    Mangle 为数据打标记(一般通过数字标识)

    INPUT FORWARD OUTPUT PREROUTING POSTROUTING 都可以打标签

    Raw 数据跟踪

    OUTPUT (对发出去的数据跟踪)   prerouting(路由之前的数据跟踪)

    防火墙命令: iptables     firewalld 7.0版本之后)

    防火墙规则匹配的顺序

    默认自上而下匹配,当匹配到最先匹配的规则。后面的防火墙规则不执行。

    在设置防火墙规则要将经常匹配的规则写在上面。

    防火墙顺序不规范会拖慢服务器的访问速度

    防火情有默认规则,手写的规则匹配不到数据,会匹配默认规则

     

    iptables 的使用方法:

    Iptables  子命令  链名   规则

    Iptables  查看

    Iptables  -L  查看防火墙规则  默认查看filter表的规则

    [root@44 ~]# iptables -L

    Chain INPUT (policy ACCEPT)    ACCEPT 默认规则允许

    Iptables  -t   表名    查看指定的表规则信息

    [root@44 ~]# iptables -t nat -L

    Chain PREROUTING (policy ACCEPT)

    target     prot opt source               destination         

    Chain INPUT (policy ACCEPT)

    target     prot opt source               destination         

    Chain OUTPUT (policy ACCEPT)

    target     prot opt source               destination         

    Chain POSTROUTING (policy ACCEPT)

    Iptables -nL   规则用的服务显示成端口号

    Iptables --line-numbers    显示防火墙规则带有行号

    Iptables  -v     显示规则的计数器,数据包个数,大小。只要规则匹配到数据>0 如果一直为0考虑检测防火墙规则是否写错

     

    Iptables 的删除

    Iptables -F   清空防火墙规则,默认清除filter

    Iptables  -t  表名  -F     清除指定表名的防火墙

    Iptables -D 链 【序号】 删除指定的iptables

    iptables 的添加

    Iptables   -A  链    在链追加规则

    Iptables   -I    插入规则,默认插入到最上         iptables -I chain 【序列】   指定位置插入

    防火墙的规则组成:

    匹配的数据条件

    操作行为

    操作行为:

    -j < 操作行为>     只针对数据过滤的表  filter

    ACCEPT 允许

    DROP 丢弃 客户端请求进不到服务器

    REJECT  拒绝 客户端进入服务器,服务器不响应

    匹配数据的条件:

    IP 、目的IP、 源端口 、目的端口 、 协议    (五元组)

    {-s }     { -d }   {   -p 协议{tcp|udp|icmp} --sport --dport  }

    -s IP地址 : 可匹配ip地址、ip的网段

    -s  192.168.20.1    配置源ip -s  192.168.20.1 匹配源ip不是    

    -s  192.16.20.0/24

    -p tcp --dport 22  匹配数据包目的端口号22 -p tcp --dport 22:100  表示连续的范围

    -s 1.1.1.1  -d 2.2.2.2 -p --dport 80    1.1.1.1 访问2.2.2.2 80端口

    -d 2.2.2.2 -p tcp --dport 80 匹配所有的客户端访问2.2.2.280 端口的请求

    -i 匹配网卡名 从网卡进来的数据

    -o 匹配网卡名 从网卡发出的数据

    -P I许改链的默认状态

    -p icmp  --icmp-type 8     ping请求

    --icmp-type 0 ping回应

    事例: 拒绝ssh

    测试45 访问192.168.20.139是可以ssh

    [root@45 ~]# ssh 192.168.20.139

    root@192.168.20.139's password:

    在进入的数据中设置拒绝源地址是192.168.20.140通过ssh22端口访问192.168.20.139

    [root@44 ~]# iptables -A INPUT -s 192.168.20.140 -d 192.168.20.139 -p tcp --dport 22 -j REJECT

    [root@45 ~]# ssh 192.168.20.139

    ssh: connect to host 192.168.20.139 port 22: Connection refused

    拒绝http

    通过45访问44httpdweb

    [root@45 ~]# curl 192.168.20.139

    web iptable

    拒绝所有访问44httpdweb服务

    [root@44 ~]# iptables -A INPUT -d 192.168.20.139 -p tcp --dport 80 -j REJECT

    [root@46 ~]# curl 192.168.20.139

    curl: (7) Failed connect to 192.168.20.139:80; Connection refused

    查看iptables的配置

    [root@44 ~]# iptables -nL --line-number

    Chain INPUT (policy ACCEPT)

    num  target     prot opt source               destination         

    1    REJECT     tcp  --  192.168.20.140       192.168.20.139       tcp dpt:22 reject-with icmp-port-unreachable

    2    REJECT     tcp  --  0.0.0.0/0            192.168.20.139       tcp dpt:80 reject

    拒绝任何ipping 44

    [root@45 ~]# ping -c1 192.168.20.139

    PING 192.168.20.139 (192.168.20.139) 56(84) bytes of data.

    64 bytes from 192.168.20.139: icmp_seq=1 ttl=64 time=0.968 ms

    [root@44 ~]# iptables -A INPUT -d 192.168.20.139 -p icmp -j REJECT

    [root@45 ~]# ping -c1 192.168.20.139

    PING 192.168.20.139 (192.168.20.139) 56(84) bytes of data.

    From 192.168.20.139 icmp_seq=1 Destination Port Unreachable

    保存iptables规则

    [root@44 ~]# iptables-save > 1.txt

    恢复规则

    [root@44 ~]# iptables-restore < 1.txt

    修改规则:

    Iptables -R 链  修改信息

    -m 补充模块

    Iptables  -m  模块名   -- help 查模块的帮助信息

    Multiport  模块:   支持多个端口,多个端口用,隔开

    EG:

    [root@44 ~]# iptables -A INPUT -s 192.168.20.140 -p tcp -m multiport --dport 22,80 -j REJECT

    Iprange 模块 :    支持多个IP地址

    [root@44 ~]# iptables -A INPUT -m iprange --src-range 192.168.20.140 192.168.20.141  -p tcp -j REJECT

    Iptables 实现数据过滤:

    基本条件: (五元组)

    ip、目的ip 、源地址、目的地址  、 协议

    连接状态进行的数据过滤:

    -m  state-state <状态>

    状态值: NEW   首次访问

    ESTABLISHED    完成    服务的后续访问、服务器的响应

    RELATED   相关联

    Iptables---NAT表的使用

    Nat  -----网络地址转换

    主要实现更换换源IP 与目的IP

    主要在PREROUTING路由前 和 POSTROUTING 路后 写规则

    路由前:主机收到一个数据在主机对数据操作路由之前发生的事情

    路由后:主机收到一个数据对数据进行了路由的查找之后的操作

    -j <操作>

    -j  SNAT 转换数据的源IP地址

    -j  MASQUERADE 转换数据里面的源IP地址

    -j  DNAT 转换数据里的目的IP地址

    NAT转化的原理:

    源主机访问目的主机

    snat可以让本地ip地址伪装成其他机器的ip地址,或者是公网IP,

    源主机会封装自己数据请求{ip 、目的ip 、请求}

    数据请求到达NAT上,NAT会查路由确认能不能连接到目的主机IP

        (1) 如果查看路由表不能,会返回目的ip不可达

        (2) 如果查看自己的路由表能,会把源ip转换成目的ip网段的ip(同时NAT会记录这条NAT转换的数据){转换的网络:1单独公网ip 2.NAT设备上现有的IP }          

     通过转换后的源IP数据请求会把数据请求发送到目的IP

    目的IP对源IP发出的请求做出响应

     

    -s  SNAT  <公网IP>    手动指定单独的公网ip

    -s  MASQUERADE      会自动把源ip转换成NAT上自身的公网ip

    -s  DNAT   目的ip转换     路由前

    dnat是用来做目的网络地址转换的,就是重写包的目的IP地址。

    发布服务:把服务从私有地址发布到公网上

    1. web的私有ip换为固定的公网ip
    2. 互联网用户会发送请求到NAT
    3. NAT接受请求会把目的ip 转化为web的私有ip
    4. NAT查看路由,把请求发送到转换后的目的IP

     

    实现:

    [root@44 ~]# iptables -t nat -A POSTROUTING -s 192.168.20.141 -d 192.168.20.139 -p tcp --dport 80 -j SNAT --to-source 192.168.20.139:8888

    Iptables ----mangle表实现数据标记

    数据打标记的目的:为了把想要的数据区分,分类标记出来。

    Mangle 一般在路由前PREROUTING打标记。

    操作命令事例:

    把相同的数据打成一个标记,对同一标记的数据做相同的处理

    将对目的主机执行icmp的数据打标记为88

    [root@44 ~]# iptables -t mangle -A PREROUTING -d 192.168.20.139 -p icmp -j MARK --set-mark 88

    打标记对数据区分分类,并不改动数据本身

    [root@45 ~]# ping 192.168.20.139

    PING 192.168.20.139 (192.168.20.139) 56(84) bytes of data.

    64 bytes from 192.168.20.139: icmp_seq=1 ttl=64 time=2.03 ms

    64 bytes from 192.168.20.139: icmp_seq=2 ttl=64 time=0.418 ms

    64 bytes from 192.168.20.139: icmp_seq=3 ttl=64 time=0.545 ms

    把标记名为88的苏数据丢弃

    [root@44 ~]# iptables -A INPUT -m mark --mark 88 -j DROP

    [root@45 ~]# ping 192.168.20.139

    PING 192.168.20.139 (192.168.20.139) 56(84) bytes of data.

    Iptables----forward链实现数据过滤

    [root@44 juben]# yum install iptables-services.x86_64

    导出防火墙规则,做保存

    [root@44 juben]# iptables-save > /etc/sysconfig/iptables

  • 相关阅读:
    jenkins或ansible启动应用不成功日志又不报错
    zookeeper学习(2)----zookeeper和kafka的关系
    缺包与maven
    zookeeper入门(1)---基本概念
    6. kafka序列化和反序列化
    5.Kafka消费者-从Kafka读取数据(转)
    git学习(5)---git stash
    通过getResourceAsStream方法获取项目下的指定资源
    CommandLineParse类(命令行解析类)
    4.kafka生产者---向Kafka中写入数据(转)
  • 原文地址:https://www.cnblogs.com/yk0625/p/14019329.html
Copyright © 2011-2022 走看看