• iptables从入门到精通


    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
    如图:

    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
  • 相关阅读:
    二维码在短信业务应用的初步构思
    Twproject Gantt开源甘特图功能扩展
    vscode 1.5安装体验
    OpenLiveWriter代码插件
    golang语言构造函数
    WebAPI接口返回ArrayList包含Dictionary对象正确解析
    golang枚举类型
    Gatekeeper Pattern 把关(守门人)模式
    .NET Core Windows环境安装与体验
    Federated Identity Pattern 联合身份模式
  • 原文地址:https://www.cnblogs.com/lindafu/p/4692720.html
Copyright © 2020-2023  润新知