防火墙iptables简析(规则才是本体)例题展示!复习初学必备良药!

一、简介

    iptables是可以实现netfilter框架的一个命令,通过调用syscall使内核空间的防火墙规则和用户空间交互。

    配置文件    /etc/sysconfig/iptables-config

            /etc/sysconfig/iptables

二、四表五链模型

wKiom1Wt-dPTJdiZAAFL_daPQwM493.jpg

【结合不同的扩展】iptables可以针对OSI二、三、四、七层进行报文进行规则匹配

    iptables四表:filter(default)、nat、mangle、raw

        五链:INPUT OUTPUT FORWARD PREROUTING POSTROUTING.(亦可以自定义链)

        四表处理优先级:raw mangle nat filter

【各个表在链上的功能实现如图】

wKioL1Wt__zR1iLNAAJ-2kCJx8U853.jpg

三、iptables命令简介

  iptables [-t tables] COMMAND CHAIN [NUM] 匹配标准 -j 处理办法

    -t 指定表类型

    COMMAND:

       1>.管理规则

        -A 附加一条规则(默认添加在链的尾部)

        -I CHAIN [NUM] 插入一条规则,插入到对应的第num条

        -D CHAIN [NUM] 删除指定链中的第num条规则

        -R CHAIN [NUM] 替换第num条规则

       2>.管理链

        -F [CHAIN] 清空指定规则链,若省略则清空表中所有链

        -P CHAIN 设定指定连的默认策略(例1)

        -N <CHAIN_NAME> 自定义一个新链

        -X <CHAIN_NAME> 删除一个自定义空链

        -Z 置零指定连中所有规则的计数器(计数器记录被匹配的报文个数个大小之和)

        -E old_chain_name new_chain_name 重命名自定义链

       3>.查看类

        -L 显示指定表中的规则

        -n 以数字格式显示主机地址和端口号

        -v 显示详细的规则

    匹配标准:

        1>.通用匹配

          -s --src 指定源IP

          -d --dst 指定目的IP

          -p {tcp|udp|icmp}

          -i INTERFACE 指定数据报文流入的接口(例2)

            可用于定义的链:PREROUTING,INPUT,FORWARD

          -o INTERFACE 指定输入报文流入的接口

            可用于定义的链:OUTPUT,POSTROUTING,FORWARD

        2>.扩展匹配

          -p tcp

            --sport PORT[-PORT] 源端口(例3)

            --dport PORT[-PORT] 目的端口

            --tcp-flags mark comp 检查mark指定的标志位(例4)

          -p icmp

            --icmp-type(例5)

              0: echo-reply

              8: echo-request 

          -p udp

            --sport

            --dport

          -m state --state 状态扩展(NEW,ESTABLIESHED,INVALID,RELATED)(例子6

             RELATED专门为ftp设计()并且要生效必须装载ip_conntrack_ftp ip_nat_ftp模块(例11)

          -m multiport 离散多端口匹配

            --source-ports

            --destination-ports

            --portse(例子7)

          -m iprange 范围

            --src-range

            --dst-range(例子8)

          -m connlimit 连接数限定

            --connlimit-ablove n (例子9)

          -m limite   

            --limit RATE     控制单位时间内可连接的速度(没分钟提供3个连接)

            --limit-burst num   每批连接只能进num个

          -m string (例10)任何服务包含该字符串就屏蔽

            --algo {kmp|bm}

            --string "STRING"

    处理办法:

          -j TARGET

            ACCEPT

            DROP

            REJECT

            SNAT  源地址转换(例13 

            DNAT  目标地址转换(例14

            REDIRECT 重定向

            MASQUERADE 地址伪装例13相当于原地址转换,多用于地址是自动获取的地址)

            LOG 记录日志(例12

            MARK   为报文打标记

用到的命令

iptstate -t 显示连接个数



四、filter表上常用规则

例1:设置iptables默认策略为DROP

#iptables -P INPUT DROP
#iptables -P OUTPUT DROP
#iptables -P FORWARD DROP


例2:放行自己对环回口的ping报文

#iptables -I INPUT -s 127.0.0.1 -d 127.0.0.1 -i lo -j ACCEPT
#iptables -I OUTPUT -s 127.0.0.1 -d 127.0.0.1 -o lo -j ACCEPT


例3:放行192.168.0.0网段对192.168.1.11的ssh服务的访问

#iptables -t filter -A INPUT -s 192.168.0.0/16 -d 192.168.1.11 -p tcp --dport 22 -j ACCEPT
#iptables -t filter -A OUTPUT -s 192.168.1.11 -d 192.168.0.0/16  -p tcp --sport 22 -j ACCEPT


例4:放行所有的syn=1,ack=0,fin=0,rst=0的报文

#iptables -t filter -A INPUT -p tcp --sport --tcp-flags SYN,ACK,FIN,RST SYN -j ACCEPT


例5:允许自己ping其他主机,不允许别人ping自己

#iptables -t filter -A OUTPUT -s 192.168.1.11 -p icmp --icmp-type 8 -j ACCEPT
#iptables -t filter -A INPUT -d 192.168.1.11 -p icmp --icmp-type 0 -j ACCEPT


例6:防止反弹木马攻击web,禁止非响应式连接

    依赖模块 iptables_conntrack(强烈建议关闭)

    /proc/net/ip_conntrack 当前连接的保存位置使用iptstate -t可以查看

    /proc/net/ipv4/ip_conntrack_max 最大的连接个数,如果连接个数超过限制条目,其他的请求一律被丢弃

#iptables -t filter -A INPUT -d 192.168.1.11 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
#iptables -t filter -A OUTPUT -s 192.168.1.11 -p tcp --dport 80 -m state --state ESTABLISHED -j ACCEPT

    上一条也可以这样写

#iptables -t filter -I OUTPUT -s 192.168.1.11 -m state --state ESTABLISHED -j ACCEPT


例7:离散多端口匹配

#iptables -I INPUT 2 -d 192.168.1.11 -p tcp -m multiport --destination-ports 21,22,80 -m state --state NEW -j ACCEPT


例8:IP地址范围匹配

#iptables -t filter -A INPUT -p tcp -m iprange --src-range 192.168.1.5-192.168.1.15 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT


例9:连接数限定(用于限定同一个客户端地址最多允许同时发起多少个请求的),表示不高于8个就允许,多于8个就禁止

#iptables -t filter -A INPUT -d 192.168.1.11 -p --dport 80 -m connlimit ! --connlimit-above 8 -j ACCEPT


例10:任何服务只要包含指定字符串就屏蔽该网页(此处应该注意数据包的流向,在客户端拒绝,拒绝的应该是来自服务器出去的报文)一定做到OUTPUT上

#iptables -t filter -I OUTPUT -s 192.168.1.11 -m string --algo kmp --string "Alex" -j REJECT

例11:允许FTP协议的链接。

    对于ftp等双层协议来说,链接状态有控制链接和数据链接之分,ftp能够通过放行NEW,ESTABLISHED来和对端连接,但是不能够传输数据,必须使用RELATED状态标记该链接,表示允许(或禁止)相关联的数据链接,对此必须先加载ip_conntrack_ftp,和ip_nat_ftp模块。模块加载见:http://blog.csdn.net/zy799894671/article/details/7897872

#iptables -A INPUT -p tcp -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
#iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

允许已经行的请求,已建立和相关的数据包进入

允许已经建立和相关的数据包出去


五、nat表上常用规则(以下地址是192.168.10.X就简写为10.X)

    打开主机的转发功能

    echo 1 > /etc/sys/net/ipv4/ip_forward

    vim /etc/sysctl.conf

      net.ipv4.ip_forward = 1

    sysctl -p 直接生效上面

例12:-j LOG 记录日志

#iptables -t filter -I INPUT 4 -d 192.168.1.11 -p icmp --icmp-type 8 -j LOG --log-prefix "--firewall on icmp-- "

(与DROP,ACCEPT,REJECT同用时,应放置与该操作的上面这里我置于第四条)只要每一个客户端ping我主机就记录该客户端的信息,并且打上"--Firewall on icmp--"标签


例13-j SNAT --to-source 源地址转换

适用场景:(在POSTROUTING上做规则)

wKioL1WyQTShf_TnAAFcQus7k00558.jpg

场景结构:边10.8和10.9通过firewall共享互联网,且使用的是私有地址;防火墙两块网卡,一个(10.10)为内网IP,一个(100.7)为对外公网IP;是互联网。

    假设10.9主机请求100.6,发往100.6,但是回来的时候100.6并不知道10.9在哪里,收不到回复请求。

目的:10.9能请求到100.6并且它能够回复给10.9

实现

#echo 1 > /etc/sys/net/ipv4/ip_forward
#iptbles -t nat -A POSTROUTING -s 192.168.10.0/24 -j SNAT --to-source 172.16.100.7

      打开地址转发功能(也可以编辑/etc/sysctl.conf文件对转发选项置1),编写防火墙源地址转换规则,对所有来自192.168.10.0网段的地址实施源地址转换,转换为172.16.100.7。

注:源地址转换的返回时的目的地址转换是由firewall自动完成的,如果公网是固定IP就用SNAT,如果公网接口采用ppp0或者ppp1的ADSL拨号连接,则将SNAT转换为MASQUERADE即可


例14:-j DNAT --to-destination 目标地址转换

适用场景:(在PREROUTING上做规则)

wKiom1WyTRSTzFCbAAGhPBQBQzA424.jpg

场景结构边我的webserver想发布至公网,但是我只有一个私有地址。间防火墙两块网卡,一个(10.10)为内网网关,一个(100.7)为对外公网IP,开启ip_forward功能;边是互联网。

目的:所有对100.7的web访问都转发至内网的10.9的为webserver上。

实现:

#echo 1 > /etc/sys/nat/ipv4/ip_forward
#iptables -t nat -A PREROUTING -d 172.16.100.7 -p tcp --dport 80 -j DNAT --to-destination 192.168.10.9

注:做目的地址转换的firewall对于某请求的响应报文,其源地址转换是自动完成的。

例15:iptables 命令的保存

#service iptables save
#iptables-save > /etc/iptables/iptables_20150725
#iptables-restore < /etc/iptables/iptables_20150725

<如有错误恳请指正:[email protected]>


你可能感兴趣的:(linux,iptables,related,DNAT,SNAT,防火墙简介)