iptables总结

iptables:位于/sbin/iptables,是用来管理防火墙的命令工具


      包过滤防火墙,工作在网络层




一.规则链:规则链是防火墙规则/策略的集合


INPUT:处理入站数据包


OUTPUT:处理出站数据包


FORWARD:处理转发数据包


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


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




二.规则表:规则表是规则链的集合(优先顺序:rawmanglenatfilter


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


mangle表:为数据包设置标记(PREROUNTINGPOSTROUTINGINPUTOUPUTFORWARD)


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


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


规则链间的匹配顺序


入站数据:PREROUTINGINPUT


出站数据:OUTPUTPOSTROUTING


转发数据:PREROUTINGFORWARDPOSTROUTING




iptables命令的语法格式


iptables [-t 表名] 管理选项 [链名] [条件匹配] [-j 目标动作或跳转]


注意:不指定表名时,默认表示filter


不指定链名时,默认表示该表内所有链


除非设置规则链的缺省策略,否则需要指定匹配条件




四.命令选项


-A:在指定链的末尾添加(--apped一条新的规则(注意与-I的插入位置区别


-D:删除(--delete指定链中的某一条规则,按规则序号或内容确定要删除的规则


-I在指定链中插入(--insert一条新的规则,若未指定插入位置,则默认在链的开头插入


-R:修改、替换(--replace指定链的某一条规则按规则序号或内容确定要替换的规则


-L:列出(--list指定链中所有的规则进行查看,若未指定链名,则列出表中所有链的内容


-F:清空(--flush指定链中的所有规则,若未指定链名,则清空表中的所有链的内容


-N:新建(--new-chain一条用户自己定义的规则链


-X:删除指定表中用户自定义的规则链


-P设置指定链的默认策略(--policy


-n使用数字形式(--numeric显示输出结果


-v查看规则列表时显示详细(--verbose的信


-V查看iptables命令工具的版本(--version信息


-h查看命令帮助信息(--help


--line-numbers查看规则表时,同时显示规则在链中的顺序号




五.通用(general)条件匹配


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


包括网络协议、IP地址、网络接口等匹配方式


1.协议匹配


使用-p 协议名”的形式


协议名可使用在“/etc/protocols”文件中定义的名称


常用的协议包括tcpudpicmp


例:拒绝进入防火墙的所有icmp协议的数据包


iptables -I INPUT -p icmp -j REJECT




2.地址匹配


使用“-s源地址(--source-d 目标地址(--destination”的形式


地址可以是单个IP地址、网络地址(带掩码长度)


例:拒绝转发来自192.168.1.11主机的数据


iptables -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 -p tcp --dport 22 -s 202.13.0.0/16 -j ACCEPT


 iptables -A INPUT -p tcp --dport 22 -j DROP




2.TCP标记匹配


使用“--tcp-flags 检查范围 被设置的标记”的形式


如“--tcp-flags SYN,RST,ACK SYN”表示检查SYNRSTACK3个标记,只有SYN1时满足条件


例:拒绝从外网接口(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-RequestEcho-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端口202125110以及被动模式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.99TCP数据包


 iptables -A FORWARD -p tcp -m iprange --src-range 192.168.1.20-192.168.1.99 -j DROP




4.数据包状态匹配


使用“-m state”结合“--state 状态类型”的形式


同时表示多种状态时以逗号“,”分隔


常见的数据包状态包括:NEWESTABLISHEDRELATED


例:拒绝访问防火墙的新数据包,但允许响应连接或与已有连接相关的数据包


 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策略的防火墙规则


规则示例:


214449890.png

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,则外网接口名称通常为 ppp0ppp1


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策略的防火墙规则


规则示例:


214543804.png


iptables -t nat -A PREROUTING -i eth0 -d 218.29.30.31 -p tcp --dport 80 -j DNAT--to-destination 192.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)重启系统生效

 
  
  1. 开启: chkconfig iptables on  

  2. 关闭: chkconfig iptables off  

2.Linux防火墙(Iptables) 即时生效,重启后失效

 
  
  1. 开启: service iptables start  

  2. 关闭: service iptables stop



你可能感兴趣的:(iptables,SNAT,DNAT)