zoukankan      html  css  js  c++  java
  • iptables学习笔记

    前言:
    学习iptables,需要知道它的工作原理,我们可以把它归纳成“三表五链”,其中“三表”分别为nat表、filter表以及raw表,“五链”为PREROUTING、FORWARD、POSTROUTING、INPUT、OUTPUT,至于他们到底怎么配置,有什么作用,请看下文。

    特别注意:
    对于centOS 7最小化系统而言,并没有自带iptables服务,需要手动安装。

    目录
    一、iptables原理
    二、iptables常用参数
    三、iptables规则的保存、备份与恢复
    四、iptables的nat表应用
    五、拓展学习


    下面开始进入正题
    一、iptables原理
      iptalbes工作流程:
        1.当启动服务时,会从/etc/sysconfig/iptables读取配置启动
        2.当一个数据包进入网卡时,它首先进入PREROUTING链,内核根据数据包目的IP判断是否需要转送出去。
        3.如果数据包就是进入本机的,它就会沿着图向下移动,到达INPUT链。数据包到了INPUT链后,任何进程都会收到它。本机上运行的程序可以发送数据包,这些数据包会经过OUTPUT链,然后到达POSTROUTING链输出。
        4.如果数据包是要转发出去的,且内核允许转发,数据包就会如图所示向右移动,经过FORWARD链,然后到达POSTROUTING链输出。

    参考链接:http://www.cnblogs.com/bangerlee/archive/2013/02/27/2935422.html

    关于“三表”:
        filter 这个表主要用于过滤包的,是系统预设的表,內建三个链:INPUT,OUTPUT以及FORWARD链的作用是在包刚刚到达防火墙时改变他的目的地址,如果需要的话,OUTPUT链改变本地产生的包的目的地址,POSTROUTING链在包就要离开防火墙之前改变其源地址
        nat 主要作用于修改数据包的TOS(Type Of Service,服务类型),TTL(Time Tolive ,生存周期)值以及为数据包设值MARK标记,以实现Qos(Quality of Service,服务质量)调整以及策略路由等应用,由于需要相应的路由设备支持,因此应用并不广泛。五个链:PREROUTING,POSTROUTING,INPUT,OUTPUT,FORWARD
        raw 对报文设置一个标志,决定数据包是否被状态跟踪机制处理,只有两个链:OUTPUT,PREROUTING


    二、iptables常用参数
      因为iptables配置默认是配置filter表,因此本小节只介绍filter表,不过以下参数对于nat、raw表依旧适用。

    iptables -A 增加规则
    iptables -D 删除规则
    iptables -I 插入规则 
    iptables -Z 计数器清零
    iptables -F 清除当前规则,不能清除规则
    iptables -P INPUT DROP 设定默认规则,不能用-F清除规则,只能用iptables -P ACCEPT才能恢复
    iptables (-t nat) --line-number-nvL 查看nat表规则(带有ID号)
                      -t为需要配置的表,默认是filter表
      '-j' 跳转到相应的动作,常用有ACCEPT、DROP、REJECT         、MASQUERADE(伪装)
      '-s' 后面跟源地址
      '-d' 后面跟目的地址
      '-p' 后面跟协议,有tcp、udp、icmp等
      '--sport' 后面跟源端口号
      '--dport' 后面跟目的端口号
      '-i' 后面跟输入设备,如eth0
      '-o' 后面跟输出设备,如eth0
      
    注意:上面所说的"""目的"(或者成为输入和输出)注意区分,对于INPUT链来说,源是对方,目的是本机,对于OUTPUT链来说则是反过来的,相信这么说你会明白的。如果还是不明白,请继续读一遍工作流程。


    三、iptables规则的保存、备份与恢复

    规则保存:service iptables save
    规则备份:iptables-save > myipt.rule (备份)可以把防火墙规则保存到指定文件中
    规则恢复:iptables-restore < myipt.rule (恢复)这样可以已保存到指定文件的规则
    关闭服务:service iptables stop   注意:只要有规则的增加,就会自动开启服务

    四、iptables的nat表应用
      路由器就是使用iptables的nat原理实现,举两个栗子

     Q1:假设你的机器上有两块网卡eth0,eth1,其中eth0的IP为192.168.10.11,eth1的IP为172.16.10.11,eth0连接了internet但是eth1没有连接,现在又另一台机器172.16.10.12和eth1是互通的,那么如何设置也能够让eth1的这台机器能够连接internet呢?
     解题思路:打开主机的地址转发功能——————>   echo "1"> /proc/sys/net/ipv4/ip_forward
     问题解析:/proc/sys/net/ipv4/ip_forward文件,默认是0。
    意为禁止数据包的转发,因此如果把它里面的内容置为1,则允许数据包的转发,用于有一张以上的网卡。
    重启服务器之后又会变为0,因此如果想自动执行,可以将该命令写入到脚本/etc/rc.d/rc.local中 A1:iptables -t nat -A POSTROUTING -s 172.16.10.0/24 -o eth0 -j MASQUERADE
    Q2:如何将本地80端口的请求转发到8080端口,当前主机ip为192.168.2.18
    A2:iptables -t nat -I POSTROUTING -d 192.168.2.18 -p tcp --dport 80 -j DNAT --to 192.168.2.18:8080
        

    五、拓展学习

      1.iptables支持时间控制用户的行为,如:指定工作日的8点到18点期间才能访问445端口
        iptables -A INPUT -p tcp --dport 445 -m time --weekdays Mon,Tus,Wed,Thu,Fri --timestart 08:00:00 --timestop 18:00:00 -j ACCEPT
      2.iptables写一条规则,只同时允许443,80,1723,22,3306,11211,25,110,dns,ntp协议,其他端口拒绝,即多端口开放
        iptables -I INPUT -p tcp -m multiport --dport 443,80,1723,22,3306,11211,25,110,53,123 -j ACCEPT
        iptables -P INPUT -j DROP
  • 相关阅读:
    如何自己手写一个热加载(转)
    阻塞I/O、非阻塞I/O和I/O多路复用、怎样理解阻塞非阻塞与同步异步的区别?
    Java NIO浅析 转至 美团技术团队
    mysql在线修改表结构大数据表的风险与解决办法归纳(转)
    MySQL性能优化
    Tomcat Connector(BIO, NIO, APR)三种运行模式(转)
    redis 单线程的理解
    Spring 中的bean 是线程安全的吗?
    Spring 自定义注解,结合AOP,配置简单日志注解 (转)
    redis 分布式锁
  • 原文地址:https://www.cnblogs.com/ImJerryChan/p/6155869.html
Copyright © 2011-2022 走看看