天天看点

iptables基本知识

iptables基本知识

防火墙可分为

  网络防火墙

 主机防火墙

大致定义:工作在网络或主机边缘,对于进出的报文,根据事先定义好的规则做检查,将那些能够匹配到的报文做出相应处理的组件。组件既可以是硬件也可以是软件。

Iptables是应用程序

  Iptables:编写规则的工具(检查语法送往netfilter)

  Netfilter:网络过滤器,内核中工作在TCP/IP网络协议栈上的框架。工作在内核中的框架,真正起到防范功能作用的

PS:要防火的关键是规则,而不是这些组件,组件根据规则来进行工作

路由发生时刻:

  1、 报文进入本机,判断目标地址

  2、 报文离开本机,判断经由那个接口发出

Hooks function 钩子函数,即5个链

  Prerouting:进入本机后,路由发生前

  Input:到达本机内部

  Output:由本机发出

  Forwar:由本机转发

  postrouting:路由功能发生之后,离开本机之前

iptables基本知识

报文流向经由的位置

  1、 到本机内部:prerouting、input

  2、 由本机发出:output、postrouting

  3、 由本机转发:prerouting、forward、postrouting

规则的功能(表)

  过滤 filter

  地址转换 NAT

  mangle 修改报文中的某些信息(除地址之外)

  raw 关闭NAT表上启用的连接追踪功能

每个表发生在不同的链上

  filter:input、output、forward

  NAT:prerouting、output、postrouting

  mangle:prerouting、input、forward、output、postrouting

  RAW:prerouting、output

Iptables:每个钩子上可放置N条规则,对应每个钩子上的多条规则称之为链(chain)

 每个功能由多个链组成,称之为表

链:链上的规则次序即为检查次序,因此有一定规律

  同类规则,匹配小的放上面

  不同规则,匹配报文几率较大的放上面

  应该设置默认规则

Iptables的四表五链添加规则时的考量点

  实现的功能,判断在那个表上

  报文的流向及经由路由,判断在哪个链上

功能优先级,从高到低

  raw --> mangle --> NAT --> filter

规则的组成部分:报文的匹配条件,匹配如何处理

  匹配条件:基本匹配、扩展匹配

  如何处理:内建机制处理、自定义处理机制(自定义的链)

Iptables是规则管理工具,能够自动检查规则语法

规则和链有计数器:

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

  bytes:由规则或链匹配到的数据报文大小总和

通过iptables命令生成规则送往netfilter

规则通过内核接口送往内核,因此会立即生效,但不会永久生效

期望永久生效,需要保存在配置文件中,此文件需开机自动加载或手动加载

语法格式:

  iptables [-t TABLE] SUBCOMMAND CHAIN CRETERIA -j TARGET

TARGET:

  -j jump跳转目标,内置:

  ACCEPT 允许数据报通过

  DROP 直接丢弃

  REJECT 拒绝并发包通知对方

  -t TABLE:

默认是filter,四表:filter nat mangle raw

SUBCOMMAND:

链:

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

  -N new,新建一个用户自定义链,自定义链只能作为默认链的引用

  -X drop,删除用户自定义的链(内容为空),内置链不可删除

  -Z zero,清空计数器,每个链上的每条规则都有计数器,记录匹配到的报文数量、大小

  -P policy,设置默认规则,当所有规则都无法匹配或匹配到无法做出有效处理机制,则按默认规则处理

  -E rename,自定义链重命名,已经被引用的自定义链无法被重命名

规则:

  -A append,链尾追加规则

  -I insert,在指定位置插入一条规则

  -D delete,删除指定规则

  -R replace,替换指定规则

查看:

  -L list,列出链上所有规则

  -n numeric,以数字格式显示地址和端口号,即不反解

  -v verbose,详细格式,显示规则的详细情况,包括计数器等

  -vv 更加详细

  -vvv 比vv还要详细

  --line-numbers 显示规则编号

  -x exactly 显示计数器的精确值

pkts bytes target prot opt in out source destination

  pkts 匹配到的报文数量

  bytes 匹配到的所有的数据报大小之和

  target 处理目标,(目标可以是自定义的链)

  port 协议{tcp udp icmp}

  opt 可选项

  in 数据报流入接口

  out 数据报流出接口

  source 源地址

  destination 目的地址

CRETERIA匹配条件

检查IP首部,检查tcp、udp或ICMP首部

基于扩展机制,也可以基于额外的机制,如连接追踪

注意:可以同时制定多个条件,意味着同时匹配多个条件才行

 匹配条件:

    通用匹配

    扩展匹配

      隐式扩展

      显示扩展

通用匹配:

  -s 检查报文中的源IP地址; ! 取反

  -d 检查报文中的目标IP地址

  -p 检查报文中的协议,TCP UDP ICMP

  -i 数据报文流入接口,通常用在prerouting input forward链上

  -o 数据报文流出接口,通常用在forward output postrouting链上

扩展匹配:使用iptables的模块实现扩展检查机制

 隐式扩展:如果在通用匹配上使用-p 指定协议的话,那么-m选项指明扩展则变得可有可无

  TCP

    --dport 目标端口

    --sport 源端口

    --tcp-flags LIST1 LIST2 ;LIST1是要检查的标志位,LIST2是LIST1中出现过的,其标志位为1,其他的全都为0

如:--tcp-flags syn,ack,fin,rst syn 意思就是检查syn,ack,fin,rst几个标志位,其中syn要为1,ack,fin,rst全都为0。即第一次建立连接,有一个专门选项—syn

    --syn 三次握手低第一次,即新建连接

  UDP

    --dport

    --sport

  ICMP

    --icmp-type

      8 echo request 请求

      0 echo reply 响应

如:

iptables -A INPUT -s 192.168.202.0/24 -d 172.20.1.10 -p tcp --dport 80 -j ACCEPT

  显示扩展 必须指明使用的扩展机制

    -m 模块名称,-m必须写

      查看有哪些模块可用rpm -ql iptables ,消息.so结尾的都是扩展模块

   multiport扩展:以离散端口匹配多端口,最多可同时制定15个端口

  专用选项:

    --sports --source-ports PORT[,PORT…]

    --dports --destination-ports PORT[,PORT…]

    -ports PORT[,PORT…]

iptables -A INPUT -d 172.20.1.10 -p tcp -m multiport --dports 80,22,443 -j ACCEPT

  iprange扩展:指定连续的IP范围,用于匹配非整个网络

    --src-range IP[-IP]

    --dst-range IP[-IP]

iptables -A INPUT -d 172.20.1.10 -p tcp –dport 23 -m multiport --src-range 192.168.1.50-192.168.1.100 -j REJECT

  string扩展:检查报文中出现的字符串,与给定的字符串做匹配

  字符串匹配检查算法:kmp bm

    --algo {kmp|bm} 指定算法

    --string “STRING” 搜索指定字符串

   --hex-string “HEX_STRING” 编码成16进制的字符

iptables -I OUTPUT -s 172.20.1.10 -p tcp --dport 80 -m string –string “sex” --algo kmp -j REJECT

  time扩展:基于时间区间做访问控制

    --datestart YYYY[-MM][-DD][hh[:mm[:ss]]]

    --datestop YYYY[-MM][-DD][hh[:mm[:ss]]]

    --timestart

    --timestop

    --weekdays DAY1,[DAY2,…]

iptables -I INPUT -d 172.20.1.10 -p tcp –dport 80 -m time --timestart 08:00 --timestop 18:00 --weekdays Mon,Tue,Wed,Thu,Fir -j REJECT

  connlimit扩展:基于连接数做限制,对每个IP能够发起的并发连接数做限制(单个IP)

  专用选项:

    --connlimit-above [N]

如:(限制连接1.10 的22端口4个连接,如果到5个或超过5个连接则被拒绝)

iptables -I INPUT -d 172.20.1.10 -p tcp --dport 22 -m connlimit --connlimit-above 5 -j REJECT

  limit扩展:基于发包速率做限制

    --limit N[/second|/minute|/hour|/day] 每个时刻最多几个包

    --limit-burst N 限制某一时刻突发量最多有几个包(像一个令牌桶)

如:每分钟允许10个ping包,突发5个包被允许,超出的按别的规则或默认策略

iptables -I INPUT -d 172.20.1.10 -p icmp --icmp-type 8 -m limit 10/minute –limit-burst 5 -j ACCEPT

实现的效果是:前四个包正常,从第五个开始,我们每6秒钟收到一个正常的回应

  stat扩展:启用连接追踪模板记录连接,并根据连接匹配连接状态的扩展

  启用连接追踪功能之前,只能称之为简单的包过滤防火墙,开启了连接追踪之后则成为带状态监测的包过滤防火墙

  connection template 连接追踪模板,用于记录各连接及相关状态,基于IP实现,与协议无关,通过倒计时的方式删除条目

  记录连接的状态:

    NEW:新建连接,连接追踪模板中无相对应的条目时,客户端第一次发出请求

    ESTABLISHED:NEW状态之后,距追踪模板中的条目删除之前所进行的通信都是established状态

    RELATED:相关的连接。入FTP协议中命令连接与数据连接就是相关联的连接

    INVALIED:无法识别的状态

    --stat {NEW|ESTABLISHED|RELATED|INVALIED}

iptables -I INPUT -d 172.20.1.10 -p tcp -m multiport --dports 21,22,80,443 -m stat --stat NEW,ESTABLISHED -j ACCEPT

iptables -I OUTPUT -s 172.20.1.10 -m stat --stat RELATED,ESTABLISHED -j ACCEPT

启用stat模块连接追踪,占用的是系统内核的内存,可以存放最大条目数:

  /proc/sys/net/nf_conntrack_max

调整连接追踪模板中存放的最大条目数

  echo “N” > /proc/sys/net/nf_conntrack_max或sysctl -w net.nf_conntrack_max=”N”

永久生效则需要写入/etc/sysctl.conf

查看当前追踪的所有连接

  cat /proc/net/nf_conntrack

lsmod命令可以显示已经加载到内核中的所有模块信息,如果不想启用连接追踪,则需要卸载模块(modprobe)

不同协议或连接类型默认的追踪时长

  /porc/sys/net/netfilter/*

放行被动模式下的FTP服务

  1、装载内核模块

    modprobe nf_conntrack_ftp (ftp的追踪模块)

  2、放行请求报文

    放行入站请求端口为21的请求报文

    放行所有状态为ESTABLISHED和RELATED的入站报文

  3、放行出站报文

    放行所有状态为ESTABLISHED的出站报文

一旦启用连接追踪功能nf_conntrack模块则会自动装载;不过nf_conntrack_ftp模块需手动装载

保存iptables规则

1、service iptables save

  /etc/sysconfig/iptables(默认保存位置)

2、iptables-save > /PATH/TO/SOMEFILE

载入规则

1、service iptables reload

2、iptables-relstore < /PATH/TO/SOMEFILE

上一篇: css基本知识

继续阅读