1. 函数说明

    prerouting    input    output    forward    postrouting

2.链说明

    chain:    PREROUTING    INPUT    OUTPUT    FORWARD    POSTROUTING

    

3.filter(过滤):

 

   INPUT    OUTPUT    FORWARD

4.nat(地址转换):

    PREROUTING    OUTPUT    POSTROUTING

5.mangle(拆开,修改,封装):

    PREROUTING    INPUT    OUTPUT    FORWARD    POSTROUTING

6.raw:

    PREROUTING

    OUTPUT

7.自定义链:

    可以使用自定义链,但只有在被调用时才能发挥作用,而且如果没有自定义的任何规则匹配,还应该有返回机制

    可以删除自定义的空链;

    默认链不能被删除;

    每个规则都有两个内置计数器:

    匹配报文个数

    匹配报文大小之和

匹配:

通用匹配

-s:--src:指定源地址-d:--dst:指定目标地址-p{tcp|udp|icmp}:指定协议-iINTERFACE指定报文流入接口可用于定义标准的链:PREROUTING,INPUT,FORWARD-oINTERFACE:可用于定义标准的链:OUTPUT,POSTROUTING,FORWARD扩展匹配隐含扩展:不用特别指明由哪个模块进行扩展,因此使用时使用-p{tcp|udp|icmp}--sportPORT[]:源端口--dportPORT[]:目标端口--tcp-flagsmaskcomp:只检查mask指定的标志位,是逗号分隔的标志位列表;comp:此列表中出现的标记位必须为1,comp中没有出现的,必须为0--tcp-flagsSYN,FIN,ACK,RSTSYN,ACK--syn:匹配三次握手的第一次
-picmp--icmp-type0:echo-replay8:echo-request-pudp--sport--dport

显式扩展:

    

必须指明由哪个模块进行的扩展,在iptables中使用-m选项可以完成此功能    -mextension    state:状态扩展    结合nf_conntrack追踪会话状态    NEW:新连接请求    ESTABLISHED:已建立的连接    INVALID:非法连接    RELATED:相关联的,如ftp21端口连接后,20必须连接数据    forexp:-mstate--stateNEW,ESTABLISHED-jACCEPT

多端口匹配扩展:

    

multiport    --source-ports:匹配源端口    --destination-ports:匹配目标端口    --ports:源端口和目标端口都可以匹配    iptable-IINPUT-ptcp-mmultiport--destination-ports21,22,80-mstate--stateNEW-jACCEPT

    

-miprange:    --src-range:    --dst-range:    iptable-AINPUT-ptcp-miprange--src-range192.168.1.11-192.168.1.22-mmultiport--ports22-mstate--stateNEW-jACCEPT
-mconnlimit:连接限制!--connlimit-aboven连接上限!ACCEPT
-m--limtrate--limit-burstiptable-AINPUT-d192.168.1.12-picmp--icmp-type8-mlimit--limit30/minute--limit-burst10-jACCEPT

limit-burst如上面的限制,表示每分钟限制30个请求,但是前10个是一批请求都会放行的

-mstring-algo{bm|kmp}--string"stringxx"

命令:

管理规则

-A:附加一条规则,添加至链的尾部    -ICHAIN[NUM]:插入一条规则,插入为对应CHAIN上的第num条;不指定,默认为第一条    -DCHAIN[NUM]:删除指定链中的第num条规则;    -RCHAIN[NUM]:替换指定规则    管理链:    -FCHAIN:flush,清空指定规则链,如果省略CHAIN,则可以删除对应表中的所有链。    -PCHAIN:设定指定链的默认策略    -N:自定义一条空链    -X:删除一个自定义空链    -Z:置零指定链中的所有计数    -E:重名名自定义链    查看:    -L:显示指定表中的规则    -v:显示详细信息    -x:显示精确值    -n:已数字格式显示    --line-numbers:显示规则号码

动作:

-jtarget:    ACCEPT:放行    DROP:丢弃    REJECT:拒绝    DNAT:目标地址转换    SNAT:源地址转换    REDIRECT:端口重定向    MASQUERADE:地址伪装    LOG:日志    --log-prefix"STRING"记录日志时添加的字符串    MARK:报文打标记

装载及卸载iptables/netfilter相关模块:

iptbales_nat,iptables_filter,iptables_mangle,iptables_raw,ip_nat,ip_conntrack
ip_conntrack/nf_conntrack:新内核为nf_conntrack建立连接后文件的记录位置/proc/net/nf_conntrack所允许的最大连接:cat/proc/sys/net/netfilter/nf_conntrack_max***设置值调整目录****/proc/sys/net/netfilter/

规则保存,保存文件:

/etc/sysconfig/iptables/etc/init.d/iptablessaveiptables-save>/etc/sysconfig/iptables.20150604iptables-restore

放行ftp:

加载模块:ip_nat_ftp,ip_conntrack_ftpvi/etc/sysconfig/iptables-configIPTABLES_MODULES="ip_nat_ftpip_conntrack_ftp"开放状态:ESTABLISHED,RELATED
-NCHAIN_NAME:自定义链iptables-NCKL被主链引用,比如被INPUT引用:iptables-AINPUT-jCKL

利用iptablesrecent模块抵御DOS***

ssh远程连接

iptables-IINPUT-ptcp--dport22-mconnlimit--connlimit-above3-jDROPiptables-IINPUT-ptcp--dport22-mstate--stateNEW-mrecent--set--nameSSHiptables-IINPUT-ptcp--dport22-mstate--stateNEW--update--seconds300--hitcount3--nameSSH-jDROP

1.利用connlimit模块将单IP的并发设置为3,会误杀使用NAT上网的用户,可以根据实际情况调整

2.利用recent和state模块限制单IP300s内只能与本机建立3个连接,被限制5分钟后恢复

下面对最后两句做一个说明:

1.第二句是记录访问tcp22端口的新连接,记录名称为SSH

   --set记录数据包来源IP,如果IP已经存在,将更新已经存在的条目

2.第三句是指SSH记录中的IP,300s内发起超过3次请求则拒绝此IP

  --seconds必须与--rcheck或者--update同时使用

  --hitcount必须与--rcheck或者--update同时使用

3.iptables的记录:/proc/net/ipt_recent/SSH

也可以使用如下

 iptables-AINPUT-ptcp--dport22-mstate--stateNEW-mrecent--update--nameSSH--second300--hitcount3-jLOG--log-prefix"SSHAttack"

 

NAT:

 DNAT(PREROUTING,INPUT)目标地址转换:报文进入的时候

 SNAR(POSTROUTING,OUTPUT)源地址转换:报文流出的时候

 -jSNAT

 --to-source

 允许内部192.168.1.0/24通过外网地址122.22.3.4上网:

 iptables-tnat-APOSTROUTING-s192.168.1.0/24-jSNAT--to-source122.22.3.4

-jMASQUERADE

对于外网地址不固定的,MASQUERADE可以通过动态的进行地址转换

-jDNAT

--to-destination

内网服务器地址是192.168.1.13,外网地址是133.22.1.1允许外网可以访问内网的80(如果转换为8009)

iptables-tnat-APREROUTING-d133.22.1.1-ptcp--dport80-jDNAT--to-destination192.168.1.13

(如果转换为8009端口)

iptables-tnat-APREROUTING-d133.22.1.1-ptcp--dport80-jDNAT--to-destination192.168.1.13:8009