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)
上一篇 2016-05-31 19:48
下一篇 2016-05-31 20:24

相关推荐

  • 人志建,则无敌—vim练习题

    马哥网络班21期-第六周博客 1、复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#; [root@caicai ~]# cp -a /etc/rc.d/rc.sysinit /tmp [root@caicai&nbsp…

    Linux干货 2016-08-15
  • Linux发展史

    日期:2016-10-12  Bell,MIT与GE的『Multics』系统     早期的计算机还很不普遍,除非是军事或者高科技用途,或者学术单位的学术研究,否则真的很难接触到。而且计算机架构很难使用。那个时候,程序设计者必须先将程序相关的信息在读卡纸上面打洞然后将读卡纸插入卡片阅读机来将信息读入主机中运算…

    Linux干货 2016-10-14
  • Linux系统网络属性管理之bond

    Bonding 就是将多块网卡绑定同一IP地址对外提供服务,可以实现高可用或者负载均衡。当然,直接给两块网卡设置同一IP地址是不可能的。通过bonding,虚拟一块网卡对外提供连接,物理网卡的被修改为相同的MAC地址。 Bonding的工作模式 •Mode 0 (balance-rr) 轮转(Round-robin)策略:从头到尾顺序的在每一个slave接口…

    Linux干货 2016-09-18
  • 关于大型网站技术演进的思考(八):存储的瓶颈(8)

    原文出处: 夏天的森林  在开始本篇主要内容前,我们一起看看下面的几张截图,首先是第一张图,如下图所示: 这是一家电商网站的首页,当我们第一次打开这个首页,网站会弹出一个强制性的对话框,让用户选择货物配送的地址,如果是淘宝和京东的话,那么这个选择配货地址的选项是在商品里,如下图是淘宝的选择配送地点: 下图是京东选择配货地点: 那么图一跟京…

    2015-03-11
  • 第三周 用户和组管理

    1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。 [root@localhost ~]# who root     pts/0        2017-12-16 22:46 (192.168.43.233) root     pts/1        2017-12-16 22:46 (192.168.43.233…

    2017-12-16
  • Select、Case

    select循环与菜单 select循环主要用于创建菜单,按数字排序list指定的顺序排序,并列出在标准输出,利用PS3列出提示符进行输入选择 用法: select VARIABLE in list  do     循环体命令 done PS3提示语定义: 在脚本中脚本代码的第一…

    Linux干货 2016-08-21