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)
easyTangeasyTang
上一篇 2017-06-13 14:28
下一篇 2017-06-13 15:50

相关推荐

  • M20 – 1- 第二周(2):硬链接与软链接的区别

    在讲硬链接与软链接的区别之前,我们首先了解inode,了解inode让我们更容易理解何为硬链接和软链接。 inode概念        何为inode,inode就是索引节点,而inode表中存放着文件的元数据,何为元数据,元数据就是文件名称、大小、时间戳、所有者、权限、inode等信息,而文件中的内容就是文件的数据,…

    Linux干货 2016-08-02
  • PXE原理详解及实践

    一、PXE简介 PXE(preboot execute environment,预启动执行环境)是由Intel公司开发的最新技术,工作于Client/Server的网络模式,支持工作站通过网络从远端服务器下载映像,并由支持通过网络启动操作系统,再启动过程中,终端要求服务器分配IP地址,再用TFTP(trivial file transfer protocol…

    Linux干货 2017-01-10
  • 马哥linux运维网络班第22期-第一周博客作业

    计算机的组成及其功能 计算机由运算器,控制器,存储器,输入装置和输出装置组成 (1)运算器 对数据进行常规运算(+,-,*,/)和逻辑运算(与,或,非等)及比较位移等操作 (2)控制器 分析从存储器中读出的指令并按预先规定的步奏执行操作 (3)存储器 存储程序和数据信息并实现快速存取 (4)输入设备 把各种类型的信息转换为二进制编码输入进计算机存储起来 (5…

    Linux干货 2016-08-14
  • Boot目录下内容丢失导致系统无法启动

    Boot目录下内容丢失导致系统无法启动 笔者朋友近期在一次学习过程中不慎将虚拟机中boot目录下内容丢失,导致系统无法启动。当然此前他并不知道是这样,只是应为莫名的弹出框报错所有导致系统无法启动。此后朋友将此故障告知笔者,笔者本身其实也是小白刚刚学习linux不就,但是对这些稀奇古怪的故障感觉很有兴趣,所以笔者就掉进坑里搞了好久才搞出来点眉目来。为了让更多学…

    Linux干货 2016-10-24
  • Shell脚本自动部署(编译)LAMP平台

    Shell脚本自动部署(编译)LAMP平台 Shell脚本自动部署(编译)LAMP平台 为什么要用脚本进行部署? 脚本功能介绍 笔者环境 准备工作 声明 使用测试 脚本代码 Shell脚本自动部署(编译)LAMP平台 LAMP是当下非常流行的一套Web架构,我们可以在GNU/Linux下通过其他人打包的程序包来进行安装; 但是在生产环境中,很多时候都需要我们…

    Linux干货 2016-03-26
  • 系统基础之shell脚本编程详解4(数组及字符串处理,变量赋值和配置文件)

    系统基础之shell脚本编程详解4(数组及字符串处理,变量赋值和配置文件)     今天来讲shell脚本编程的最后一些内容,数组及字符串处理,变量赋值和配置文件.这些内容也是我们经常在工作中使用到的知识点.下面让我们来详细了解下: 数组:   程序=指令+数据        &…

    Linux干货 2016-08-24