iptables初探

iptables


  • 简述

  • 基础知识

  • 命令使用


简述

iptables是什么?netfilter又是什么?

iptables是位于用户控件的一个防火墙规则控制管理工具。netfilter是位于内核中的真正的防火墙,由五个钩子函数(hooks)而组成。

iptables的作用是什么?

用来添加,删除,管理netfilter规则。

netfilter的作用是什么?

起到过滤封包,转换与映射IP地址和端口,拆分和修改封包内容,追踪封包等功能,这些构成了四个功能表。

基础知识

组成部分

iptables:规则控制管理工具。
netfilter:位于内核空间的过滤器,实际上生效的部分。
    四表:大致根据功能可以分为四个,也就是在内部维护了四个表。
    五链:netfilter一共会在五个地方设置hooks,钩子函数,也就是说在五个地方会有关卡来过滤,依据不同的表,需要用到的链也是不同的。

五链(five hooks)

PREROUTING:进入路由前。
POSTROUTING:出路由前。
INPUT:进度内存空间前。
OUTPUT:出内存空间前。
FORWARD:转发链。

根据进入到出去的顺序为:
    PREROUTING -> INPUT -> OUTOUT -> POSTROUTING      进入本机用户空间处理。
    PREROUTING ->      FORWARD    -> POSTROUTING      进入本机后直接转发处理。

hooks

四表

根据优先级从低到高为:
    filter:过滤。
                INPUT OUTPUT FORWARD  
    nat:网络地址转换。
                PREROUTING POSTROUTING OUTPUT 
    mangle:报文拆分已经重装,修改报文内容。
                INPUT OUTPUT PREROUTING POSTROUTING FOEWARD
    raw:关闭NAT上启动的连接追踪机制。
                PREROUTING OUTPUT

协议类型

tcp:传输控制协议,可建立的是可靠的连接。
udp:用户数据包协议,建立的为不可靠的连接。
icmp:网络控制报文协议,iptables中主要用来控制ping报文。

常用的端口

ftp: tcp/20,21
ssh: tcp/22
telnet: tcp/23
smtp:tcp/25
http: tcp/80,8080
dns: tcp,udp/53
portmapper: tcp,udp/111
samba: udp/137,138  tcp/139,445,901
https: tcp/443
nfs: tcp,udp/2049  
mysql: tcp/3306
php-fpm: tcp/9000

命令使用

格式:

iptables [-t tables] -A|I|R [chain [num]] -[par] [value] -p [protocol [value]] -m [option [value]] -j [active [value]]

保存与重载:

Cnetos6:
iptables-save > /PATH/TO/FILE
iptables-restore < /PATH/TP/FILE

Centos7:引入了新的iptables管理工具,firewall。
firewalld-cmd
firewalld-config            *具体的使用方法可自行查阅官方文档。

常用参数:

iptables [-t table] {-A|-D} chain rule-specification                -A:添加
iptables [-t table] -I chain [rulenum] rule-specification           -I:插入
iptables [-t table] -R chain rulenum rule-specification             -R:替换
iptables [-t table] -D chain rulenum                                    -D:删除
iptables [-t table] -S [chain [rulenum]]                                -S:保存
iptables [-t table] {-F|-L|-Z} [chain [rulenum]] [options...]       -F:清空规则 -L:列出规则 -Z:清零所有计数器
iptables [-t table] -N chain                                            -N:创建一个新的用户自定义链         
iptables [-t table] -X [chain]                                      -X:删除用户自定义链
iptables [-t table] -P chain target                                 -P:为一个链设定默认的策略,ACCEPT DROP REJECT
iptables [-t table] -E old-chain-name new-chain-name                    -E:重命名一个自定义链

通用匹配(-par [value])

-i [intface]    :指定作用的网卡。
-s [source-ip]:指定源地址。
-d [destination-ip]:指定目标地址。 
-f:匹配包分片后的除了第一个包外的其他包。

隐式扩展参数(-p protocol parm):

-tcp --dport|sport port
     --tcp-flags LIST1 LIST2  表示在list1的标记列表中,list所指定的值为1即被标识的包。
        例: -p tcp --tcp-flags ACK,SYN,FIN ACK  :匹配ACK被设置,但是SYN和FIN没有被标识的包。

udp --dport|sport port
        例: -p udp --dport 80  :标识匹配目标地址的80端口,所对应的如果为sport就为源地址的80端口。

icmp --icmp-type 0|8
    0:响应报文  8:请求报文
        例: -p icmp --icmp-type 0 :匹配icmp响应报文,详细的icmp code对照表会在最后附加。

显示扩展参数(-m parm):

mutilport --dports|sports|ports  port1,port2...
            例: -m mutilport --dports 22,80 :匹配目标地址端口22和80,可以指定一起指定多个端口,对应的sports源地址端口。

iprange [!] --src-range|--dst-range  ipsfrom-toip 
            例: -m iprange --dst-range 192.168.1.1-192.168.1.10 :匹配目标地址为192.168.1.1-192.168.1.10范围内的主机。
                -m iptange ! --src-range 192.168.1.100 :匹配源地址不是192.168.1.100的所有主机。

string --algo bm|kmp [!] --string 'parrern'   
        --algo bm|kmp 指定字符串查找算法。
            例: -m string --algo bm --string 'chrome' :匹配所有报文中出现了chrome字符的报文。
                -m string --algo kmp --sring 'ie8' :匹配所有报文中除了ie8字符外的所有报文。

limit --limit rate[/second|/minute|/hour|/day] 
      --limit-burst num
            例: -m limit --limite 30/minute :报文传输速率为每分钟最多30封报文,即2秒一封最大速率
                -m limit --limit-burst 100 :令牌桶允许存放100个令牌,如果存放的令牌超过100则开始丢弃令牌。

connlimit --connlimit-above num
          --conlimit-upto num
            例: -m connlimit --connlimit-above 30 :允许并发连接数量要小于30.
                 -m connlimit --connlimit-upto 10 : 允许并发连接数量大于10.

recent  --name #设定列表名称,默认DEFAULT。
        --rsource:源地址,此为默认。
        --rdest:目的地址
        --seconds:指定时间内
        --hitcount:命中次数
        --set:将地址添加进列表,并更新信息,包含地址加入的时间戳。
        --rcheck:检查地址是否在列表,以第一个匹配开始计算时间。
        --update:和rcheck类似,以最后一个匹配计算时间。
        --remove:在列表里删除相应地址,后跟列表名称及地址。
            例: -m recent --name web --set 
                -m recent --name web --update --seconds 300 -hitconut 10 -j DROP

mac [!] --mac-source address 
            例: -m mac --mac-source 00:00:00:00:00:00 :匹配mac地址为00:00:00:00:00:00的报文。

time --datastart yyyy-mm-dd --datastop yyyy-mm-dd
     --timestart hh:mm[:ss] --timestop hh:mm[:ss]
     [!] --monthdays day1,day2...
     [!] --weekdays day1,day2...
            例: -m time --datastart 2016-05-30 --datastop 2016-06-01 :匹配两个日期段内的报文。
               -m time --timestart 10:00:00 --tiomestop 18:30:00 :匹配两个时间段内的报文。
               -m time ! --monthdays 1-20 :匹配月除了1-20号外的所有天数。
               -m time --monthdays 25- :匹配25号之后的所有天数。
               -m time --weekdays 1-3 :匹配周的周一周二周三。
               -m time ! --weekdays 3,5 :匹配除了周三与周五的所有天。

state [!] --state INVALID|ESTABLISHED|NEW|RELATED
      INVALID:无法识别的连接。
      ESTABLISHED:建立新连接后,在此连接失效前的所有连接。
      NEW:新连接。
      RELATED:相关的连接,建立连接后产生的新连接等,如ftp协议第一次连接21命令通道后产生的20端口的数据通道连接。
            例:  -m state --state NEW,WSTABLISHED :新连接与ESTABLISHED连接。
                 -m state ! --state RELATED :除了无法识别的连接外的所有连接。

动作(-j active):

DROP:丢弃。
REJECT:允许。
ACCEPT:拒绝。  

RETURN::结束在目前规则链中的过滤程序,返回主规则链继续过滤。
LOG:记录日志
    --log-level NUM :日志等级。
    --log-prefix STRING :日志前缀。
MASQUEARDE:不设置地址转换,而采用地址隐藏的策略来使的iptables自动取得转换地址。
MARK:防火墙标记,用来批量标识地址和端口。
    --mark VALUE[/mask]

SNAT:源地址转换。
    --to-source IPADDR[:PORT]
DNAT:目标地址转换。
    --to-destination IPADDR[:PORT]

保存和导入

iptables-save [file] :保存规则到文件。
iptables-restore [file] :从文件导入规则。

常用命令组合示例:

iptables [-t filter] -L -n  :显示指定的表规则状况,默认为filter表。

iptables -A INTPUT -d 192.168.1.1 -p tcp --dport 80 -j ACCEPT  放开80端口的请求。
iptables -A OUTPUT -s 192.168.1.1 -p tcp --sport 80 -j ACCEPT  放开80端口的响应。

iptables -t mangle -A PREROUTING -d 192.168.1.1 -p tcp -m mutilport --dports 22,80 -j MARK --mark 100  将22和80端口设置为一个防火墙标记100。

iptables -t NAT -A POSTROUTING -s 192.168.1.0 -p tcp -j SNAT --to-source 172.16.0.1   所有内网网段192.168.1.0的ip都将被映射为172.16.0.1这个ip
iptables -t NAT -A PREROUTING -d 172.16.0.1 -p tcp -m mutilport --dports 22,80 -j DNAT --to-destination 192.168.1.1  所有目标ip 172.16.0.1的22,80请求都被转到192.168.1.1的相应端口上。

iptables -A INPUT -d 192.168.1.1 -p icmp --icmp-type 0 -j ACCEPT  允许icmp的响应报文。
iptables -A OUTPUT -s 192.168.1.1 -p icmp --icmp-type 8 -j ACCEPT  允许icmp的请求报文。

iptables -A FORWARD  -d 192.168.1.3 -p tcp --dport 80 -j ACCEPT  允许目标地址为192.168.1.3的请求转发。

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

(0)
Net18_肖肖Net18_肖肖
上一篇 2016-05-31 19:48
下一篇 2016-05-31 20:24

相关推荐

  • 关于大型网站技术演进的思考(十)–网站静态化处理—动静整合方案(2)

    原文出处: 夏天的森林    上篇文章我简要的介绍了下网站静态化的演进过程,有朋友可能认为这些知识有点过于稀松平常了,而且网站静态化的技术基点也不是那么高深和难以理解,因此它和时下日新月异的web前端技术相比,就显得不伦不类了。其实当我打算写本系列的之前我个人觉得web前端有一个点是很多人都知道重要,但是有常常低估它作用的,那就…

    2015-03-11
  • 简单易懂的CentOS启动流程

    在使用Linux操作系统时,我们只需要按下电源键,等待一会儿,登录终端就呈现在我们眼前,在这段时间内,操作系统究竟做了哪些事情? 先上一张流程梗概图,你会对启动流程有个大致的了解 启动流程详解 POST加电自检   主板在接通电源后,系统首先由POST程序来对CPU、主板、内存、硬盘子系统、显示子系统串并行接口、键盘、CD-ROm光驱等硬件进行检测 读取MB…

    Linux干货 2016-09-11
  • vncserver安装配置小结

      安装VNC Server 端:        1. yum install  tigervnc-server         //RHEL6: vnc server的包名          yum &nbs…

    Linux干货 2016-03-09
  • useradd的学习小结

    1、作用 创建一个新的用户账号或者更新创建用户时的默认设置。 2、语法 有两种语法格式,第一种是创建新用户时,为新用户设置属性,而不完全使用/etc/default/useradd默认设置的内容;第二种是设置/etc/default/useradd的内容,即设置创建新用户时,新用户具有的默认属性。 (1)useradd [选项 属性] 用户名 如果不加选项,…

    2017-07-22
  • CentOS系统启动流程

    概述:系统启动流程是Linux一个重要的内容,深入了解启动流程会对我们学习Linux起到一个顺水推舟的作用。因为CentOS 7改动较大,所以下面的内容只是针对CentOS 5和6来说的。下面进入正题。 启动流程:  第一步:POST加电自检    此过程的就是为了检测一下外界的硬件设备是否能够正常运行,如CPU,内存设备,硬盘…

    Linux干货 2016-09-13
  • 数据结构-栈和队列

    1.栈 1.1 栈的定义 栈是一种特殊的线性表。其特殊性在于限定插入和删除数据元素的操作只能在线性表的一端进行。如下所示: 结论:后进先出(Last In First Out),简称为LIFO线性表。 栈的基本运算有六种: 构造空栈:InitStack(S)、 判栈空: StackEmpty(S)、 判栈满: StackFull(S)、 …

    Linux干货 2015-04-07