一: 防火墙:硬件,软件:规则(匹配标准,处理办法) framework: 默认规则: 开放 关闭 规则:匹配标准 ip: 源ip,目的ip tcp: sport dport udp: sport dport icmp: icmp-type 数据报文过滤: openBSD linux2.0 ipfw/Firewall linux2.2 ipchain/firewall linux2.4 iptables/netfilter

hook:钩子函数 prerouting input output forward postrouting 规则链 PRERROUTING INPUT OUTPUT FORWORD POSTROUTING filterr(过滤):表 INPUT OUTPUT FORWORD nat(地址转换):表 PRERROUTING OUTPUT POSTROUTING mangle(拆开,修改,封装):表 PRERROUTING INPUT FORWORD OUTPUT POSTROUTING raw(原始格式):表 PRERROUTING OUTPUT

iptables由四表五链组成 链: INPUT,OUTPUT,FORWORD,PRERROUTING,POSTROUTING 表: filter,nat,raw,mangle filter: INPUT,FORWORD和OUTPUT nat: PRERROUTING(DNAT),OUTPUT,POSTROUTING(SNAT) mangle: PRERROUTING,INPUT,FORWORD,POSTROUTING和OUTPUT raw: PRERROUTING,OUTPUT

netfilter:framework,tcp/ip 命令: 管理规则 -A:附加一条规则,添加在链的尾部. -I CHAIN [num]:插入一条规则,插入为对应CHAIN上的第num条规则. -D CHAIN [num]:删除指定链中的第num条规则. iptables -D INPUT 2 -R CHAIN [num]:替换指定的规则. 管理链 -F [CHAIN]:flash,清空指定规则链,如果省略CHAIN,则可以实现删除对应表中的所有链. -P CHAIN:设定指定链的默认策略(或规则). -N:自动义一个新的空链. -X:删除一个自动义的空链. -Z:清空指定链中所有规则的计数器. -E:重命名自定义的链. 查看类 -L:查看指定表中的规则. -n:以数字格式显示主机地址和端口号. -v:显示详细信息. -vv:显示更详细的信息. -x:显示计数器的精确值. --line-numbers:显示规则号码. 动作(target): ACCEPT(放行) DROP(丢弃) REJECT(拒绝) DNAT(目的地址转换) SNAT(源地址转换) REDIRECT(端口重定向) MASQUERADE(地址伪装的) LOG(记录日志的) MARK(给报文打上标记的)

能否使用自定义链? 可以使用自定义链,但只有在调用时才能发挥作用,而且如果没有自定义链中的任何规则匹配,还应该有返回机制. 用可以删除自动义的空链 默认链无法删除 每个规则都有内置的计数器,一个用来计数被匹配的报文个数,一个用来匹配的报文体积之和.

规则:匹配标准,处理动作 iptables [-t table] command chain [num] 匹配标准 -j 处理办法 -j TARGET ACCEPT:允许接受 DROP:悄悄丢弃 REJECT:丢弃后警告 匹配标准: 基本匹配(普通匹配) -s --src指定源地址 -d , --dst指定目标地址 -p {tcp|udp|icmp}指定协议 -i ethx指定数据报文流入的接口 一般用在prerrouting,input,forward -o ethx指定数据报文流出的接口 一般用在output,postrouting,forward 扩展匹配: -m macth_name --spec_options 例如: -m tcp --dport 22 隐式扩展:不用特别指明由哪个模块进行的扩展,因为此时使用-p{}tcp|udp|icmp} -p tcp --sport:指定源端口 --dport:指定目标端口,可以是一个端口或者多个端口 --tcp-flags SYN,FIN,ACK,RST SYN=--SYN SYN:第一次连接 FIN:断开连接 RST:重置连接 ACK:确认连接 PSH:推送 URG:紧急指定有效 --tcp-flags LIST1 LIST2 : 检查LIST1所指明的标志位,且这其中LIST2所表示出的位必须为1,而余下的必 须为0,没在LIST1中指明的不作检查. --syn:匹配tcp三次握手的第一个报文. -p udp: --sport --dport -p icmp: --icmp-type 可用数字表示类型. 0:echo-reply 别人给予响应 8:echo-request ping别人 显式扩展:必须指明由哪个模块进行的扩展,在iptables中用-m可完成此项功能. 在/lib/iptables/或者/lib64/xtables/下有许多的iptables模块,用来模块化匹配.而用模块匹配的叫扩展匹配,在其中.so前面为大写的是target. 显示扩展:使用额外的匹配机制. -m EXTESTION --spe-opt 1, multiport扩展. 以离散方式定义多端口匹配,但最多十五个端口. [!] --source-ports,--sports port[,port|,port:port]... :指明源端口多个 [!] --destination-ports,--dports port[,port|,port:port]... :指明目的端口多个. [!] --ports port[,port|,port:port]... :又能匹配源又能匹配目标. 2, iprange扩展. 指定连续的IP地址范围时使用,(但一般不能扩展到整个网络). [!] --src-range from[-to]:指明连续的源ip地址范围. [!] --dst-range from[-to]:指明连续的目的ip地址范围. 3, string扩展. 检查报文中出现的字符串. -algo {bm|kmp}:指定检查使用的字符串比对算法,必须选项. bm=Boyer-Moore(人名) kmp=Kauth-Pratt-Morris --from offset:从那里开始检查字符串. --to offset:右侧偏移,即到哪里结束. [!] --string pattern:查找的字符串. [!] --hex-string pattern:使用十六进制编码查找. 4, time扩展. 根据报文到达的时间与指定的时间范围进行匹配. --datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]] --datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]] --timestart hh:mm[:ss] --timestop hh:mm[:ss] [!] --monthdays day[,day...] [!] --weekdays day[,day...] 5, connlimit扩展 根据每客户端ip(也可以是地址快)做并发连接数量匹配. --connlimit-above n:连接的数量大于n. --connlimit-upte n:连接的数量小于等于n. 6, limit扩展 基于收发报文的速率做检查. --limit rate[/second|/minute|/hour|/day]: 最大平均匹配率,例如3/minute,单位有second,minute,hour,day,默认是3/hour --limit-burst number:峰值数量. 7, state扩展 根据连接追踪机制检查连接间的状态,结合ip_conntrack追踪会话的扩展. 调整连接追踪功能所能够容纳的最大连接数量: /proc/sys/net/nf_conntrack_max 已经追踪到并记录下的连接: /proc/net/nf_conntrack 可追踪的连接状态: NEW:新连接的请求,连接追踪模板中不存在此连接的相关条目. ESTABLISHED:NEW状态之后,即已建立的连接. INVALID:无法识别的连接. RELATED:相关的连接,如ftp协议中的命令连接和数据连接之间的关系. -m state --state NEW,ESTABLISHED -j ACCEPT 开放被动连接的ftp服务. ftp使用20,21两个端口,20是数据连接,21是控制连接,并且有两种连接的模式. 主动连接: 在主动模式下,tcp/20端口用于数据传输,tcp/21端口用于控制连接. 被动连接: 在被动连接下,tcp/21用于控制连接,>1023的随机端口用于数据传输 如果ftp工作在被动模式下,无法指定数据传输的端口,于是引入了RELATED状态,RELATED主要用于追踪与其相关的端口. 注意:ftp工作在主动模式或者被动模式与客户端的请求有关. 1)安装ftp追踪时的专用的模板. 在/lib/modules/2.6.32-431.el6.x86_64/kernel/kernel/trace下关于内核追踪相关的模块. modprobe nf_conntrack_ftp 2)放行请求报文. 命令连接:NEW,ESTABLISHED 数据连接:RELATED,ESTABLISHED

保存规则: service iptables save 保存在/etc/sysconfig/iptables iptables-save>自定义文件 iptables-restore<自定义文件