iptables防火墙

一、简介

        netfilter/iptables 分别是内核态模块和用户态工具,netfilter位于Linux内核中的包过滤功能体系,iptables位于/sbin/iptables,用来管理防火墙规则的工具,管理员通过iptables给netfilter变更规则实现防火墙作用。

二、规则表和规则链

1.netfilter/iptables 预设的规则表

    表作用:容纳各种规则链

    划分依据:根据防火墙对数据的处理方式

2.规则表

    raw表:确定是否对该数据包进行状态跟踪

    mangle表:为数据包设置标记

    nat表:修改数据包中的源、目标IP地址或端口

    filter表:确定是否放行该数据包(过滤)

3.netfilter/iptables 预设的规则链

    规则的作用:对数据包进行过滤或处理

    链的作用:容纳各种防火墙规则

    链的分类依据:处理数据包的不同时机

4.规则链

    INPUT处理入站数据包

    OUTPUT处理出站数据包

    FORWARD处理转发数据包

    POSTROUTING链:在进行路由选择后处理数据包

    PREROUTING链:在进行路由选择前处理数据包

5.规则表之间的顺序

    raw—mangle—nat—filter

iptables防火墙_第1张图片

6.规则链之间的顺序

    入站:PREROUTING  INPUT

    出站:OUTPUT  POSTROUTING

    转发:PREROUTING  FORWARD  POSTROUTING

7.规则链内的匹配顺序

    按自上而下顺序依次检查,匹配即停止(LOG策略例外)

    若找不到相匹配规则,则按该链的默认策略处理

iptables防火墙_第2张图片

8.命令格式介绍

语法构成:
iptables  [-t 表名]  选项  [链名]  [条件]  [-j 控制类型]
	#不指定表名时,默认指filter表
	#不指定链名时,默认指表内的所有链
	#除非设置链的默认策略,否则必须指定匹配条件
	#选项、链名、控制类型使用大写字母,其余均为小写

数据包的常见控制类型:
	ACCEPT:允许通过
	DROP:直接丢弃,不给出任何回应
	REJECT:拒绝通过,必要时会给出提示
	LOG:记录日志信息,然后传给下一条规则继续匹配
	SNAT:源地址转换,将符合条件的数据包的源地址进行修改
		--to-source ip
	MASQUERADE:将数据包的源地址修改为本机的动态公网IP
	DNAT:目标地址转换,将符合条件的数据包的目标地址进行修改
		--to-destination ip:port
	REDIRECT:将符合条件的请求转发到本机的指定端口上
		--to-ports port

9.保存和恢复 iptables 规则

第一种方法:

        防火墙规则只在计算机处于开启状态时才有效。如果系统被重新引导,这些规则就会自动被清除并重设。要保存规则以便今后载入,请使用以下命令:

        service iptables save

        保存在 /etc/sysconfig/iptables 文件中的规则会在服务启动或重新启动时(包括机器被重新引导时)被应用。

        注意:save保存是覆盖式保存

第二种方法:

iptables–save > /etc/iptables/iptables.rules
    #使用命令备份iptables规则

iptables–restore < /etc/iptables/iptables.rules
	#使用命令恢复iptables规则

iptables服务
	脚本位置:/etc/init.d/iptables
	规则文件位置:/etc/sysconfig/iptables

三、防火墙规则指定

iptables防火墙_第3张图片

1.规则添加

-A:在链的末尾追加一条规则

-I:在链的开头(或指定序号)插入一条规则

例:

iptables -t filter -A INPUT -p tcp -j ACCEPT
	#如果不指定-t,则默认往fileter表里写,如果指定,则写入指定表里

iptables -I INPUT -p udp -j ACCEPT
    #在默认fileter表的INPUT链第一行添加,如果是udp协议,则允许通过。

iptables -I INPUT 2 -p icmp -j ACCEPT
	#在默认fileter表的INPUT链第二行添加,如果是ICMP协议,则允许通过。

2.规则查看

iptables -nvL --line-numbers

	-L:列出所有的规则条目
	-n:以数字形式显示地址、端口等信息
	-v:以更详细的方式显示规则信息
	--line-numbers:查看规则时,显示规则的序号

例:

iptables -L INPUT --line-numbers
    #查看默认fileter表中INPUT链的规则,列出所有规则条目,并显示规则的序号。

Chain INPUT (policy ACCEPT)
num  target     prot opt source        destination
1    ACCEPT     udp  --  anywhere      anywhere
2    ACCEPT     icmp --  anywhere      anywhere
3    REJECT     icmp --  anywhere      anywhere     reject-with icmp-port-unreachable
4    ACCEPT     tcp  --  anywhere      anywhere

3.规则删除、清空规则

iptables

    -D:删除链内指定序号(或内容)的一条规则
    -F:清空所有的规则

例:

iptables -D INPUT 3
    #删除INPUT表中,序号为3的规则

iptables -F
    #清空所有表中的所有规则

4.设置默认策略

iptables -t fileter -P FORWARD DROP
    #为fileter表的FORWARD链添加默认拒绝DROP规则
    #-P为指定的链设置默认规则

iptables -P OUTPUT ACCEPT
    #为fileter表的OUTPUT链添加默认放行ACCEPT规则

5.条件匹配

iptables防火墙_第4张图片

(1)通用匹配

可直接使用,不依赖于其他条件或扩展

包括网络协议、IP地址、网络接口等条件

常见的通用匹配条件:

协议匹配:-p(小) 协议名

地址匹配:-s 源地址、-d 目的地址

接口匹配:-i 入站网卡、-o 出站网卡

例:

iptables -A FORWARD -s 192.168.1.11 -j REJECT
    #在fileter表中FORWARD链中添加规则,拒绝源IP为192.168.1.11的请求,并给出相应提示。

iptables -I INPUT -s 10.20.30.0/24 -j DROP

iptables -I INPUT -p icmp -j DROP

iptables -A INPUT -i eth1 -s 192.168.0.0/16 -j DROP

(2)隐含匹配

要求以特定的协议匹配作为前提

包括端口、TCP标记、ICMP类型等条件

常用的隐含匹配条件:

端口匹配:--sport 源端口、--dport 目的端口

ICMP类型匹配:--icmp-type ICMP类型

例:

iptables -A FORWARD -s 192.168.4.0/24 -p udp --dport 53 -j ACCEPT

iptables -A INPUT -p tcp --dport 20:21 -j ACCEPT

iptables -A INPUT -p icmp --icmp-type 8 -j DROP

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

iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT

iptables -A INPUT -p icmp -j DROP

(3)显式匹配

要求以“-m 扩展模块”的形式明确指出类型

包括多端口、MAC地址、IP范围、数据包状态等条件

常用的显式匹配条件

多端口匹配:-m multiport  --sport 源端口列表

                      -m multiport  --dport 目的端口列表

IP范围匹配:-m iprange --src-range IP范围

                      -m iprange --dst-range IP范围

MAC地址匹配:-m mac --mac-source MAC地址

状态匹配:-m state --state 连接状态

例:

iptables -A INPUT -p tcp -m multiport --dport 25,80,110,143 -j ACCEPT

iptables -A FORWARD -p tcp -m iprange --src-range 192.168.4.21-192.168.4.28 -j ACCEPT

iptables -A INPUT -m mac --mac-source 00:0c:29:c0:55:3f -j DROP

iptables -P INPUT DROP

iptables -I INPUT -p tcp -m multiport --dport 80 -j  ACCEPT

iptables -I INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT

四、防火墙相关应用

1.SNAT策略

局域网主机共享单个公网IP地址接入Internet

SNAT策略的原理

源地址转换,Source Network Address Translation

修改数据包的源地址

源地址转换的目的:

       为了让目标服务器认为数据包是来自于一个公网IP,而不是一个私有IP地址,不再是仅仅为了通信。

未启用SNAT

iptables防火墙_第5张图片

启用SNAT

iptables防火墙_第6张图片

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to-source 218.29.30.31
	#若检查数据包在路由后(经过路由走的时候),经过eth0网卡的请求,检查如果以192.168.1.0/24为源地址,则将源地址改成218.29.30.31。

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
    #MASQUERADE地址伪装
    #适用于外网IP地址非固定的情况
	#对于ADSL拨号连接,接口通常为 ppp0、ppp1
	#将SNAT规则改为MASQUERADE即可

2.DNAT策略

DNAT策略的典型应用环境

       在Internet中发布位于企业局域网内的服务器

DNAT策略的原理

       目标地址转换,Destination Network Address Translation

修改数据包的目标地址

iptables防火墙_第7张图片

iptables -t nat -A PREROUTING -i eth0 -d 218.29.30.31 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.6
    #检查eth0网卡的数据包,在路由前,检查如果以218.29.30.31为目标地址,80为目标端口,则将目的地址改为192.168.1.6

iptables -t nat -A PREROUTING -i eth0 -d 218.29.30.31 -p tcp --dport 2346 -j DNAT --to-destination 192.168.1.6:22
    #检查eth0网卡的数据包,在路由前,检查如果以218.29.30.31为目标地址,2346为目标端口,则将目的地址改为192.168.1.6:22端口

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 3128
    #检查路由前的tcp数据包,目标端口为80的请求,将该请求转发到本机的3128端口

iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination  111.111.111.20:3128
    #检查路由前的tcp数据包,目标端口为80的请求,将该请求的目的地址和端口改为111.111.111.20:3128

你可能感兴趣的:(网络集群,linux,服务器,网络,运维)