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

相关推荐

  • 马哥教育网络班21期+第15周课程练习

    1、总结sed和awk的详细用法; sed 流编辑器,处理一行数据到模式空间(p),不匹配条件话就输出源行,匹配条件且有处理话,就输出处理过后的行和源行, 匹配条件且没有处理动作的话,只输出p空间的行;保持空间(h)用来存放模式空间的临时处理结果 [root@centos ~]# sed ''&nb…

    Linux干货 2016-08-30
  • IO模型——进程工作的方式

    I/O模型 模型:阻塞型、非阻塞型、复用型、信号驱动型、异步 同步/异步: 关注消息通知机制      消息通知:          同步:等待对方返回消息       &nbsp…

    Linux干货 2016-10-25
  • 深入理解java嵌套类和内部类

    一、什么是嵌套类及内部类   可以在一个类的内部定义另一个类,这种类称为嵌套类(nested classes),它有两种类型:静态嵌套类和非静态嵌套类。静态嵌套类使用很少,最重要的是非静态嵌套类,也即是被称作为内部类(inner)。嵌套类从JDK1.1开始引入。其中inner类又可分为三种:  其一、在一个类(外部类)中直接定义的内部类;  其二、在一个方法…

    Linux干货 2015-04-07
  • RAID简述和Linux软RAID配置

    RAID简述和Linux软RAID配置 PS:仅为课程练习,原理和配置可能有误,仅供参考,谢谢; 1.RAID功能简述     RAID,全称(Redundant Arrays of Inexpensive Disk或Redundant Arrays of Independent Disk),现在一般多用于后面那个称呼,独立磁盘冗余阵列。RAID的基础概念大…

    Linux干货 2016-07-17
  • Mariadb数据库备份恢复系列(二):xtrabackup物理备份工具之完全备份

    实验二:利用xtrabackup+二进制日志实现完全备份和恢复数据库 1、安装xtrabackup软件包 2、验证数据的存储引擎类型 3、查看数据初始状态 4、利用innobackupex进行完全备份 5、进行apply-log操作 6、查看备份出来的文件的信息 7、模拟在完全备份后,对数进行修改,以测试通过二进制日志还原完全备份后尚未来得及备份的变化的数据…

    Linux干货 2016-11-24
  • C语言的整型溢出问题

    整型溢出有点老生常谈了,bla, bla, bla… 但似乎没有引起多少人的重视。整型溢出会有可能导致缓冲区溢出,缓冲区溢出会导致各种黑客攻击,比如最近OpenSSL的heartbleed事件,就是一个buffer overread的事件。在这里写下这篇文章,希望大家都了解一下整型溢出,编译器的行为,以及如何防范,以写出更安全的代码。 什么是整型溢出 C语言…

    Linux干货 2016-06-03