iptables防火墙CentOS6:serviceiptables{start|stop|restart|status}start:读取事先保存的规则,并应用到netfilter上stop:清空netfilter上的规则,以及还原默认策略等status:显示生效的规则restart:清空netfilter上的规则,再读取事先保存的规则,并应用到netfilter上;CentOS7:systemctlstart|status|stop|restart|disablefirewalld.service装完系统一定最好关掉,禁止开机启动,用iptables管理,这个太麻烦最后启动的脚本/etc/rc.d/rc.local[root@yph7~]#iptables-Nmychain添加链[root@yph7~]#iptables-L–n查看[root@yph7~]#iptables-Xmychain删除链-F:默认清空整张表的所有链清空nat表的prerouting链[root@yph7~]#iptables-tnat-FPREROUTING禁止访问,用filter表,IP为网段的话用172.16.0.0/16[root@yph7~]#iptables-tfilter-AINPUT-s172.16.59.20-d172.16.59.10-jDROP[root@yph7~]#iptables-tfilter-L-n[root@yph7~]#iptables-tfilter-L-n--line-numbers-vChainINPUT(policyACCEPT293packets,22875bytes)numpktsbytestargetprotoptinoutsourcedestination100DROPall--**172.16.59.20172.16.59.10policyACCEPT:表示默认就算不指明也是允许的num:规则编号pkts:规则匹配到的报文个数bytes:所有报文大小target:处理动作prot:协议opt:选项in:从哪个网卡进来out:从哪个网卡出去source:源IPdestination:目的地[root@yph7~]#watch-n1'iptables-tfilter-L-n-v'然后拿172.16.59.20主机ping此主机,会发现pkts一直增加[root@y7-2~]#hping--faster172.16.59.10修改链,修改序列号为1的链为:[root@yph7~]#iptables-tfilter-RINPUT1-s172.16.59.20-d172.16.59.10-picmp-jREJECT只拒收来自172.16.59.20的IP的icmp协议,但tcp协议正常功能:filter:过滤,防火墙;nat:networdaddresstranslation:用于修改源IP或目标IP,也可以改端口mangle:拆解报文,作出修改,并重新封装raw:关闭nat表上启用的连接追踪功能功能--链raw:PREROUTINGOUTPUTmangle:PREROUTINGINPUTFORWARDOUTPUTPOSTROUTINGnat:PREROUTING[INPUT]OUTPUTPOSTROUTINGfilter:INPUTFORWARDOUTPUT链---功能PREROUTING:rawmanglenatINPUT:manglefilterFORWARD:manglefilterOUTPUT:rawmanglenatfilterPOSTROUTING:manglenat报文流向:流入本机:PREROUTING--INPUT由本机流出:OUTPUT--POSTROUTING转发:PREROUTING--FORWARD--POSTROUTING添加规则时的考量点1、要实现的功能:判断添加到哪张表上2、报文流经的路径:判断添加到哪条链上链上的规则次序,即为检查次序;1、同类规则(访问同一应用),匹配范围小的放上面2、不同类的规则(访问不同应用),匹配到的报文频率较大的放在上面3、将那些可由一条规则描述的多个规则合并起来4、设置默认策略-ttable:raw,mangle,nat,[filter]为默认COMMAND:链管理:-N:new,自定义一条新规则连-X:delete,删除自定义规则连-P:policy,设置默认策略;对filter表中的链而言,默认策略有ACCEPT:接受DROP:丢弃REJECT:拒绝-E:重命名自定义链,引用计数不为0时自定义链不能被重命名,也不能被删除规则管理:-A:append,追加-I:insert,插入要指明位置-D:delete,删除,1、指明规则序号2、指明规则本身-R:replace,替换链上的指定规则-F:flush,清空指定的规则表-Z:zero,置零iptables的每条规则都有两个计数器1、匹配到的报文的个数2、匹配到的所欲的报文的大小之和查看:-L:list,列出指定链上的所有规则-n:numberic,以数字格式显示地址和端口,不要反解-v:verbose,显示详细信息-vv,显示更详细的信息--line-numbers:显示规则序列号-x:exactly,显示计数器结果的精确值处理动作:-jtargentname[per-target-options]ACCEPTDROPREJECTRETURN:返回调用链REDIRECT:端口重定向LOG:记录日志MARK:做防火墙标记DNAT:目标地址转换SNAT:源地址转换MASQUERADE:地址伪装chain:基本匹配条件:无需加载任何模块,由iptables/netfilter自行提供;[!]-s,--sourceaddress[/mask][,...]:检查报文中的源IP地址是否符合此处指定的地址或范围;[!]-d,--destinationaddress[/mask][,...]:检查报文中的目标IP地址是否符合此处指定的地址或范围;[!]-p,--protocolprotocol:tcp,udp,udplite,icmp,icmpv6,esp,ah,sctp,mhorall常用的{tcp|udp|icmp}[!]-i,--in-interfacename:数据报文流入的接口;只能应用于数据报文流入的环节,只能应用于PREROUTING,INPUT和FORWARD链;限制只有指定接口发来的数据才接受,比如只接受内网访问,不接受外网访问,配两个网卡[root@yph7~]#iptables-tfilter-RINPUT1-s172.16.59.20-d172.16.59.10-picmp-ieno16777736-jDROP[!]-o,--out-interfacename:数据报文流出的接口;只能应用于数据报文流出的环节,只能应用于FORWARD、OUTPUT和POSTROUTING链;扩展匹配条件:需要加载扩展模块,方可生效;隐式扩展:不需要手动加载扩展模块;因为它们是对协议的扩展,所以,但凡使用-p指明了协议,就表示已经指明了要扩展的模块;tcp:[!]--source-port,--sportport[:port]:匹配报文的源端口;可以是端口范围;[!]--destination-port,--dportport[:port]:匹配报文的目标端口;可以是端口范围;限制tcp的22端口连接。[root@yph7~]#iptables-tfilter-AINPUT-s172.16.59.20-d172.16.59.10-ptcp--dport22-jDROP[!]--tcp-flagsmaskcompmask:标志位。theflagswhichweshouldexamine,writtenasacomma-separatedlist,例如SYN,ACK,FIN,RSTcomp:必须唯一的标志位acomma-separatedlistofflagswhichmustbeset,例如SYN例如:“--tcp-flagsSYN,ACK,FIN,RSTSYN”表示,要检查的标志位为SYN,ACK,FIN,RST四个,其中SYN(tcp第一次握手)必须为1,余下的必须为0;--tcp-flagsALLALL;全为1。--tcp-flagsALLNONE,全为0[!]--syn:用于匹配第一次握手,相当于”--tcp-flagsSYN,ACK,FIN,RSTSYN“;udp[!]--source-port,--sportport[:port]:匹配报文的源端口;可以是端口范围;[!]--destination-port,--dportport[:port]:匹配报文的目标端口;可以是端口范围;icmp[!]--icmp-type{type[/code]|typename}echo-request:8。ping别人时,类型为echo-request,代码为8echo-reply:0。响应类型及代码,禁止别人ping自己:[root@yph7~]#iptables-AINPUT-d172.16.59.10-picmp--icmp-type8-jDROP显式扩展:必须要手动加载扩展模块,[-mmatchname[per-match-options]];必须显式地指明使用的扩展模块进行的扩展使用帮助:CentOS6:maniptablesCentOS7:maniptables-extensions1、multiport扩展以离散方式定义多端口匹配;最多指定15个端口;[!]--source-ports,--sportsport[,port|,port:port]...:指定多个源端口;可以离散和连续混用[!]--destination-ports,--dportsport[,port|,port:port]...:指定多个目标端口;[!]--portsport[,port|,port:port]...:指明多个端口;源和目标端口~]#iptables-AINPUT-s172.16.0.0/16-d172.16.100.67-ptcp-mmultiport--dports22,80-jACCEPT如果target为DROP,会把自己据掉线。为了防止掉线,可以做个周期性任务,指定在30分钟后恢复原来的列表。2、iprange扩展指明连续的(但一般不脑整个网络)ip地址范围;[!]--src-rangefrom[-to]:源IP地址;离散用逗号隔开,连续用“-”[!]--dst-rangefrom[-to]:目标IP地址;~]#iptables-AINPUT-d172.16.100.67-ptcp--dport80-miprange--src-range172.16.100.5-172.16.100.10-jDROP3、string扩展对报文中的应用层数据做字符串模式匹配检测;--algo{bm|kmp}:字符串匹配检测算法;bm:Boyer-Moorekmp:Knuth-Pratt-Morris[!]--stringpattern:要检测的字符串模式;[!]--hex-stringpattern:要检测的字符串模式,16进制格式;~]#iptables-AOUTPUT-s172.16.100.67-d172.16.0.0/16-ptcp--sport80-mstring--algobm--stringgay-jREJECT4、time扩展根据将报文到达的时间与指定的时间范围进行匹配;--datestartYYYY[-MM[-DD[Thh[:mm[:ss]]]]]--datestopYYYY[-MM[-DD[Thh[:mm[:ss]]]]]--timestarthh:mm[:ss]每天的哪个时间--timestophh:mm[:ss][!]--monthdaysday[,day...]每月[