函数说明
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