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
下一篇 2017-06-13

相关推荐

  • 常用命令总结

    ifconfig查看IP地址 date查看日期和时间 cd跳转到任何目录 useradd新建一个普通用户 passwd给用户设置密码 poweroff   halt    关机 reboot  重启 cal  查看日历 cal -y 查看一年日历 env  export&nbsp…

    Linux干货 2017-04-04
  • LNMP安装过程中出现的问题及解决方法

    一、背景介绍    操作系统版本:centos6.8    nginx版本:nginx-1.10.2            mysql版本:mysql5.7.16    php版本:php5.6.28   由于mysql和php的…

    Linux干货 2016-11-23
  • N22-妙手-第一周博客作业

           描述计算机的组成及其功能 1946年冯诺依曼提出冯 诺依曼结构,也称普林斯顿结构,即一种将程序指令存储器和数据存储器合并在一起的存储器结构。根据他的结构,计算机组成是: (1)运算器:负责数据的算术运算和逻辑运算 (2)控制器:  负责对程序信息和数据进行分析,控制并协调其输…

    Linux干货 2016-08-15
  • 5、脚本初步,正则表达式

    http://note.youdao.com/yws/public/redirect/share?id=35435e3a02f23513e5c83601372fff9b&type=false

    Linux干货 2016-08-08
  • 高级文件系统管理

    高级文件系统管理 配置配额系统 在内核中执行 以文件系统为单位启用 对不同组或者用户的策略不同 根据快或者节点限制,软限制 soft 硬限制hart 初始化 分区挂载选项 usrquota,grgquota 初始化数据库:quotacheck 执行配置 开启或者取消 quotaon ,quotaoff 直接编辑配额 edquota username 在she…

    Linux干货 2017-05-03
  • AIX下NFS共享导致命令行输入卡住

     1、事件描述:之前公司测试某厂商存储一体机的NFS共享功能,将该NFS目录共享给AIX主机使用(用于备份对应对应的数据库,因为数据库版本太老,Oracle8i的,不支持存储厂商的备份代理),测试完成后,厂商将设备直接关机(这时候在AIX上挂载的NFS目录没有进行卸载)。然后,当我们登陆到AIX服务器上的时候,发现每次敲入“df -g”或者“ls”…

    Linux干货 2016-07-07