1》各种传输方式到最后都会转化为能够通过网络发送的数据格式:
  1>文本格式;
  2>二进制格式;
2》TCP三次握手连接,四次断开,连接时客户端是主动打开,服务器是被动 打开,处于监听状态;

TCP有限状态机:

3》防火墙:可能是硬件,也可能是软件;
  规则:匹配标准和处理方法(除了制定的规则,还应有一种默认规则,默认规则一般处于关闭状态);
  匹配标准: IP:SIP,DIP
        UDP:SPORT,DPORT
           ICMP:icmp-type        =SYN=1,ACK=0,FIN=0,RST=0 第一次连接
         TCP:SPROT,DPORT======  =SYN=1,ACK=1,FIN=0,RST=0 第二次连接
                       = SYN=0,ACK=1,RST=0,FIN=0 第三次连接
  防火墙用于数据报文过滤,Linux中的防火墙处于内核之中的TCP/IP模块中;
4》文件/proc/sys/net/ipv4/ip_forward 中可以开启本机转发功能;
  钩子函数(hook function):TCP/IP协议栈上的一个补充;
  1>prerouting 路由决策之前====》用于目标IP地址转换
  2>input 进入本机
  3>output 从本机出来
  4>forward 转发
  5>postrouting 路由决策之后====》用于源IP地址转换

四表五链:
    filter表(过滤):
    input
    output
    forward
    nat表(地址转换):
    prerouting
    postrouting
    output

    mangle表(拆开,修改,封装):
    prerouting
    input
    forward
    output
    postrouting
    raw表(不作修改,原始格式):
    prerouting
    output

************1>可以使用自定义链,但只有在被调用的时候才能发挥作用,而且如果没有自定义链中的任何规则匹配,还应该有返回机制,用户可以删除自定义的空链,                       默认链无法删除;
      2>每个规则都有两个内置的计数器,一个用来记录被匹配的报文的个数,一个记录被匹配的报文的大小之和;

5》规则:匹配标准和处理方法;===========》用rpm ql iptables 命令可以查看是否按照了iptables模块
  语法:
    iptables [-t table] command chain [num] 匹配标准 -j 处理方法
  通用匹配:
    -s; --src 指定原地址
    -d; --dst 指定目标地址
    -p {tcp,udp,icmp} 指定协议
    -i , interface 指定数据报文流入的网卡
    -o , interface 指定数据报文流出的网卡

  ****-i一般用于PREROUTING,INPUT,RORWARD这三条链;
       -o一般用于POSTROUTING,OUTPUT,FORWARD这三条链;
     -j: TARGET(动作)
       ACCEPT 接受通过
    DROP 丢弃
         REJECT 拒绝

  eg: iptables -t filter -A INPUT -s 172.16.0.0/16 -j DROP
i    ptables -t filter -A INPUT -s 172.16.0.0/16 -d 172.16.100.7 -j DROP

  匹配标准:
    通用匹配:自身能够完成的检查;
    扩展匹配:依赖于扩展模块才能完成的检查;
   扩展匹配:
      隐含扩展:不用特别指明由哪个模块来进行的扩展,因为此时使用了-p {tcp,udp,icmp};
      显示扩展:必须指明由哪个模块进行的扩展,在iptables中使用-m选项来完成此项功能;
  ******/lib/iptables文件下有许多扩展匹配所依赖的扩展模块;

5》相关命令:
  1>管理规则的命令:
    -A:附加一条规则,添加在链的尾部;
    -I CHAIN [num] :插入一条规则,插入为对应链上的第num条,不加num则默认为第一条;
    -D CHAIN [num] : 删除指定链中的第num条规则;
    -R CHAIN [num] : 替换指定链上的规则

  2>管理链的命令:
    -F [CHAIN]: 清空指定规则链,如果省略CHAIN,则可以实现删除对应表中的所有链;
    -P CHAIN : 设定 指定链的默认策略;
    -N :自定义一个新的空链;
    -X:删除一个自定义的空链;
    -Z:置零指定链中所有规则的计数器;
    -E:重命名自定义的链;

  3>查看类的命令:
    -L : 显示指定表中的规则;
    -n : 以数字格式显示主机地址和端口号;
    -x: 显示精确值,不进行估算;
    -v:显示详细信息;
    --line-numbers: 显示规则号码;
  4>动作(target)参数:
    ACCPT: 接受通过
    DROP: 丢弃
    REJECT: 拒绝
    DNAT: 目标地址转换
    SNAT: 源地址转换
    REDIRECT: 重定向/端口重定向
    MASQUERADE: 地址伪装(源地址转换)
    LOG: 日志
    MARK: 打上标志
  5>扩展匹配:
    隐含扩展:
      -p tcp
        --sport port /port-port 源端口,也可以使用连续的端口号
        --dport 目的端口
        --tcp-flags 标志位
        --tcp-flags mak comp
        --tcp-flags SYN,FIN,ACK,RST SYN TCP的第一次连接握手
      ****mask:只检查此列表中指定的标志位,是逗号分隔的标志位列表;
         comp:此列表中出现的标志位必须为1,此列表中没出现,mask中出现的必须为0;
      -p icmp
        --icmp-type
          0 回送应答
          8 回送请求
      -p udp
        --sport
        --dsport

  eg: 自己可以ping 别人规则:
    iptables -A OUTPUT -s 172.16.100.7 -p icmp --icmp-type 8 -j ACCEPT
    iptables -A INPUT -d 172.16.100.7 -p icmp --icmp-type 0 -j ACCEPT
  eg: 本机IP为172.16.100.7,开放本机的sshd服务; 22/tcp
    iptables -t filter -A INPUT -s 172.16.0.0/16 -d 172.16.100.7 -p tcp --dport 22 -j ACCEPT
    iptables -t fileter -A OUTPUT -s 172.16.100.7 -d 172.16.0.0/16 -p tcp --sport 22 -j ACCEPT

6》iptables不是服务,但有服务脚本,服务脚本的主要作用在于管理保存的规则;
    lsmod |grep iptables 命令可以查看相关的iptables的模块
    iptables的相关模块可以装载及移除:
      iptables_nat,iptables_filter,iptables_mangle,iptables_raw,ip_conntrack
  指定默认规则,除了上述的sshd服务外其他的都不允许访问:
    iptables -P INPUT DROP
    iptables -P OUTPUT DROP
    iptables -P FORWARD DROP

  将WEB服务可以访问的规则放在第一条示例:
    iptables -I INPUT -d 172.16.100.7 -p tcp --dport 80 -j ACCEPT
    iptables -I OUTPUT -s 172.16.100.7 -p tcp --sport 80 -j ACCEPT

  允许自己能够ping通自己的规则定义示例:
    iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -i lo -j ACCEPT
    iptables -A OUTPUT -s 127.0.0.1 -d 127.0.0.1 -o lo -j ACCEPT

7》ip_conntrack: 连接追踪模块:
    /proc/net/ip_conntrack 这个内核文件保存着当前系统上其他主机与当前主机建立的连接关系,也可以用iptstate命令来查看这些连接关系;
      iptstate -t 可以显示当前连接的每种连接的个数;
    service iptables stop可以移除iptables加载的所有相关内核模块,移除之后,/proc/net/ip_conntrack文件就不存在了;
    modprobe ip_conntrack 可以手动装载ip_conntrack模块,装载之后那个文件就有了;
    cat /proc/sys/net/ipv4/ip_conntrack_max 文件来定义/proc/net/ip_conntrack 文件最大可以保存多少个连接记录;

    modprobe -r nfnetlink 移除模块nfnetlink;    

8》显式扩展:
    -m EXTESTINN --spe-opt
      state:状态扩展,结合ip_conntrack追踪会话的状态;
    NEW: 新连接的请求
    ESTABLISHED: 已建立的连接
    INVALID: 非法连接
    RELATED: 相关联的
    -m state --state NEW,EXTABLISHED, - j ACCEPT

    ****定义好规则之后可以用命令service iptables save 来保存在/etc/sysconfig/iptables 中,这样重启后规则也不会失效;iptables

      - save  >/etc/sysconfig/iptables.2017.2 可以将文件保存在特定的文件中;iptables -restore </etc/sysconfig/iptables.2017.2可以使这些规则生效;

  示例:
    server: 172.16.100.7 开放sshd,httpd服务,设置好追踪连接;

    iptables -A INPUT -d 192.168.1.106 -p tcp --dport 22 -m state --state NEW,ESTABLISHED, -j  ACCETP
    iptables -A OUTPUT -s 192.168.1.106 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
    iptables -P INPUT DROP
    iptables -P OUTPUT DROP
    WEB服务也一样,只需改端口就好;
  iptstate 命令可以查看连接状态;
    sysctl -w net.ipv4.ip_conntrack_max=65536 命令修改保存连接记录的最大值,但只能临时有效;
    cat /proc/sys/net/ipv4/ip_conntrack_max 命令来查看连接记录的最大值;
    在文件/etc/sysctl.conf 文件中修改相关值可以永久有效;
    在目录/proc/sys/net/ipv4/netfilter 下有很多关于各种连接的超时设置的文件;

  示例:放行别人ping自己
    iptables -A INPUT -d 172.16.100.7 -p icmp --icmp-type 8 -m state --state NEW,ESTABLISHED -jACCEPT
    iptables -A OUTPUT -s 172.16.100.7 -p icmp --icmp-type 0 -m state --state ESTABLISHED -j ACCEPT

    iptables -L -n --line-numbers 可以显示规则的行号

    *********高效规则制定:可以将相关规则合为一条,任意协议任意IP保持连接的都可以出去;
    iptables -I OUTPUT -s 172.16.100.6 -m state --state ESTABLISHED -j ACCEPT

    FTP服务:基于本机的MYSQL认证登录;
      iptables -A INPUT -d 172.16.100.6 -p tcp --dport 21 -m state --state RELATED,ESTABLISHED -j ACCEPT
      iptables -A INPUT -i lo -j ACCEPT
      iptables -A OUTPUT -o lo -j ACCEPT
      iptables -A INTPUT -d 172.16.100.7 -p tcp -m state --state RELATED -j ACCEPT

    修改OUTPUT链的第一条规则:
      iptables -R OUTPUT 1 -s 172.16.100.7 -m state --state ESTABLISHED,RELATED -j ACCEPT
      *****在制定关于ftp规则之前首先要装载ip_conntrack_ftp 和ip_nat_ftp模块;
      在文件/etc/sysconfig/iptables-config 中编辑IPTABLES_MODULES="ip_nat_ftp ip_conntrack_ftp"

===================最终高效规则:

9》multiport :离散的多端口匹配扩展
    --source-ports
    --destination-ports
    --ports
  -m multiport --destination-port 21,22,80 -j ACCEPT
  iptables -I INPUT 2 -d 172.16.100.7 -p tcp -m multination --destination-ports 21,22,80 -m state --state NEW -j ACCEPT

  在所有的规则中可以使用英文字符!来表示条件取反:
    -s ! 172.16.100.7

  -m iprange : 指定范围内的IP地址;
    --src-range
    --dst-range
  iptables -A INPUT -p tcp -m iprange --src-range 172.16.100.3-172.16.100.100 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT

  *****也可以加!取反,取这个范围之外的IP地址;

  -m connlimit:连接数限制
  ! --connlimit-above n 连接数上限 n (允许<n人访问)
  每个用户允许连接数为两个以内:
    iptables -A INPUT -d 172.16.100.7 -p tcp --dprot 80 -m connlimit ! --connlimit-above 2 -j ACCEPT

  -m limit : 流量控制
    --limit RATE (速率) 每个时间段允许连接多少个
    --limit-burst number 允许一下子涌来多少个

  eg: 对ping进行设置:
    iptables -A INPUT -d 172.16.100.7 -p icmp --icmp-type 8 -m limit --limit 5/minute --limit-burst 6 -j ACCEPT
    iptables -A OUTPUT -s 172.16.100.7 -p icmp --icmp-type 0 -m state --state RELATED,ESTABLISHED -j ACCEPT

    -m string 对一些特定的字符串进行限制(网页中的内容)
      --algo {bm|kmp}
      --string “STRING”
    iptables -I OUTPUT -s 172.16.100.7 -m string --alge kmp --string “h7ng” -j REJECT                                          

10》-j LOG 记录日志,如果链中有ACCEPT,DROP,REJECT等动作,要将LOG放在第一条;

    --log-prefix 存放日志前缀
   iptables -A INPUT -d 172.16.100.7 -p icmp --icmp-type 8 -j LOG --log-prefix “firewall log foricmp--”
    用命令tail /var/log/messages 来查看相关日志
11》自定义规则链:
  iptables -N 链名
  iptables -N clean_in
  在自定义规则链下添加规则:
  iptables -I INPUT -j clean_in 刚进来就调用自定义的链
  iptables -A clean_in -d 255.255.255.255 -p icmp -j DROP
  iptables -A clean_in -d 172.16.100.7 -p icmp -j DROP
  iptables -A clean_in -p tcp ! --syn -m state --state NEW -j DROP
  iptables -A clean_in -p tcp --tcp-flags ALL ALL -j DROP
  iptables -A clean_in -p tcp --tcp-lags ALL NONE -j DROP
  iptables -A clean_in -d 172.16.100.7 -j RETURN 返回主链          

12》利用iptables的recent模块来抵御DOS攻击:
    SSH:远程连接
      iptables -I INPUT 2 -d 172.16.100.7 -p tcp --dport 22 -m connlimit --connlimit-above 3 -j DROP
      iptables -I INPUT 3 -d 172.16.100.7 -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH
      iptables -I INPUT 4 -d 172.16.100.7 -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 300 --hitcount 3 ---name SSH -j DROP
  1>利用connlimit模块将单IP的并发设置为3;(会误杀使用NAT上网的用户,可以根据实际情况增大该值)
  2>利用recent和state模块限制单IP在300s内只能与本机建立2个新连接,被限制五分钟后即可恢复访问;
    第二句是记录访问tcp 22号端口的新连接,记录名称为SSH,--set 记录数据包的来源IP,如果IP 已经存 在将更新已经存在的条目;
    第三句是指SSH记录中的IP,300s内发起超过3次连接则拒绝此IP的连接;
    --updat 是指每次建立连接都更新列表
    --seconds 必须与--rcheck 或者--update 同时使用
    --hitcount 必须与--rcheck 或者 --upddate 同时使用
  3>iptables的记录:/proc/net/ipt_recent/SSH,也可以使用下面的命令来记录日志;
    iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --name SSH --seconds 300 --hitcount 3 -j LOG --log-prefix “SSH Attack”

13》NAT: 网络地址转换
    DNAT: 目标地址转换
    SNAT: 源地址转换 (POSTROUTING,OUTPUT)
  ****在文件/proc/sys/net/ipv4/ip_forward:1中开启路由转发功能,这种方式暂时有效;
  在文件/etc/sysctl.conf中修改net.ipv4.ip_forward=1永久有效;
  -j SNAT
    --to-source IP
    --to-source IP-IP 可以指向多个IP,动态IP地址池
    iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j SNAT --to-source 172.16.100.7
  =====ADSL:123.2.3.2
    iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j SNAT --to-source 123.2.3.2
  =====禁止本机与外网进行ping但不禁止其他通信:
    iptables -A FORWARD -s 192.168.10.0/24 -p icmp -j REJECT
  =====只允许内网主机访问外网,ping 外网,不允许外网的访问内网,ping 内网
    iptables -A FORWARD -m state --state ESTABLISHED -j ACCEPT
    iptables -A FORWARD -s 192.168.10.0/24 -p tcp --dport 80 -m state --state NEW -j ACCEPT
    iptables -A FORWARD -s 192.168.10.0/24 -p icmp --icmp-typpe 8 -m state --state NEW -j ACCEPT
  ======放行外网的FTP服务需要使用RELATED状态:
    iptables -A FORWARD -s 192.168.10.0/24 -p tcp --dport 21 -m state --state NEW -j ACCEPT
    iptables -I FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

  要记得开启:ip_nat_ftp 和ip_conntrack_ftp两个模块;在文件/etc/sysconfig/iptables-config中添加;

  DNAT:外网访问内网;
    iptables -t nat -A PREROUTING -d 172.16.100.7 -p tcp --dport 80 -j DNAT --to-destination 192.168.10.22

  PNAT: 端口转换

    iptables -t nat -R PREROUTING -d 172.16.100.7 -p tcp --dport 80 -j DNAT --to-destination 192.168.10.22:8080

  拒绝对内网中的网站包含特定字符的访问:

    iptables -A FORWARD -m string --algo kmp --string “h7ng” -j DROP

   ====丢弃发送至192.168.1.1的所有数据以及分片数据:
    iptables -A OUTPUT -f -d 192.168.1.1 -j DROP

   ====记录192.168.0.1至192.168.0.22地址段内所有的主机发送给路由要求转发的数据包,并允许转发这些数据包
    iptables -A FORWARD -m iprange --src-range 192.168.0.1-192.168.0.22 -p tcp --dport 80 -j LOG
    iptables -A FORWAR -m iprange --src-range 192.168.0.1-192.168.0.22 -p tcp --dport 80 -j ACCEPT

14》防火墙备份与还原
  相关命令:
    iptables-save >/etc/sysconfig/iptables
    iptables-save >firewall.bak
    iptables-restore <firewall.bak
15》iptables之layer7(针对服务进行的七层过滤)
  1> 内核编译:
    2.6----------》3.0
    单内核:模块化(文件系统;驱动;安全相关功能)
    配置:.config(/proc/cpuinfo,lspci,lsusb,hal-device)
        make menuconfig
        make gconfig
          make kconfig
          make config
    编译:make

         只编译部分源码:
           make SUBDIR-arch
           make drivers/net/pcnet32.ko
                make dir

        可以将编译结果转存到其他地方:
           make O=/path/to/somewhere
  安装内核模块:
    make modules_install
  安装内核:
    make install
  2>layer7
    netfilter:rules
    iptables: 语法正确

网络安全之iptables防火墙的更多相关文章

  1. linux 的iptables防火墙

    .a文件就是*.o文件的集合, 是object文件的归档文件, 所以, 用nm -A  ???.a看到的 symbolic符合名称都是 相应的,  包含的  .o文件.... linux 2.4内核中 ...

  2. Linux(13):期中架构(5)--- 前端部分:keepalived高可用 & HTTPS & iptables防火墙

    keepalived 高可用集群 1. keepalived服务概念说明 # 1.1 keepalived软件的作用? Keepalived软件起初是专为LVS负载均衡软件设计的, 用来管理并监控LV ...

  3. iptables 防火墙(上)

    iptables 防火墙(上) 1. 防火墙概述 1.1 概念与作用 网络中的防火墙是一种将内部网络和外部网络分开的方法,是一种隔离技术.防火墙在内网与外网通信时进行访问控制,依据所设置的规则对数据包 ...

  4. CentOS系统配置 iptables防火墙

    阿里云CentOS系统配置iptables防火墙   虽说阿里云推出了云盾服务,但是自己再加一层防火墙总归是更安全些,下面是我在阿里云vps上配置防火墙的过程,目前只配置INPUT.OUTPUT和FO ...

  5. 关闭SELinux和iptables防火墙

    1.关闭SELinux: 编辑SELinux配置文件: [root@Redis selinux]# vim /etc/selinux/config 修改SELINUX配置项为disable SELIN ...

  6. CentOS 7.0,启用iptables防火墙

    CentOS 7.0默认使用的是firewall作为防火墙,这里改为iptables防火墙. 1.关闭firewall: systemctl stop firewalld.service #停止fir ...

  7. 编译内核实现iptables防火墙layer7应用层过滤 (三)

    在前面的两篇文章中我们主要讲解了Linux防火墙iptables的原理及配置规则,想博友们也都知道iptables防火墙是工作在网络层,针对TCP/IP数据包实施过滤和限制,属于典型的包过滤防火墙.以 ...

  8. [CentOs7]iptables防火墙安装与设置

    摘要 CentOS 7.0默认使用的是firewall作为防火墙,如果改为iptables防火墙,如何操作? 关闭firewall: systemctl stop firewalld.service ...

  9. iptables防火墙作为基本需求的配置

    企业中使用iptables防火墙:(一般不要在命令中输入规则) # Firewall configuration written by system-config-firewall# Manual c ...

随机推荐

  1. JS的事件流的概念

    事件的概念: HTML中与javascript交互是通过事件驱动来实现的,例如鼠标点击事件.页面的滚动事件onscroll等等,可以向文档或者文档中的元素添加事件侦听器来预订事件.想要知道这些事件是在 ...

  2. Spring中application*的使用

    ApplicationAware 加载Spring配置文件时,如果Spring配置文件中所定义的Bean类实现了ApplicationContextAware 接口,那么在加载Spring配置文件时, ...

  3. Python Twisted系列教程22:结束

    作者:dave@http://krondo.com/part-22-the-end/  译者: Cheng Luo 你可以从”第一部分 Twist理论基础“开始阅读:也可以从”Twisted 入门!“ ...

  4. Numpy的ndarry

    Numpy的ndarry:一种多维数组对象 Numpy最重要的一个特点就是其N维数组对象(即ndarry),该对象是一个快速而灵活的大数据集容器.你可以利用这种数组对整块数据执行一些数学运算,其语法跟 ...

  5. SQLite的基本用法

    SQLite是Android自带的轻量级数据库,接口封装的很好,不会SQL的也能很好的使用. 接下来讲一下怎么创建数据库.通过adb查看数据表和数据.增删查改. 一.创建数据库 Android封装了S ...

  6. Halcon中循环读取文件的实现以及数字与字符的转换

    在循环读取文件的位置时,常用到数字与字符的转换. 数字与字符的转换 将字符转换为数字 tuple_number(StringImageIndex,IntImageIndex)` 1 2 1 2 将数字 ...

  7. 如何将Excel日期快速转化为文本格式?

    Excel表中日期格式其实是数值,有时候需要原样转成文本,有时候也要将文本转成日期. 我发现了一个方法,估计是最快的了.不需要用那一堆year() month()之类的函数. 快速将日期格式转化为文本 ...

  8. hibernate nhibernate sqlserver数据库的默认值冲突解决

    数据库中一个字段的默认值设为0,当用hibernate插入数据时,没有对该字段进行操作,结果该字段居然不是0,而是空.后来google了一下,发现应该在.hbm.xml文件中添加一些参数定义(示例中的 ...

  9. SQL 数据库 学习 004 预备知识

    数据库 预备知识 我的电脑系统: Windows 10 64位 使用的SQL Server软件: SQL Server 2014 Express 如果我们要学习这个数据库,我们需要学习什么知识. 预备 ...

  10. 修改字符集AL32UTF8修改为ZHS16GBK详解

    登陆sqlplus,在命令行输入 sqlplus sys/sys as sysdba;//登陆sqlplus SQL>SHUTDOWN IMMEDIATE; SQL>STARTUP MOU ...