Linux网络安全之iptables 详解 |
一.基本架构 在Linux的内核中使用netfilter架构实现防火墙功能,iptables只不过是Linux为netfilter提供的管理工具,用于实现对Linux内核中网络防火墙的管控。 iptables服务启动脚本:/etc/rc.d/init.d/iptables iptables的配置文件:/etc/sysconfig/iptables-config iptables的策略配置文件:/etc/sysconfig/iptables iptables服务的启动关闭:service iptables start/stop
二.iptables缺省的五条规则链: 四.iptables的基本命令 iptables -t tables -L INPUT -s source_ip -p tcp|udp|icmp –dport -j ACCEPT|DROP|REJECT 应用实例: iptables是用来管理防火墙的命令工具包过滤防火墙,工作在网络层。大体常用的规则总结如下: -A INPUT -s 1.2.3.4 -p tcp -m tcp –dport 80 -j drop 封进来的包 s源 input入站 -p指定协议 -A OUTPUT -d 1.2.3.4 -p tcp -m tcp –dport 80 -j drop 封出去发包 d目标 output出站 一.规则链:规则链是防火墙规则/策略的集合 INPUT:处理入站数据包 OUTPUT:处理出站数据包 FORWARD:处理转发数据包 POSTROUTING链:在进行路由选择后处理数据包 PREROUTING链:在进行路由选择前处理数据包 二.规则表:规则表是规则链的集合(优先顺序:raw、mangle、nat、filter) raw表:确定是否对该数据包进行状态跟踪(OUTPUT、PREROUTING) mangle表:为数据包设置标记(PREROUNTING、POSTROUTING、INPUT、OUPUT、FORWARD) nat表:修改数据包中的源、目标IP地址或端口(PREROUTING、POSTROUTIN、OUTPUT) filter表:确定是否放行该数据包(过滤)(INPUT FOREARD、OUTPUT) 规则链间的匹配顺序 入站数据:PREROUTING、INPUT 出站数据:OUTPUT、POSTROUTING 转发数据:PREROUTING、FORWARD、POSTROUTING 三iptables命令的语法格式 iptables [-t 表名] 管理选项 [链名] [条件匹配] [-j 目?动作或跳转] 注意:不指定表名时,默认表示filter表 不指定链名时,默认表示该表内所有链 除非设置规则链的缺省策略,否则需要指定匹配条件 四.命令选项 -A:在指定链的末尾添加(–apped)一条新的规则(注意与-I的插入位置区别) -L:列出(–list)指定链中所有的规则进行查看,若未指定链名,则列出表中所有链的内容 -X:删除指定表中用户自定义的规则链 –line-numbers:查看规则表时,同时显示规则在链中的顺序号 五.通用(general)条件匹配 可直接使用,不依赖于其他的条件或扩展模块 包括网络协议、IP地址、网络接口等匹配方式 1.协议匹配 使用“-p 协议名”的形式 协议名可使用在“/etc/protocols”文件中定义的名称 常用的协议包括tcp、udp、icmp等 例:拒绝进入防火墙的所有icmp协议的数据包 iptables -I INPUT -p icmp -j REJECT 2.地址匹配 使用“-s源地址(–source)”、“-d 目标地址(–destination)”的形式 地址可以是单个IP地址、网络地址(带掩码长度) 例:拒绝转发来自192.168.1.11主机的数据 itables -A FORWARD -s 192.168.1.11 -j REJECT 3.网络端口匹配 使用“-i 网络接口名 (–in-interface)”、 “-o 网络接口名(–out-interface)”的形式,分别对应接收、发送数据包的网络接口 例:丢弃10.20.30.0/24网段,并在2小时后解封 iptables -I INPUT -s 10.20.30.0/24 -j REJECT iptables -I FORWARD -s 10.20.30.0/24 -j DROP at now +2 hours at > iptables -D INPUT 1 at > iptables -D FORWARD 1 (crtl + D 结束) 六.隐含(implicit)条件匹配 1.端口匹配 使用“–sport 源端口”、“–dport 目标端口”的形式 采用“端口1:端口2”的形式可以指定一个范围的端口 例:仅允许管理员从202.13.0.0/16使用ssh iptables -A INPUT 118.114.245.37 -p tcp 22000 -s -j ACCEPT iptables -A INPUT -p tcp 22000 -j DROP 2.TCP标记匹配 使用“–tcp-flags 检查范围 被设置的标记”的形式 如“–tcp-flags SYN,RST,ACK SYN”表示检查SYN、RST、ACK这3个标记,只有SYN为1时满足条件 例:拒绝从外网接口(eth1)直接访问防火墙备机的数据包,但是允许响应防火墙TCP请 求的数据包进入 iptables -P INPUT DROP iptables -I INPUT -i eth1 -p tcp –tcp-flags SYN, RST, ACK SYN -j REJECT iptables -I INPUT -i eth1 -p tcp –tcp-flags !–syn -j ACCEPT (–syn的用法为兼容旧版本iptables的形式,此处等于–tcp-flags SYN, RST, ACK SYN) 3.ICMP类型匹配 使用“–icmp-type ICMP类型”的形式 ICMP类型可以使用类型字符串或者对应的数值,例如Echo-Request、Echo-Reply 例:禁止其他主机ping防火墙主机,但是允许从防火墙上ping其他主机(允许接收ICMP 回应数据) iptables -A INPUT -p icmp –icmp-type Echo-Request -j DROP iptables -A INPUT -p icmp –icmp-type Echo-Reply -j ACCEPT iptables -A INPUT -p icmp –icmp-type destination-Unreachable -j ACCEPT 七.显示条件匹配 1.MAC地址匹配 使用“-m mac”结合“–mac-source MAC地址”的形式 例:禁止转发来自MAC地址为00:0C:29:27:55:3F的主机的数据包 iptables -A FORWARD -m mac –mac-source 00:0C:29:27:55:3F -j DROP 2.多端口匹配 使用“-m multiport”结合“–sports 源端口列表”或者“–dports 目标端口列表”的形式 多个端口之间使用逗号“,”分隔,连续的端口也可以使用冒号“:”分隔 例:允许防火墙本机对外开放TCP端口20、21、25、110以及被动模式FTP端口1250-1280 iptables -A INPUT -p tcp -m multiport –dport 20,21,25,110,1250:1280 -j ACCEPT 3.IP地址范围匹配 使用“-m iprange”结合“–src-range 源IP范围”或者“–dst-range 目标IP范围” 的形式 以“-”符号连接起始IP地址、结束IP地址 例:禁止转发源IP地址为192.168.1.20~192.168.1.99的TCP数据包 iptables -A FORWARD -p tcp -m iprange –src-range 192.168.1.20-192.168.1.99 -j DROP 4.数据包状态匹配 使用“-m state”结合“–state 状态类型”的形式 同时表示多种状态时以逗号“,”分隔 常见的数据包状态包括:NEW、ESTABLISHED、RELATED 例:拒绝访问防火墙的新数据包,但允许响应连接或与已有连接相关的数据包 iptables -A INPUT -p tcp -m state –state NEW -j DROP iptables -A INPUT -p tcp -m state –state ESTABLISHED,RELATED -j ACCEPT 八.数据包控制 常见的数据包处理方式 ACCEPT:放行数据包 DROP:丢弃数据包,不给出任何回应信息 REJECT:拒绝数据包,必要时会给数据发送端一个响应信息 LOG:记录日志信息,并传递给下一条规则处理 用户自定义链名:传递给自定义链内的规则进行处理 SNAT:修改数据包的源地址信息 DNAT:修改数据包的目标地址信息 九.导入、导出防火墙规则 导出规则 iptables-save 结合重定向输出“>”符号保存规则信息 导入规则 iptables-restore 结合重定向输入“<”符号恢复规则信息 十.SNAT策略 SNAT策略的典型应用环境 局域网主机共享单个公网IP地址接入Internet SNAT策略的原理 源地址转换,Source Network Address Translation 修改数据包的源IP地址 前提条件 局域网各主机正确设置IP地址/子网掩码 局域网各主机正确设置默认网关地址 推荐实现步骤 1. 开启网关主机的路由转发功能 2. 添加使用SNAT策略的防火墙规则
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0-j SNAT –to-source 218.29.30.31 (在路由选择之后进行处理,-s 特定局域网,-o需要从接口eth0外出的数据包–to-source 218.29.30.31网关主机外网?ip地址) 十一.MASQUERADE(地址伪装)策略 只需将 “-j SNAT –to-source 218.29.30.31”的形式改为“-j MASQUERADE”即可 如果是通过ADSL拨号方式连接Internet,则外网接口名称通常为 ppp0、ppp1等 MASQUERADE策略应用示例 iptables -t nat -A POSTROUTING -s 192.168.1.0/24-o ppp0 -j MASQUERADE 十二.DNAT策略 DNAT策略的典型应用环境 在Internet中发布位于企业局域网内的服务器 DNAT策略的原理 目标地址转换,Destination Network Address Translation 修改数据包的目标IP地址 前提条件 局域网的Web服务器正确设置了IP地址/子网掩码 局域网的Web服务器正确设置了默认网关地址 推荐实现步骤 1. 确认已开启网关的路由转发功能 2. 添加使用DNAT策略的防火墙规则 规则示例: iptables -t nat -A PREROUTING -i eth0 -d 218.29.30.31 -p tcp –dport 80 -j DNAT–to-destination192.168.1.6 (在路由选择之前进行处理,-i 外网接口进入的数据包,-d访问网关的公网ip地址的数据包,-dport访问标准Web服务端口的数据包,–to-destination内网中Web服务器的实际IP地址) 通过DNAT策略同时修改目标端口号 使用形式 只需要在“–to-destination”后的目标IP地址后面增加“:端口号”即可,即: -j DNAT –to-destination 目标IP:目标端口 通过DNAT策略修改目标端口号的应用示例 从Internet中访问网关主机(218.29.30.31)的 2222 端口时,实际由运行在局域网主机(192.168.1.5)的 22 端口的应用程序提供服务 iptables -t nat -A PREROUTING -i eth0 -d 218.29.30.31 -p tcp –dport 2222 -j DNAT –to-destination 192.168.1.5:22 十三.iptables的开启和关闭 1. Linux?火墙(Iptables)重启系统生效
2.Linux防火墙(Iptables) 即时生效,重启后失效
|