今天又学习了一下iptables,做一点总结来方便以后查阅。

Netfilter(网络过滤器)是Linux操作系统核心层内部的一个数据包处理模块,主要负责数据包的拦截和转发,而iptables是NetFilter的一种应用化,为了方便定义规则和配置。

iptables工作在linux的内核空间,它通过内核空间的接口与用户空间通信,控制数据包在内核空间上的接口(就是经常说到的port)之间转发。

这是一条典型的iptables的配置语句,我从这里开始发散思维:

 iptables -t nat -A PREROUTING -d 172.30.1.8 -p tcp --dport 80 -j DNAT --to-destination 192.168.9.25

这条语句的功能是:在PREROUTING链的nat表上添加一条规则将来自172.30.1.8的80端口的请求转发到192.168.9.25。

语句指定了七个部分:链,表,源,目的,协议,端口和动作,我就从之七个方面分别记录。

1、链(chain)

iptables共有五个规则链: 

        1.INPUT (数据包流入内核空间)      
        2.OUTPUT(数据包流出内核空间)
        3.FORWARD (数据包在port之间的转发)
    4.PREROUTING (目的地址转换)
        5.POSTROUTING(源地址转换)
其中PREROUTING和POSTROUTING分别对应着目的地址转换(DNAT)和源地址转换(SNAT),我的理解是,网卡是一个物理设备,在系统之外的层次,数据包的流入流出都需要通过网卡,路由是发生在内核空间,在数据包通过网卡而未到达内核中的这一段时间,由POSTROUTING来定义。而在数据包通过了内核而未到达网卡的这一段时间,由PREROUTING来定义。简单来说,数据包上记录着数据的源地址和目的地址,PREROUTING链记录了数据包的目的地址的修改,而POSTROUTING链记录了数据包原地址的修改,数据包在内核会先经过路由表的路由,路由之后在经过iptables的处理,处理后新的数据包再进行转发。因为,我认为从某种意义上来说,iptables的PREROUTING和POSTROUTING也可以简单的看成修改数据包的源地址和目的地址。
每一条规则在链中的匹配原则是从上到下。
链的选项:
  -P chain :设置链的默认策略
     -A chain :在链的最后新增一个规则
   -F  chain:清除链的所有规则
   -N chain: 支持用户新建一个链
     -X chain: 用于删除用户自定义的空链,删除链之前需要将链清空
     -E chain newchain: 用来给用户自定义的链重命名
     -I chain num: 将当前规则插入为指定链的第几条
     -R chain num:修改指定链的第几条规则
     -D chain num:删除指定链的第几条规则
示例:
 清空或删除规则:(必须同时指定表和链)

iptables -F PREROUTING -t nat
iptables -D POSTROUTING 1 -t nat
    
2、表(table)
  表有什么存在的意义?  难道仅仅是方便管理和查看?目前常用的表有三个,filter用来定义允许或不允许,nat用来定义地址转换,mangle用来修改报文原数据。
    -t table: 匹配表,不指定则默认适用于所有表
 
3、源
  -s address:指定源地址
4、目的
 -d address:指定目的地址
 
5、协议
  -p proto:匹配协议
  匹配的协议有三种,tcp、udp和icmp。其中icmp是ping的协议,iptables允许ping的语句:

iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type 0 -j ACCEPT

6、端口

--sport num: 指定源端口

--dport num: 指定目的端口

--dport XX-XX:指定多个端口,不能指定多个非连续端口

-m  --dports 21,23,80:表示启用多端口扩展,可以指定多个非连续端口

开放服务器的3306和90端口:

iptables -A INPUT  -p tcp -m multiport  --dport 3306,90 -j ACCEPT
iptables -A OUTPUT -p tcp -m multiport --sport 3306,90 -j ACCEPT

7、动作

-j ACTION: 对数据包的处理

常见的ACTION:

   DROP:丢弃
     REJECT:拒绝
     ACCEPT:接受
     custom_chain:转向一个自定义的链
     DNAT:目的地址转换
     SNAT:源地址转换
     MASQUERADE:源地址伪装,改写数据包来源 IP 为防火墙 NIC IP
     REDIRECT:重定向,主要用于实现端口重定向
     MARK:打防火墙标记
     RETURN:返回
     LOG:记录数据包信息
 
  示例:
将90端口重定向到80端口:
iptables -I PREROUTING 1  -t nat -p tcp --dport 90 -j REDIRECT --to-ports 80

将通过端口79-80的数据包改写源 IP:

iptables -A POSTROUTING -t nat -p tcp  -j MASQUERADE --to-ports 79-81

将的80端口重定向到百度:

iptables -A PREROUTING -t nat -p tcp -d 119.29.23.152 --dport 80 -j DNAT --to-destination 14.215.177.38:80
iptables -A postrouting -t nat -p tcp -d 14.215.177.38 --dport 80 -j SNAT --to-source 119.29.23.152
echo 1 > /proc/sys/net/ipv4/ip_forward #开启服务器的转发功能

还有一些其他的匹配选项:

    -i eth0:从eth0网卡流入的数据包
    -o eth0:从eth0网卡流出的数据包

简单的iptables规则基本介绍完了,下面是查看命令:

iptables -L  -n     #以数字的方式显示ip,它会将ip直接显示出来,如果不加-n,则会将ip反向解析成主机名
iptables -L -v #显示详细信息
iptables -L -vv
iptables -L -vvv #越多越详细
iptables -L -x #在计数器上显示精确值,不做单位换算
iptables -L --line-numbers #显示规则的行号
iptables -L -t nat #显示nat表所有的信息

另外,我们在终端编辑的iptables规则只是临时生效,要想在服务器重启后还能生效,需要将规则保存在配置文件/etc/sysconfig/iptables中,并且etc/sysconfig/iptables中的规则都是永久生效的。执行service iptables save命令,会使当前定义的规则保存到/etc/sysconfig/iptables中。若想将当前规则备份起来,备份iptabales规则命令是iptables-save > /etc/sysconfig/iptables.bak。若想要使用自己写的iptables配置文件或者手动加载备份的iptables配置文件,使用iptables-restore < /etc/sysconfig/iptables.bak命令。

才开始写博客,文采不好思维凌乱格局纠结分类糟糕,如有错误的地方,或者有什么提高的地方,欢迎批评指正。另外,现在的我肯定对技术了解不深,今后有什么完善的地方,我会对博客进行补充的。

    
  
     参考网址:http://blog.rekfan.com/articles/237.html
       http://blog.chinaunix.net/uid-22780578-id-3346350.html
                   

linux iptables规则介绍的更多相关文章

  1. 常用的 Linux iptables 规则

    一些常用的 Linux iptables 规则,请根据自己的具体需要再修改. 转载自:http://mp.weixin.qq.com/s/uAPzh9_D4Qk6a3zBh7Jq5A # 1. 删除所 ...

  2. 25 个常用的 Linux iptables 规则【转】

    转自 25 个常用的 Linux iptables 规则 - 文章 - 伯乐在线http://blog.jobbole.com/108468/ # 1. 删除所有现有规则 iptables -F # ...

  3. 25 个常用的 Linux iptables 规则

    # 1. 删除所有现有规则 iptables -F   # 2. 设置默认的 chain 策略 iptables -P INPUT DROP iptables -P FORWARD DROP ipta ...

  4. Linux iptables:规则组成

    <Linux iptables:规则原理和基础>介绍了iptables的四表五链,简单说就是不同的网络层数据包会经过哪几个挂载点,在每个挂载点可以在哪张表进行规则定义. 本篇沿着这个思路, ...

  5. iptables 简单介绍及应用 Linux防火墙

    iptables 即 Linux防火墙 的简单介绍及使用 iptables生效位置如下图: 其中, 网络防火墙也可以使用一台启用了iptables的Linux主机代替; 路由器或集线器等设施在拓扑中省 ...

  6. linux如何查看防火墙是否开启?删除iptables规则

    iptables是linux下的防火墙组件服务,相对于windows防火墙而言拥有更加强大的功能,此经验咗嚛以centos系统为例.关于iptables的一般常见操作,怎么来判断linux系统是否启用 ...

  7. Iptables 规则 一些简单实例和详细介绍

    设定规则 iptables -p INPUT DROP iptables -p OUTPUT ACCEPT iptables -p FORWARD DROP 1.防止外网用内网IP欺骗 iptable ...

  8. Linux iptables 配置规则

    Linux iptables 防火墙配置规则 前言:把网上我感觉不错iptables的访问规则都统一在这里,以后做参考. modprobe ipt_MASQUERADE modprobe ip_con ...

  9. linux系统中查看己设置iptables规则

    1.iptables -L 查看filter表的iptables规则,包括所有的链.filter表包含INPUT.OUTPUT.FORWARD三个规则链. 说明:-L是--list的简写,作用是列出规 ...

随机推荐

  1. linux性能之iostat

    在使用linux系统的过程中,总是可能需要当前io性能的状态信息是怎么样?这里就就是一下iostat,可以通过iostat来初步查看io的状态信息. 1.常用方式 iostat -xdk 1 10 或 ...

  2. redis multi exec

    multi(),返回一个redis对象,并进入multi-mode模式,一旦进入multi-mode模式,以后调用的所有方法都会返回相同的对象,直到exec()方法被调用. phpredis是php的 ...

  3. 关于input标签无法对齐的解决方法!

    在布局中发现各个input之间很难对齐,解决方法如下: 将input设置vertical-align属性: vertical-align:middle vertical-align:top verti ...

  4. 纯css实现翻牌特效

    大家有没有看到过网上很炫的翻牌效果,牌正面对着我们,然后点击一下,牌就被翻过来了,效果很酷炫,是不是很想知道是怎么实现的么,代码很简单,跟着小编往下走. 先给大家介绍一下翻牌的原理: 1.父容器设置设 ...

  5. python之基础中的基础(一)

    python是一个效率极高的语言,现在市面上的机器学习大部分是由python和R语言完成,所以在不久之前小仙心中便种下了学习python的想法.下面是这一个月多月以来学习的总结,都是基础中基础了. 1 ...

  6. 云计算之路-阿里云上:负载均衡错误修改Cookie造成用户无法登录

    最近陆续有用户反馈在我们网站上登录时遇到登录死循环问题.输入用户名与密码提交后,显示登录成功,但跳转到目标网址后(由于依然处于未登录状态)又跳转回登录页面,再次登录,再次这样...就这样一直循环,怎么 ...

  7. Socket中的异常和参数设置

    1.常见异常 1.java.net.SocketTimeoutException . 这个异 常比较常见,socket 超时.一般有 2 个地方会抛出这个,一个是 connect 的 时 候 , 这 ...

  8. Visual Studio Package 插件开发之自动生成实体工具

    前言 这一篇是VS插件基于Visual Studio SDK扩展开发的,可能有些朋友看到[生成实体]心里可能会暗想,T4模板都可以做了.动软不是已经做了么.不就是读库保存文件到指定路径么…… 我希望做 ...

  9. C#RichTextBox种跳转到指定行

    用这个方法,iCodeRowsID是要跳转的行号,rtb是RiCHTextBox控件名. 其中rtb.Lines.Length可获得最大行数 private void TrunRowsId(int i ...

  10. 配置你的Editor

    ![](http://oqefp0r4y.bkt.clouddn.com/editor_index.png) ### 说明1. 走一波配置流,莫等闲,高效快速开发,从自己的常用的工具开始2. 寻找舒适 ...