Linux系统中的防火墙iptables

iptables/netfilter——Linux系统下的防火墙

基本原理

防火墙主要功能

工作于主机或者网络边缘,对进出本主机或本网络的报文进行匹配检测,对匹配到规则的报文进行于规则相对应的处理。

防火墙主要分类

  • 按功能分类

主机防火墙
网络防火墙

  • 按构成分类

软件防火墙
硬件防火墙

Linux防火墙软件iptables/netfilter(以后简称iptables)

内置五条链

PREROUTING
INPUT
FORWARD
OUTPUT
POSTROUTING

构成五大功能(五个表)

filter:过滤,防火墙;
nat:network address translation;用于修改源IP或目标IP,也可以改端口;
mangle:拆解报文,做出修改,并重新封装起来;
raw:关闭nat表上启用的连接追踪机制;
security:未广泛使用

各功能链结构

raw:PREROUTING, OUTPUT
mangle:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
nat:PREROUTING,[INPUT,]OUTPUT,POSTROUTING
filter:INPUT,FORWARD,OUTPUT

包过滤流程图

Linux系统中的防火墙iptables

配置思路

iptables内容

主要包含两个方面

  1. 匹配条件
    基本匹配条件:内建
    扩展匹配条件:由扩展模块定义
  2. 处理动作
    基本处理动作:内建
    扩展处理动作:由扩展模块定义
    自定义处理机制:自定义链

iptables配置原则

  1. 要实现哪种功能:判断添加到哪个表上
  2. 报文流经的路径:判断添加到哪个链上

链配置原则

  1. 同类规则(访问同一应用),匹配范围小的放上面
  2. 不同类的规则(访问不同应用),匹配到报文频率较大的放在上面
  3. 将那些可由一条规则描述的多个规则合并起来
  4. 设置默认策略

iptables配置指令——filter

链管理

-N 自定义一条新链

iptables [-t table] -N chain

-X 删除自定义的规则链(仅能删除引用计数为0自定义链)

iptables [-t table] -X  [chain]

-P 设置默认策略

iptables [-t table] -P chain target

-E 重命名自定义链(不能重命名引用计数不为0的链)

iptables [-t table] -E old-chain-name new-chain-name

规则管理

-A 在尾部追加新规则

iptables [-t table] -A chain rule-specification

-I 插入新规则到指定位置(不指定为插入到第一条)

iptables [-t table] -I chain [rulenum] rule-specification

-D 删除指定规则

iptables [-t table] -D chain rulenum 指定序号删除
iptables [-t table] -D chain rule-specification 指定规则删除

-R 替换指定规则

iptables [-t table] -R chain rulenum rule-specification

-F 清空指定规则链(默认清空所有)

iptables [-t table] -F [chain [rulenum]] [options...]

-Z 归零规则链
iptables的每条规则都有两个计数器:

  1. 匹配到的报文的个数;
  2. 匹配到的所有报文的大小之和;
iptables [-t table] -Z [chain [rulenum]] [options...]

-L 查看iptables规则

  • -n:numberic,以数字格式显示地址和端口号;
  • -v:verbose,详细信息;-vv, -vvv
  • -x:exactly,显示计数器结果的精确值;
iptables [-t table] -L [chain [rulenum]] [options...]

rule-specification

包含两方面内容

  • 匹配条件
  • 处理动作

匹配条件

  • 基本匹配条件
[!] -s, --source  address[/mask][,...]:检查报文中的源IP地址是否符合此处指定的地址或范围;
[!] -d, --destination address[/mask][,...]:检查报文中的目标IP地址是否符合此处指定的地址或范围;所有地址:0.0.0.0/0
[!] -p, --protocol  //protocol: tcp, udp, udplite, icmp, icmpv6,esp, ah, sctp, mh or  "all" {tcp|udp|icmp}
[!] -i, --in-interface name:数据报文流入的接口;只能应用于数据报文流入的环节,只能应用于PREROUTING,INPUT和FORWARD链;
[!] -o, --out-interface name:数据报文流出的接口;只能应用于数据报文流出的环节,只能应用于FORWARD、OUTPUT和POSTROUTING链;
  • 拓展匹配条件

    • 隐式拓展条件
      不需要手动加载扩展模块;因为它们是对协议的扩展,所以,但凡使用-p指明了协议,就表示已经指明了要扩展的模块
tcp:
    [!] --source-port, --sport port[:port]:匹配报文的源端口;可以是端口范围;
    [!] --destination-port,--dport port[:port]:匹配报文的目标端口;可以是端口范围;
    [!] --tcp-flags  mask  comp mask is the flags which we should examine,  written as a comma-separated list,例如 SYN,ACK,FIN,RST
    comp is a comma-separated list  of  flags  which must be set,例如SYN
    例如:“--tcp-flags  SYN,ACK,FIN,RST  SYN”表示,要检查的标志位为SYN,ACK,FIN,RST四个,其中SYN必须为1,余下的必须为0;
    [!] --syn:用于匹配第一次握手,相当于”--tcp-flags  SYN,ACK,FIN,RST  SYN“;                                

    udp 
    [!] --source-port, --sport port[:port]:匹配报文的源端口;可以是端口范围;
    [!] --destination-port,--dport port[:port]:匹配报文的目标端口;可以是端口范围;

    icmp 
    [!] --icmp-type {type[/code]|typename}
                echo-request:8
                echo-reply:0
    • 显式拓展条件
      必须使用-m选项指明要调用的扩展模块的扩展机制

1、multiport

This  module  matches  a  set  of  source  or  destination  ports. Up  to 15 ports can be specified.  A port range (port:port) counts as two ports.  It can only be used in conjunction with one of the following protocols: tcp,  udp, udplite, dccp and sctp.

以离散或连续的 方式定义多端口匹配条件,最多15个;

[!] --source-ports,--sports port[,port|,port:port]...:指定多个源端口;
[!] --destination-ports,--dports port[,port|,port:port]...:指定多个目标端口;

# iptables -I INPUT  -d 172.16.0.7 -p tcp -m multiport --dports 22,80,139,445,3306 -j ACCEPT

2、iprange

以连续地址块的方式来指明多IP地址匹配条件;
[!] --src-range from[-to]
[!] --dst-range from[-to]
# iptables -I INPUT -d 172.16.0.7 -p tcp -m multiport --dports 22,80,139,445,3306 -m iprange --src-range 172.16.0.61-172.16.0.70 -j REJECT

3、time

This  matches  if the packet arrival time/date is within a given range.

--timestart hh:mm[:ss]
--timestop hh:mm[:ss]
[!] --weekdays day[,day...]
[!] --monthdays day[,day...]
--datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
--datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
--kerneltz:使用内核配置的时区而非默认的UTC;

4、string

This modules matches a given string by using some pattern matching strategy. 

--algo {bm|kmp}
[!] --string pattern
[!] --hex-string pattern

--from offset
--to offset

~]# iptables -I OUTPUT -m string --algo bm --string "say" -j REJECT

5、connlimit

Allows  you  to  restrict  the  number  of parallel connections to a server per client IP address (or client address block).

--connlimit-upto n
--connlimit-above n

~]# iptables -I INPUT -d 172.16.0.7 -p tcp --syn --dport 22 -m connlimit --connlimit-above 2 -j REJECT

6、limit

This  module  matches  at  a limited rate using a token bucket filter. 

--limit rate[/second|/minute|/hour|/day]
--limit-burst number

~]# iptables -I OUTPUT -s 172.16.0.7 -p icmp --icmp-type 0 -j ACCEPT

限制本机某tcp服务接收新请求的速率:--syn, -m limit

7、state

The "state" extension is a subset of the "conntrack" module.  "state" allows access to the connection tracking state for this packet.

[!] --state state
    INVALID, ESTABLISHED, NEW, RELATED or UNTRACKED.

    NEW: 新连接请求;
    ESTABLISHED:已建立的连接;
    INVALID:无法识别的连接;
    RELATED:相关联的连接,当前连接是一个新请求,但附属于某个已存在的连接;
    UNTRACKED:未追踪的连接;                                
        state扩展:
        内核模块装载:
            nf_conntrack
            nf_conntrack_ipv4                                
        手动装载:
            nf_conntrack_ftp                                    
        追踪到的连接:
            /proc/net/nf_conntrack                        
        调整可记录的连接数量最大值:
            /proc/sys/net/nf_conntrack_max                        
        超时时长:
            /proc/sys/net/netfilter/*timeout*

处理动作

-j:
    ACCEPT/DROP  接受/丢弃
    REJECT:--reject-with 返回错误
    LOG:--log-level, --log-prefix 记录日志
    自定义链 转入使用自定义链
            RETURN 返回上一层链

iptables保存和还原

iptables-save 保存iptables配置
iptables-restore 还原iptables配置(会清空原有配置)

iptables配置指令——nat

NAT: Network Address Translation 地址转换

  • 请求报文:由管理员定义
  • 响应报文:由NAT的conntrack机制自动实现

请求报文中的地址变动

  • 修改源地址:SNAT,MASQUERADE
  • 修改目标地址:DNAT
  • 修改端口地址:REDIRECT

NAT定义在nat表:PREROUTING,INPUT,OUTPUT,POSTROUTING

  • SNAT:POSTROUTING
  • DNAT:PREROUTING

target:

  • SNAT

    --to-source [ipaddr[-ipaddr]]
  • DNAT

    --to-destination [ipaddr[-ipaddr]][:port[-port]]
  • MASQUERADE
  • REDIRECT

    --to-ports port[-port]

原创文章,作者:easyTang,如若转载,请注明出处:http://www.178linux.com/78009

(0)
上一篇 2017-06-13 14:28
下一篇 2017-06-13 15:50

相关推荐

  • python使用paramiko 模块建立ssh通讯

    一 paramiko简介 下文是我从别人博客那里copy下来的: paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接。 由于使用的是python这样的能够跨平台运行的语言,所以所有python支持的平台,如Linux, Solaris, BSD, MacOSX, Windows…

    Linux干货 2017-03-07
  • 输出重定向 输入重定向 管道简单介绍 -20160729

    输出重定向 输入重定向 管道简单介绍 标准输入和输出 我们先来了解下输入和输出的概念: 在计算机中我们了解到计算机的组成部分:其中有输入 输出设备。       输出重定向 对于程序来说: 程序 :指令 + 数据 对于数据来说,数据可以由我们通过键盘输入,或者程序直接使用存储设备上的数据,我们称为读入 数据,程序处理数据后需要返…

    Linux干货 2016-08-04
  • 第四周

    查看链接:http://note.youdao.com/noteshare?id=317ec635a5f28f2681421fd7c9a60f27

    Linux干货 2016-09-19
  • DHCP简介及简单实践

    一、引言 DHCP全称Dynamic Host Configure Protocol,动态主机配置协议,用于向网络中的计算机分配IP地址及一些TCP/IP配置信息。DHCP提供了安全,可靠且简单的TCP/IP网络设置,避免了TCP/IP网络地址的冲突,同时大大降低了工作负担。 二、DHCP工作流程 DHCP采用C/S架构,即Server/Client,它的简…

    Linux干货 2017-01-10
  • 逻辑卷管理工具lvm2

    lvm2:location Volume Manage Version 2 linux支持逻辑卷的模块为dm模块                        dm模块是将一个或多个底层物理设备组织成一个逻辑设备的模块。 在CentOS中,…

    Linux干货 2016-03-27
  • N26第五周博客作业

    1、显示/boot/grub/grub.conf中以至少一个空白字符开头的行;grep “^[[:space:]]+” /boot/grub/grub.conf 2、显示/etc/rc.d/rc.sysinit文件中以#开头,后面跟至少一个空白字符,而后又有至少一个非空白字符的行;grep “^#[[:space:…

    Linux干货 2017-03-06