zoukankan      html  css  js  c++  java
  • iptables从入门到精通

    一.主要知识点:

    1. Iptables表链结构
    2. 数据包过滤流程
    3. Iptables书写规则
    4. Iptables条件匹配
    5. Iptables数据包控制
    6. Iptables七层过滤
    7. Iptables脚本
    二.具体的知识点介绍
    1. Iptables表链结构
    1)默认的4个规则表
    *         raw表:确定是否对该数据包进行状态跟踪
    *         mangle表:为数据包设置标记
    *         nat表:修改数据包中的源、目标IP地址或端口
    *         filter表:确定是否放行该数据包(过滤)
    2)默认的5种规则链
    *         INPUT:处理入站数据包
    *         OUTPUT:处理出站数据包
    *         FORWARD:处理转发数据包
    *         POSTROUTING链:在进行路由选择后处理数据包
    *         PREROUTING链:在进行路由选择前处理数据包
    2. 数据包过滤流程
    规则表间的优先顺序
    *         依次为:raw à mangle à nat à filter
    规则链间的匹配顺序
    *         入站数据:PREROUTING à INPUT
    *         出站数据:OUTPUT à POSTROUTING
    *         转发数据:PREROUTING à FORWARD à POSTROUTING
    如图:
    1707011866
    3. Iptables书写规则
    iptables命令的语法格式
    *         iptables [-t 表名] 管理选项 [链名] [条件匹配] [-j 目标动作或跳转]
    几个注意事项
    *         不指定表名时,默认表示filter表
    *         不指定链名时,默认表示该表内所有链
    *         除非设置规则链的缺省策略,否则需要指定匹配条件
    清除规则
    *         -D:删除指定位置或内容的规则
    *         -F:清空规则链内的所有规则
    *         -Z:清空计数器
    自定义规则链
    *         -N:创建一条新的规则链
    *         -X:删除自定义的规则链
    其他
    *         -h:查看iptables命令的使用帮助
    例如:
    [root@localhost ~]# iptables -t filter -A INPUT -p tcp -j ACCEPT
    [root@localhost ~]# iptables -I INPUT -p udp -j ACCEPT
    [root@localhost ~]# iptables -I INPUT 2 -p icmp -j ACCEPT
    [root@localhost ~]# iptables -P INPUT DROP
    [root@localhost ~]# iptables -L INPUT --line-numbers
    Chain INPUT (policy DROP)
    num target     prot opt source               destination
    1    ACCEPT     udp -- anywhere             anywhere
    2    ACCEPT     icmp -- anywhere             anywhere
    3    ACCEPT     tcp -- anywhere             anywhere
     
    4. Iptables条件匹配
    1)通用条件匹配
    协议匹配
    *         使用“-p 协议名”的形式
    *         协议名可使用在“/etc/protocols”文件中定义的名称
    *         常用的协议包括tcp、udp、icmp等
    地址匹配
    *         使用“-s 源地址”、 “-d 目标地址”的形式
    *         地址可以是单个IP地址、网络地址(带掩码长度)
    接口匹配
    *         使用“-i 网络接口名”、 “-o 网络接口名”的形式,分别对应接收、发送数据包的网络接口
    例如:
    [root@localhost ~]# iptables -I INPUT -p icmp -j REJECT
    [root@localhost ~]# iptables -A FORWARD -p ! icmp -j ACCEPT
    [root@localhost ~]# iptables -A FORWARD -s 192.168.1.11 -j REJECT
    [root@localhost ~]# iptables -A INPUT -i eth1 -s 172.16.0.0/12 -j DROP
    [root@localhost ~]# iptables -A FORWARD -o eth1 -d 61.35.4.3 -j DROP
    2)Iptables隐含条件匹配
    端口匹配
    *         使用“--sport 源端口”、“--dport 目标端口”的形式
    *         采用“端口1:端口2”的形式可以指定一个范围的端口
    TCP标记匹配
    *         使用“--tcp-flags 检查范围  被设置的标记”的形式
    *         如“--tcp-flags SYN,RST,ACK SYN”表示检查SYN、RST、ACK这3个标记,只有SYN为1时满足条件
    ICMP类型匹配
    *         使用“--icmp-type ICMP类型”的形式
    *         ICMP类型可以使用类型字符串或者对应的数值,例如Echo-Request、Echo-Reply
    例如:
    [root@localhost ~]# iptables -A FORWARD -p tcp --dport 22 -j ACCEPT
    [root@localhost ~]# iptables -A OUTPUT -p tcp --sport 20:80 -j ACCEPT
    [root@localhost ~]# iptables -I INPUT -i eth1 -p tcp --tcp-flags SYN,RST,ACK SYN -j REJECT
    [root@localhost ~]# iptables -A INPUT -i eth0 -p icmp --icmp-type Echo-Request -j DROP
    [root@localhost ~]# iptables -A INPUT -p icmp --icmp-type Echo-Reply -j ACCEPT
    3)Iptables扩展条件匹配
    MAC地址匹配
    *         使用“-m mac”结合“--mac-source MAC地址”的形式
    多端口匹配
    *         使用“-m multiport”结合“--sports 源端口列表”或者“--dports 目标端口列表”的形式
    *         多个端口之间使用逗号“,”分隔,连续的端口也可以使用冒号“:”分隔
    IP地址范围匹配
    *         使用“-m iprange”结合“--src-range 源IP范围”或者“--dst-range 目标IP范围” 的形式
    *         以“-”符号连接起始IP地址、结束IP地址
    例如:
    [root@localhost ~]# iptables -A FORWARD -m mac --mac-source 00:0C:29:27:55:3F -j DROP
    [root@localhost ~]# iptables -A INPUT -p tcp -m multiport --dport 20,21,25,110,1250:1280 -j ACCEPT
    [root@localhost ~]# iptables -A FORWARD -p tcp -m iprange --src-range 192.168.1.20-192.168.1.99 -j DROP
    5. Iptables数据包控制
    常见的数据包处理方式
    *         ACCEPT:放行数据包
    *         DROP:丢弃数据包
    *         REJECT:拒绝数据包
    *         LOG:记录日志信息,并传递给下一条规则处理
    *         用户自定义链名:传递给自定义链内的规则进行处理
    *         SNAT:修改数据包的源地址信息
    *         DNAT:修改数据包的目标地址信息
    [root@localhost ~]# iptables -A INPUT -p tcp --dport 22 -m limit --limit   3/minute --limit-burst 8 -j LOG
    [root@localhost ~]# iptables -A INPUT -p tcp --dport 22 -j DROP
    [root@localhost ~]# iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT   --to-source 218.29.30.31
    [root@localhost ~]# iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
    [root@localhost ~]#iptables -t nat -A PREROUTING -i eth0 -d 218.29.30.31 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.6(:80)
    6. Iptables七层过滤
    1). 整体实现过程
    *         添加内核补丁,重新编译内核,并以新内核引导系统
    *         添加iptables补丁,重新编译安装iptables
    *         安装l7-protocols协议定义包
    *         使用iptables命令设置应用层过滤规则
    2). 使用的软件包列表
    *         Linux内核源码包:linux-2.6.28.8.tar.bz2
    *         iptables源码包:iptables-1.4.2.tar.bz2
    *         layer7补丁源码包:netfilter-layer7-v2.21.tar.gz
    *         协议定义包:l7-protocols-2009-05-10.tar.gz
    3). layer7应用层协议匹配
    *         匹配格式:-m layer7 --l7proto 协议名
    *         支持以下常见应用层协议的过滤
    *          qq:腾讯公司QQ程序的通讯协议
    *          msnmessenger:微软公司MSN程序的通讯协议
    *          msn-filetransfer:MSN程序的文件传输协议
    *          bittorrent:BT下载类软件使用的通讯协议
    *          xunlei:迅雷下载工具使用的通讯协议
    *          edonkey:电驴下载工具使用的通讯协议
    *         其他各种应用层协议:ftp、http、dns、imap、pop3……
    4). 规则示例:过滤使用qq协议的转发数据包
    *          iptables -A FORWARD -m layer7 --l7proto qq -j DROP
     
    7. Iptables脚本
    防火墙脚本的一般结构
    1).设置网段、网卡、IP地址等变量
    2).加载包过滤相关的内核模块
    *          FTP相关:ip_nat_ftp、ip_conntrack_ftp
    3).确认开启路由转发功能
    *          方法1:/sbin/sysctl -w net.ipv4.ip_forward=1
    *          方法2:echo 1 > /proc/sys/net/ipv4/ip_forward
    *          方法3:修改/etc/sysctl.conf,设置 net.ipv4.ip_forward = 1
    4).用于添加的具体防火墙规则内容
    *          清空原有规则,建立新的规则
    例如:
    /sbin/modprobe ip_tables
    /sbin/modprobe ip_nat_ftp
    iptables -F
    iptables -X
    iptables -Z
    #------------------------default rule ------------------------------
    iptables -P INPUT DROP
    iptables -P OUTPUT DROP
    iptables -P FORWARD DROP
    #------------------------limit packet per second------------------------------
    /sbin/iptables -A INPUT -f -m limit --limit 100/sec --limit-burst 100 -j ACCEPT
    /sbin/iptables -A INPUT -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -m limit --limit 20/sec --limit-burst 200 -j ACCEPT
    /sbin/iptables -A INPUT -p icmp -m limit --limit 12/min --limit-burst 2 -j DROP
    #------------------------ssh rule -------------------------------------------
    iptables -t filter -A   INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
    iptables -t filter -A OUTPUT -o eth0 -p tcp --sport 22 -j ACCEPT
    #------------------------www-ftp-mail-dns rule --------------------------------
    iptables -t filter -A   INPUT -i   eth0 -p tcp --dport 80     -j ACCEPT
    iptables -t filter -A   OUTPUT -o eth0 -p tcp --sport 80     -j ACCEPT
    #-------------------------ICMP rule ------------------------------------------
    iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
    iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
    iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
    iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT
  • 相关阅读:
    [Luogu P3626] [APIO2009] 会议中心
    杭电 1869 六度分离 (求每两个节点间的距离)
    杭电 1874 畅通工程续 (求某节点到某节点的最短路径)
    最短路径模板
    杭电 2544 最短路径
    POJ 1287 Networking (最小生成树模板题)
    NYOJ 1875 畅通工程再续 (无节点间距离求最小生成树)
    POJ 2485 Highways (求最小生成树中最大的边)
    杭电 1233 还是畅通工程 (最小生成树)
    杭电 1863 畅通工程 (最小生成树)
  • 原文地址:https://www.cnblogs.com/51reboot/p/4005540.html
Copyright © 2011-2022 走看看