Firewall :防火墙,隔离工具

工作于主机或网络的边缘,对于进出本主机或网络的报文根据事先定义好的检查规则作匹配检测,对于能够被规则所匹配到的报文做出相应处理的组件

  主机防火墙

  网络防火墙

IDS :入侵检测系统

  HIDS:主机入侵检测系统

  NIDS:网络入侵检测系统

IDS + Firewall 联动起来称为IPS入侵防御系统


一、iptables/netfilter   :包过滤防火墙

  framework:netfilter---实现防火墙框架(内核本身具备的框架)

    hooks function 钩子

  iptables : rule utils 工作在用户空间的一个程序工具

注:防火墙从来不是服务,不会启动进程,但是为了统一管理,在CentOS6叫做iptables服务;真正发挥作用在开机启动时无非把一个规则(文件)重新生效了一次,没有运行任何进程,因为它不需要进程,在内核上发挥作用的。

1.1、功能:

  filter : 过滤,防火墙

  nat : network address translation 网络地址转换

  mangle :拆解报文,做出修改,再封装报文

  raw : 关闭nat表上启用的连接追踪机制

连接追踪机制:去识别此前访问过的报文是访问过的报文(能识别出这个报文此前来过)

1.2、链(内置)五链

  PREROUTING 路由之前

  INPUT

  FORWARD   作用--扮演网络防火墙

  OUTPUT

  POSTROUTING  路由之后

1.3、方向区分:

流入:PREROUTING------>INPUT

流出:OUTPUT----->POSTROUTING

转发:PREROUTING------>FORWARD----->POSTROUTING

1.4、各功能的分别实现(四表):

  filter:INPUT、FROWARD、OUTPUT

  nat:PREROUTING(DNAT目标地址),OUTPUT,POSTROUTING(SNAT源地址)

    mangle:PREROUTING 、INPUT、FORWARD、OUTPU、POSTROUTING

  raw :PREROUTING 、OUTPUT

1.5、路由发生的时刻:

  报文进入本机后:判断目标主机

  报文发出之前:判断经由那个接口送往下一条

1.6、iptables:四表五链

  添加规则时的考量点

    a、要实现那种功能:判断添加在哪张表上;

    b、根据流经的路径:判断添加在哪个链上

  链:链上规则的次序,即为检查的次序:因此隐含一定的法则

    (1)同类规则(访问同一应用),匹配范围小的放上面

        必须  :22 放行,但是192.168.1.3:22拒绝

    (2)不同类规则(访问不用应用),匹配到报文频率较大的放上面

    (3)将那些可由一条规则描述的多个规则合并为一个

    (4)设置默认策略

 1.7、规则优先级:

数据表过滤匹配流程 既定法则---规则生效是有先后次序

功能的优先级次序:raw--->mangle--->nat--->filter      

1.9、规则:

  组成部分:报文的匹配条件,匹配到之后处理动作

    匹配条件:根据协议报文特征指定

      基本匹配条件

      扩展匹配条件

    处理动作:

      内建处理机制

      自定义处理机制

    注意:报文不会经过自定义链,只能在内置链上通过规则进行引用后生效

二、iptables:规则管理工具

  添加、修改、删除、显示等:

  iptables所有规则编写都是送往内核的

  规则和链有计数器:显示从启用开始到此刻为止一共匹配到了多少个数据包,每一个规则和每一个链自己默认都有2个计数器

    pkts :由规则或链所匹配到的报文的个数

    bytes:由规则和链匹配到的所有报文大小之和

2.1、iptables命令:  

   iptables [-t table] SUBCOMMAND(子命令)  CHAIN CRETERIA (匹配标准)  -j TARGET (匹配动作 )

SYNOPSIS
iptables [-t table] {-A|-C|-D} chain rule-specification
iptables [-t table] -I chain [rulenum] rule-specification
iptables [-t table] -R chain rulenum rule-specification
iptables [-t table] -D chain rulenum (不和-j组合使用)
iptables [-t table] -S [chain [rulenum]] iptables [-t table] {-F|-L|-Z} [chain [rulenum]] [options...]
iptables [-t table] -N chain
iptables [-t table] -X [chain]
iptables [-t table] -P chain target
iptables [-t table] -E old-chain-name new-chain-name

-t   table:有用性排序

  table=filter , nat ,mangle , raw  省略时为filter

2.2、SUBCOMMAND(子命令)分两类

  a、链管理

    -F:flush 清空规则链,省略链,表示清空指定表上的所有的链

    -N :new,创建新的自定义规则链

    -X :drop , 删除用户自定义的空的规则链

    -Z:zero,清零,置零规则计数器

    -P:Policy,为指定链设置默认策略:对filter表中的链而言,默认策略通常有ACCEPT,DROP(悄悄丢弃),REJECT

    -E:rEname,重命名自定义链(引用计数不为0的自定义链,无法改名,无法删除)

  b、链规则管理   

     -A:append,将新规则追加于指定链的尾部

     -I:insert ,将新规则插入至指定链的指定位置

     -D :delete,删除指定链上的指定规则
      有两种方式:
          指定匹配条件
          指定规则编号
    -R:replace,替换指定链上的指定规则

  c、查看:

    -L:list,列出指定链上的所有规则 (会反解析地址)

      -n :numberic ,以数字格式显示地址和端口号

      -v:verbose,显示详细信息

      --line-number :显示规则编号

      -x:exactly,显示计数器计数结果的精确值

内置链显示policy ACCEPT

自定义链显示 references

  某个链被引用了是不可以删除的,链不被引用它内部的规则是不会生效的

e.g

修改默认链

  iptables -t filter -P FORWAED DROP

添加自定义链

  iptables -t filter -N INPUT_HH

重命名自定义链

  iptables -t filter -E INPUT_HH  INPUT_HR

查看:

iptables -nvL --line-number

   iptables -D FORWARD 9

2.4、匹配条件:

2.4.1、基本匹配:

  [!]-s ,--src, IP|Netaddr  检查报文中源IP地址是否符合此处指定的地址范围
  [!]-d ,--dst, IP|Netaddr 检查报文中目标IP地址是否符合此处指定的地址范围
  -p, --protocol {tcp|udp|icmp} :检查报文中的协议(传输层),即ip首部中的protocols所标识的协议
 -i , --in-interface IFACE :数据报文的流入接口---仅能用于PREROUTING,INPUT及FORWARD链上
 -o, --out-interface IFACE :数据报文的流出接口---仅能用于FORWArD、OUTPUT 、POSTROUTING链上

2.4.2、扩展匹配:-m macth_name --spec_options

   (1)隐式扩展:对-p protocol指明的协议进行的扩展,可省略-m选项    

     -p tcp
        --dport PORT :目标端口,可以是单个端口或连续多个端口;
        --dport PORT :源端口
        --tcp-flags LIST1 LIST2:检查LIST1所指明的所有标志位,且这其中,LIST2所表示出的所有标记位必须为1;
                      而余下的必须为0,;没有LIST1中指明的,不作检查
           SYN、ACK、FIN、RST、PSH、URG
        --syn :相当于检查是否为新建tcp连接请求的第一次请求
                    
  e.g --tcp-flags SYN,ACK,FIN,RST SYN #检查SYN,ACK,FIN,RST 并且SYN=1,ACK,FIN,RST为0 == 请求连接
        
    -p udp      
          --dport
        --sport
     -p icmp    
        --icmp-type
        可用数字表示其类型
          0:echo-reply 应答
          8:echo-request 请求
e.g
   iptables -I INPUT -d 192.168.1.101 -p tcp --dport 22 -j ACCEPT
   iptables -I OUTPUT -s 192.168.1.101 -p tcp --sport 22 -j ACCEPT
  
 iptables -A OUTPUT -s 192.168.1.101 -p icmp --icmp-type 8 -j ACCEPT

 iptables -A INPUT -d 192.168.1.101 -p icmp --icmp-type 0 -j ACCEPT

   (2)显式扩展 :必须使用-m选项指定使用的扩展

     必须显式指明使用的扩展模块(rpm -ql  iptables|grep "\.so$") 注:大写代表TARGET,小写代表匹配条件扩展模块

      CentOS 6: man iptables

      CentOS 7:man iptables-extensions

     a. multiport扩展

        以离散方式定义多端口匹配:最多指定15个端口

         [!] --source-port,--sports port [,port|,port:port] ...  :指明多个源端口
        [!] --destination-ports,--dports port[,port|,port:port]... :指明多个离散的目标端口         [!] --ports port[,port|,port:port]... (很少用) e.g
  iptables -I INPUT -s 192.168.0.0/16 -d 192.168.1.101 -p tcp -m multiport --dports 22,80 -j ACCEPT
  iptables -I OUTPUT -d 192.168.0.0/16 -s 192.168.1.101 -p tcp -m multiport --sports 22,80 -j ACCEPT

      b. iprange扩展

         指明连续的(但一般是不能扩展为整个网络)ip地址访问使用

    [!] --src-range from [-to] :指明连续的源IP地址范围
    [!] --dst-range from [-to] :指明连续的目标IP地址范围 e.g
  iptables -I INTPUT -d 192.168.1.101  -p tcp -m multiport --dports 22:35,80 -m iprange --src-range 192.168.1.20-192.168.1.200 -j ACCEPT
  iptables -I OUTPUT -s 192.168.1.101  -p tcp -m multiport --sports 22:35,80 -m iprange --dst-range 192.168.1.20-192.168.1.200 -j ACCEPT

    c、string扩展  :检查报文中出现的字符串     

      --alog(bm|kmp)  字符串比对算法  注:string扩展中alog是必选项
      [!]--string pattern 从头到尾匹配
      [!]--hex-string pattern        16格式编码以后的字符串
e.g
  iptables -I OUTPUT -m string --alog bm --string 'movie' -j REJECT

    d、time扩展  :根据报文到达的时间与指定的时间范围进行匹配  注:UTC时间为标准与CST有时差

  --datestart
  --datestop
  --timestart
--timestop   
e.g
iptables -I INPUT -d 192.168.1.101 -p tcp --dport -m time --timestart : --timestop : -j REJECT

    e、connlimit扩展 :根据客户端IP(也可以做块)做并发连接数数量匹配

     --connlimit-above n :连接的数量大于n 拒绝  

     --connlimit-upto n :连接的数量小于等于n
e.g   iptables -I INPUT -p tcp --dport -m connlimit --limits-above -j REJECT

    f、limit 扩展 : 基于收发报文的速率做检查

    令牌桶过滤器:摩天轮例子
    --limit rate[/second|/minute|/hour|/day]
    --limit-burst n : 空闲时最大接受容量 e.g iptables -A INPUT -d 192.168.1.101 -p icmp --icmp-type -m limit --limit-burst --limit /minute -j ACCEPT iptables -A OUTPUT -s 192.168.1.101 -p icmp --icmp-type -j ACCEPT

      g 、state扩展: 根据连接追踪机制检查连接的状态  (重点)

不管是tcp/udp/icmp协议,这种连接追踪机制跟tcp自己的状态(即有限状态机)没有关系;这是iptables自己所附加的一种去追踪连接,去记录连接此前曾经是否来过的一种或者是否访问过的一种机制 (事例:店主或店员记录是否此人曾经来过本店)

选项: --state STATE1,STATE2,....

可追踪的链接状态:

  NEW:新发出的请求:连接追踪模板中不存在此连接相关的信息条目,因此,将其识别为第一次发出的请求;

  ESTABLISHED:NEW状态之后,连接追踪模板中为其建立的条目失效之前 期间内所进行的通信的状态;

  RELATED:相关的连接 -----如ftp协议的命令连接(有请求报文和响应报文)与数据连接(有请求报文和响应报文)之间的关系,所有数据连接应该是命令连接建立起来的

  INVALIED:无法识别的连接

注:需要内核装载内核专用的模块,这些模块都是自动装载完成的

调整连接追踪功能所能够容纳的最大连接数量:

  /proc/sys/net/nf_conntrack_max   默认65536

已经追踪到并记录下的所有连接:

  /proc/net/nf_conntrack

修改不同协议或连接类型追踪的时长:(tcp会话超时时间计数器是2个小时)

  /proc/sys/net/netfilter/

注:只有第一发出请求才叫做NEW ,哪怕对第一次请求的响应也叫ESTABLISHED;后续的再请求再响应都是ESTABLISHED

e.g

iptables -I INPUT -d 192.168.1.101 -p tcp --dport 22  -m  state --state NEW,ESTABLISHED -j ACCEPT

iptables -I OUTPUT -s 192.168.1.101 -p tcp --sport 22  -m  state --state ESTABLISHED -j ACCEPT

iptables -A INPUT -d 192.168.1.101 -p icmp --icmp-type 8 -m state --state NEW,ESTABLISHED -j ACCEPT

iptables -A OUTPUT -s 192.168.1.101 -p icmp --icmp-type 0 -m state --state ESTABLISHED -j ACCEPT

即只要能连接进来的,让所有链接都能安全出去,但不会有新链接出去

iptables -I INPUT -m state --state ESTABLISHED -j ACCEPT  #只要已建立的连接都通通放行

iptables -I INPUT 2 -d 192.168.1.101 -p tcp -m --multiport --dports 22,80,3306  -m  state --state NEW -j ACCEPT  #80,22,3306新的请求

iptables -I OUTPUT -m state --state ESTABLISHED -j ACCEPT

问题:如何开发被动模式的ftp服务?

  

2.5、目标: 

  -j TARGET:jump至指定的TARGET 

 ACCEPT:接受
    DROP:丢弃
    REJECT : 拒绝
    RETURN :返回调用链
    REDIRECTC 端口重定向
    LOG 记录日志
    MARK 做防火墙标记
    DNAT 目标地址转换
    SNAT 源地址转换
    MASQUERADE :地址伪装
    .....
    自定义链 :由自定义链上的规则进行匹配检查

凡是访问本机的tcp报文统统都放行(过滤)

  iptables -t filter -A INPUT -p tcp -d 192.168.1.101  -j ACCEPT

  iptables -t filter -A OUPUT -p tcp -s 192.168.1.1.101 -j ACCEPT

ping本机的规则  

  iptables -t filter -A INPUT -p icmp -d 192.168.1.101  -j ACCEPT

  iptables -t filter -A OUTPUT -p icmp -s 192.168.1.101  -j ACCEPT

指定网卡流入流出

  iptables -t filter -A INPUT  -d 192.168.1.101 -i eth0 -j ACCEPT

  iptables -t filter -A OUTPUT  -s 192.168.1.101 -o eth0 -j ACCEPT

Iptables之一基本应用的更多相关文章

  1. iptables

    一.在服务器上打开 22.80.9011端口: iptables -A INPUT -p tcp --dport 9011 -j ACCEPT iptables -A OUTPUT -p tcp -- ...

  2. 浅谈iptables 入站 出站以及NAT实例

    --------------本文是自己工作上的笔记总结,适合的可以直接拿去用,不适合的,适当修改即可!--------------- iptbales默认ACCEPT策略,也称通策略,这种情况下可以做 ...

  3. Failed to stop iptables.service: Unit iptables.service not loaded.

    redhat 7 [root@lk0 ~]# service iptables stop Redirecting to /bin/systemctl stop iptables.service Fai ...

  4. CentOS7安装iptables防火墙

    CentOS7默认的防火墙不是iptables,而是firewalle. 安装iptable iptable-service #先检查是否安装了iptables service iptables st ...

  5. linux iptables常用命令之配置生产环境iptables及优化

    在了解iptables的详细原理之前,我们先来看下如何使用iptables,以终为始,有可能会让你对iptables了解更深 所以接下来我们以配置一个生产环境下的iptables为例来讲讲它的常用命令 ...

  6. CentOS系统配置 iptables防火墙

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

  7. /etc/sysconfig/下找不到iptables文件解决方法

    时间:2014-12-19 01:17来源:csdn 作者:大智 举报 点击:5639次 本想做些防火墙策略.防火墙策略都是写在/etc/sysconfig/iptables文件里面的.可我发现我也没 ...

  8. docker通过iptables修改或新增镜像映射端口

    443 8088 22 端口是初始映射端口 [root@SERVER ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAM ...

  9. lnmp 预设iptables设置

    「LNMP」iptables初始配置   首先使用命令iptables -P INPUT ACCEPT允许所有连接,否则容易把自己关在外边.然后使用iptables -F;iptables -X;ip ...

  10. 关闭SELinux和iptables防火墙

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

随机推荐

  1. 使用交叉验证法(Cross Validation)进行模型评估

    scikit-learn中默认使用的交叉验证法是K折叠交叉验证法(K-fold cross validation):它将数据集拆分成k个部分,再用k个数据集对模型进行训练和评分. 1.K折叠交叉验证法 ...

  2. 微信小程序零基础制作指南

    第一步 准备工作 下载腾讯官方的微信web开发工具并且安装 第二步 登录已经注册小程序的微信账号并且选择合适的路径新建小程序项目. 新建一个页面文件夹,每一个页面需要一个文件夹,里面包括写逻辑脚本的j ...

  3. 一段让人瑟瑟发抖的ABAP代码

    昨天11月1日是万圣节,Jerry在继续忙着调研SAP Commerce Cloud里的产品主数据管理.晚上回家到SAP国外的社交媒体上一看,好热闹啊.国外的SAP从业者们纷纷以各种各样的方式庆祝万圣 ...

  4. Mongodb之简介

    MongoDB是一个基于分布式存储的数据库,由C++语言编写,旨在为WEB应用提供的可扩展的高性能数据存储解决. MongoDB是介于关系型数据库与非关系型数据库之间的产品,也是非关系型数据库中功能最 ...

  5. table标签修改tr,td标签的行距

    修改tr标签的行距,tbale标签的td标签间距 看如下Css文件的代码,其都没有table的tr行距产生效果 tr{ margin-top: 10px; padding: 10px; } td{ m ...

  6. 190919 centos系统中python2卸载重装

    问题:某些原因卸载了python2,连带卸载了yum工具. 解决思路: 如果服务器没有什么东西,重装系统最省事.但是如果不允许重装,那就只能按部就班的恢复python2和yum. 步骤: 删除pyth ...

  7. MySQL的My.cnf模板(转)

    [client] default-character-set = utf8mb4 port = PORT socket = /srv/myPORT/run/mysql.sock [mysqld] us ...

  8. PTA-多项式A除以B

    多项式A除以B 这仍然是一道关于A/B的题,只不过A和B都换成了多项式.你需要计算两个多项式相除的商Q和余R,其中R的阶数必须小于B的阶数. 输入格式: 输入分两行,每行给出一个非零多项式,先给出A, ...

  9. Andrew Ng机器学习 二: Logistic Regression

    一:逻辑回归(Logistic Regression) 背景:假设你是一所大学招生办的领导,你依据学生的成绩,给与他入学的资格.现在有这样一组以前的数据集ex2data1.txt,第一列表示第一次测验 ...

  10. 移动端跨平台应用开发(ios、Android、web)- Flutter 技术

    关键词:Google 出品:Dart语言:Flutter Engine引擎:响应式设计模式:原生渲染:免费并且开源 一.简介 Flutter 是谷歌2018年发布的跨平台移动UI框架.作为谷歌的开源移 ...