iptables详解

netfilter 内核中的防火墙框架,承载并生效规则;4表5链;

  • netfilter功能:
    。 filter 包过滤
    。 NAT 网络地址转换
    。mangle 拆解报文,作出修改,而后重新封装;
    。 raw 关闭nat表上启用的连接追踪机制;

iptables 规则管理工具;

内核中的TCP/IP协议栈上,本生并没有防护的功能,netfilter在TCP/IP协议栈上设置几道关卡,勾住流经的报文;根据在其上使用iptables命令设置的规则,作出相应的操作;

  • 表(功能):
    。filter:INPUT,FORWARD,OUTPUT
    。 nat:PREROUTING,INPUT,OUTPUT,POSTROUTING
    。mangle:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
    。raw:PREROUTING,OUTPUT

  • 链:
    。PREROUTING
    。 INPUT
    。 FORWARD
    。 OUTPUT
    。 POSTING

  • 报文的流向:
    流入:PREROUTING-->INPUT
    转发:PREROUTING-->FORWARD-->POSTROUTING
    流出:OUTPUT-->POSTROUTING

  • 添加规则时需要考量的因素:

  1.实现的功能:用于判定将规则添加至哪个表;
  2.报文的流经位置:用户判断将规则添加至哪个链;
  3.报文的流向:判定规则中何为源,何为目标;
  4.匹配条件:用户编写正确的匹配规则;
  5. 专用于某种应用的同类规则,匹配范围小的放在前面;
  6.专用于某些应用的不同规则,匹配到的可能性较多的放在前面;同类别的规则可以使用自定义链单独存放;
  7.用于通用目录的规则放在前面;

iptables命令语法格式:

iptables [-t TABLE] COMMAND CHAIN 基本匹配条件 [-m 扩展匹配条件] -j 处理动作
-t TABLE 默认filter表

  COMMAND :
    链管理:
      -N CHAIN:用户自定义链,被调用后才能使用;
      -X CHAIN 删除用户自定义的且引用计数为0的空链
      -E old-chain new-chain 重命名自定义链,且引用计数为0;
      -P chain target 设置默认策略;
      -F [chain] 清空链上的规则,默认为清空表上的所有链上的规则;
      -S chain 列出指定链的规则;
      -Z chain [rulenum] 将指定链上的计数器至零; 被匹配到的包个数和所有被本规则匹配到的总字节数
    规则显示:-vnL 
          -vnL --line-numbers 列出规则是,显示其在链上的相应的编号;
            -S chain 显示指定链上的所有规则
    规则管理:增删改查
      -A CHAIN 追加一条规则;
      -I CHAIN NUM 在指定的位置插入一条规则;
      -R CHAIN NUM 替换指定的规则
      -D chain num 根据编号删除规则
      -D chain rule 根据规则删除

通用匹配条件:

  -d 目标地址;
  -s 源地址;
  -p tcp|udp|icmp 指定协议
  -i IFACE 报文流入接口;PREROUTING,INPUT,FORWARD
  -o IFACE 报文流出接口:OUTPUT,FORWARD,POSTROUTING 

扩展匹配条件:

  • 隐式扩展:-p 指定协议后,无需使用-m指定扩展模块;
    (1)tcp隐式扩展:-p tcp
    --dport 目标端口,可以是连续的端口范围;例 --dport 22:23 表示22到23号3个端口;
    --sport 源端口
    --tcp-flags FLAGS comp;
    FLAGS:SYN,ACK,FIN,RST
    comp:表示前面的标志位列表中,哪些标志位必须为1;其他的在标志位列表中出现的标志位都为0;
    例:
    匹配三次握手的第一次: -p tcp --tcp-flags SYN,ACK,FIN,RST SYN
    可简写为:-p tcp --syn
    非法报文:
    -p tcp --tcp-flags ALL ALL
    -p tcp --tcp-flags NONE NONE

      (2)udp隐式扩展:-p udp 
         --dport 目标端口;
         --sport 源端口;
         
      (3)icmp隐式扩展: -p icmp 
         --icmp-type 0|8
           0:响应
           8:请求
    
  • 显示扩展:-p 指定协议后,必须使用-m指定扩展模块;
    1.多端口:multiport,最多15个;
    -m multiport --dports|--sports port[:port],port,.... //可以是连续或者离散的端口;
    示例:iptables -A INPUT -d 172.18.20.7 -p tcp -m multiport --dports 22,80,443 -j ACCEPT
    2.时间:time
    -m time --timestart HH:MM:SS --timestop HH:MM:SS
    -m time --datestart|--datestop YYYY-MM-DD HH:MM:SS
    -m time --weekdays MON,TUS,WES,FRI,STA,SUN
    --kerneltz 使用内核配置的时区,而非默认的UTC
    示例:iptables -A INPUT -d 172.18.20.7 -p tcp --dport 80 -m time --timestart 14:00:00 --timestop 15:00:00 --kerneltz -j REJECT

      3.匹配字符串:string 
        -m string --algo bm --string "STRING"  //algo指定算法(必须指定);用来过滤网页中的字符串;
        示例:iptables -A INPUT -s 172.18.20.7 -p tcp --sport 80 -m string --algo bm --string gay -j REJECT 
        
      4.匹配状态:state 
        -m state --state STATE 
          STATE:ESTABLISHED,NEW,RELATED(相关联的连接),INVAILED 
          注意:开放ftp服务:开放21号端口,并且状态为ESTABLISHED,RELATED开放后,需要手动加载ftp的追踪模块: modprobe nf_conntrack_ftp 
      5.iprange 以连续地址块的方式来指明多ip地址匹配条件;
        --src-range start-stop
        --dst-range start-stop
        示例:iptables -A INPUT -d 172.18.20.7 -p tcp --dport 23 -m iprange --src-range 172.18.20.1-172.18.20.7 
      
      6.connlimit 限制每个客户端最大连接数
        --connlimit-above 如果默认策略为允许,此操作表示拒绝;
        --connlimit-upto  如果默认策略为拒绝,此操作表示允许;
        示例:
          172.18.20.7默认策略为开放ssh
          iptables -I INPUT 2 -d 172.18.20.7 -p tcp --dport 22 -m connlimit --connnlimit-above 2 -j REJECT //每个客户端仅能连接ssh服务两次
       
       7.limit 限制ping包流量
        --limit 20/minute --limit-burst 4 
        示例:
          iptables -A INPUT -d 172.18.20.7 -p icmp --icmp-type 8 -m limit --limit 20/minute --limit-burst 4 -j ACCEPT //客户端一次最多发起3个ping请求,--limit-burst 4 空闲时,客户端一个可以发送4个ping请求;
    

规则的保存和还原:

    保存规则:
      iptables-save >iptables
    还原规则:
      iptables-restore <iptables 

示例:

开放ssh给所有主机,开放samba给172.18.20.6 
[root@CentOS7 ~]# iptables -F  
[root@CentOS7 ~]# iptables -A INPUT -d 172.18.20.7 -p tcp --dport 22 -j ACCEPT  
[root@CentOS7 ~]# iptables -A INPUT -d 172.18.20.7 -j REJECT
[root@CentOS7 ~]# iptables -vnL --line-numbers
Chain INPUT (policy ACCEPT 59 packets, 6120 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1      286 19032 ACCEPT     tcp  --  *      *       0.0.0.0/0            172.18.20.7          tcp dpt:22
2       33  2712 REJECT     all  --  *      *       0.0.0.0/0            172.18.20.7          reject-with icmp-port-unreachable
[root@CentOS7 ~]# iptables -I INPUT 2 -d 172.18.20.7 -p udp --dport 137:138 -j ACCEPT 
[root@CentOS7 ~]# iptables -I INPUT 2 -d 172.18.20.7 -p tcp --dport 139 -j ACCEPT 
[root@CentOS7 ~]# iptables -I INPUT 2 -d 172.18.20.7 -p tcp --dport 445 -j ACCEPT 
[root@CentOS7 ~]#iptables -A OUTPUT -d 172.18.20.7 -j REJECT
[root@CentOS7 ~]# iptables -vnL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
 1276 95960 ACCEPT     tcp  --  *      *       0.0.0.0/0            172.18.20.7          tcp dpt:22
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            172.18.20.7          tcp dpt:445
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            172.18.20.7          tcp dpt:139
    0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            172.18.20.7          udp dpts:137:138
   39  3052 REJECT     all  --  *      *       0.0.0.0/0            172.18.20.7          reject-with icmp-port-unreachable

#自定义smb_input_rules 链开放ssh给所有客户端,拒绝所有连接,允许172.18.20.7访问samba服务
[root@CentOS7 ~]# iptables -F 
[root@CentOS7 ~]# iptables -A INPUT -d 172.18.20.7 -p tcp --dport 22 -j ACCEPT 
[root@CentOS7 ~]# iptables -N smb_input_rules 
[root@CentOS7 ~]# iptables -A smb_input_rules -d 172.18.20.7 -p udp --dport 137:138 -j ACCEPT 
[root@CentOS7 ~]# iptables -A smb_input_rules -d 172.18.20.7 -p tcp --dport 139 -j ACCEPT 
[root@CentOS7 ~]# iptables -A smb_input_rules -d 172.18.20.7 -p tcp --dport 445 -j ACCEPT 
[root@CentOS7 ~]# iptables -vnL smb_input_rules 
Chain smb_input_rules (0 references)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            172.18.20.7          udp dpts:137:138
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            172.18.20.7          tcp dpt:139
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            172.18.20.7          tcp dpt:445
[root@CentOS7 ~]# iptables -A INPUT -d 172.18.20.7 -j smb_input_rules 
 [root@CentOS7 ~]iptables -A INPUT -d 172.18.20.7 -j REJECT 
[root@CentOS7 ~]# iptables -vnL OUTPUT 
Chain OUTPUT (policy ACCEPT 44 packets, 5080 bytes)
 pkts bytes target     prot opt in     out     source               destination         

#删除自定义链(smb_input_rules)
[root@CentOS7 ~]# iptables -D INPUT 2   #删除引用计数
[root@CentOS7 ~]# iptables -F smb_input_rules  #清空规则
[root@CentOS7 ~]# iptables -X smb_input_rules  #删除自定且引用计数为0的空链
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,271评论 5 466
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,725评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,252评论 0 328
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,634评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,549评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,985评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,471评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,128评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,257评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,233评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,235评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,940评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,528评论 3 302
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,623评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,858评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,245评论 2 344
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,790评论 2 339

推荐阅读更多精彩内容

  • iptables简介 netfilter/iptables(简称为iptables)组成Linux平台下的包过滤防...
    yshenhn阅读 112,120评论 2 78
  • 1 前言 防火墙(Firewall),就是一个隔离工具,工作于主机或者网络的边缘,对于进出本主机或本网络的报文,根...
    魏镇坪阅读 6,928评论 1 23
  • iptabels是与Linux内核集成的包过滤防火墙系统,几乎所有的linux发行版本都会包含iptables的功...
    随风化作雨阅读 4,718评论 1 16
  • iptables俗称防火墙,或许我们已经不在陌生,但是作为openstack基础,这里还是对其做一些补充,了解更多...
    ximitc阅读 1,776评论 0 8
  • (本文源于转载或摘抄整理) 一:前言 防火墙,其实说白了讲,就是用于实现Linux下访问控制的功能的,它分为硬件的...
    JackyTsuuuy阅读 8,920评论 1 6