iptables:防火墙

  firewallTCP/IP协议栈; linux(内核)

        主机防火墙

网络防火墙

工作于主机或网络边缘,对于进出的报文根据定义的规则做检查,进而对被规则匹配到的报文作为做响应处理的套件

 

IPSintrusion protect system***防御系统 

IDSintrusion detect system***检测系统

 

 防火墙:

  网络层防火墙

  应用层防火墙

防火墙的分类:

  简单包过滤防火墙

  带状态检测的包过滤防火墙



Iptables内置链:

prerouting:路由前

input:到达本机内部的报文必经之路

forward:由本机转发的报文必经之路

output:由本机发出的报文必经之路

postrouting:路由后

 

iptables

filter:过滤,定义是否允许通过防火墙

nat:地址转换,启用connection_track;   目标端口,源端口

mangle:报文拆封,包装,转发

raw:目标是关闭nat表上启用的连接追踪功能  。

 

Iptables内置链和表对应关系

PREROUTING   INPUT     FORWARD    OUTPUT    POSTROUTING

Fliter:②③④

nat:①④⑤ 在①做目标地址转换   在⑤做源地址转换

mangle:①-

raw:①④

 

数据报文流程:

跟本机内部进程通信;

进入:-->prerouting-->input

出去:-->output-->postrouting

 

由本机转发:

请求:-->PREROUTING,-->FORWARD-->POSTROUTING

响应:-->PREROUTING,-->FORWARD-->POSTROUTING 

    规则中如果限定原地址、目标地址、源端口、目标端口等与流向相关的设定

         写规则

数据报文的流向:

IP和目标IP由流向决定; 

 

注意:iptables:用户空间的工具,写规则,并自动发往netfilter,立即生效;

       netfilter:接收并生效规则。

 

如何保存启用的规则于规则文件中:

 1#iptables-save > /etc/sysconfig/iptables

 2#service iptables Sava

 生效规则文件中的规则:

 1#iptables-restore < /etc/sysconfig/iptables

 2#service iptables restart

     执行的操作:清空现有规则,读取并生效规则文件中的规则。

 

iptables基本语法:

iptables[-t table]  command    chain        crtiria    -j   target 

指明那张表  命令选项   做什么处理   匹配条件    跳转目标

           -t TABLE: 

         nat, mangle, raw, filter

         默认为filter

 

command

链:

   -Fflush清除 清空规则链  如果不指定表 表明全部清空

   -Nnew,自建一条链  

   -Xdelete删除一条自定义的空链

   -Zzero计数器归零  被本规则所匹配包数  和字节大小之和

   -Ppolicy设定默认策略,对filter表来讲,默认规则为acceptdrop

   -Erename重命名自定义链

 链中的规则

  -Aappend增加

  -I:insert插入一条新规则

  -D:delete删除

  -Rreplace替换规则

 

查询:

   -L:列表

   -n:numeric以数字格式显示主机地址和端口

   -v:详细格式;-vv

   --line-numbers:显示规则编号

   -x:不要对计数器的计数结果做单位换算,而显示其精确值。

  pkts  bytes  target   prot  opt     in       out        source     destination

  包数  字节数  目标    协议  选项   流入的接口 流出的接口   源地址   目标地址


iptables [-t table] -A  链名 匹配条件 -j 处理目标

    匹配条件

通用匹配

-s 地址:匹配包的源地址,指定报文源ip地址匹配的范围;可以是ip,也可以是     网络地址;可使用!取反。

--src,--source

  -d地址:目标地址   指定报文目标ip地址匹配的范围;

  --dst,--destination

  -P协议:指定匹配报文的协议类型,一般有三种tcp,udp和ICMP;

  -i IN_IF;数据报文流入的接口; prerouting,input,forward

  -o OUT_IF:数据报文流出的接口;output,forward,postrouiting

    

扩展匹配:调用netfilter额外模块实现特殊检查机制,(使用到相关功能,要使用iptables命令的-m选项来指定调用哪个模块)

      隐式扩展:当使用-p{tcp|udp|icmp}中的一种时,可以直接使用扩展专用选项

-p tcp [-m tcp]

        --sport port[-port]:指定源端口

  

        --dport port[-port]:指定目标端口

  

--tcp-flags :tcp标志位  要检查标志位列表(用逗号分隔) 必须为1的标志位列表(逗号分隔)

例如:--tcp-flags syn,ack,rst,fin

 -all 所有位  

                        例如: iptables -I INPUT -p tcp --tcp-flags all all -j DROP

 -all none     

                        例如:iptables -I INPUT -p tcp --tcp-flags all none -j DROP

 --syn

                  -p udp [-m udp]

         --sport

         --dport

-p icmp [-m icmp]

--icmp-type

0:echo-reply,ping响应

8:echo-request,ping请求

   

   显示扩展:必须明确说明使用哪个模块进行扩展,而后才能使用其扩展专用选项

 -m:扩展模块名称                  

 -m state --state


multiport:多端口匹配

可用于匹配非连续或连续端口;最多指定15个端口;

 

专用选项:

--source-ports,--sports port[,port,port:port]源端口

--destiantion-ports,--dports 目标端口

--ports:不做限定

 

例如:

# iptables -I INPUT -d 172.16.100.7 -p tcp -m multiport --dports 22,80 -j ACCEPT

# iptables -I OUTPUT -s 172.16.100.7 -p tcp -m multiport --sports 22,80 -j ACCEPT


iprange:匹配指定范围内的地址;匹配一段连续的地址而非整个网络时有用;

专用选项:

[!]--src-range IP[-IP]

[!]--dst-range

例如: 

# iptables -A INPUT -d 172.16.100.7 -p tcp --dport 23 -m iprange --src-range 172.16.100.1-172.16.100.100 -j ACCEPT

# iptables -A OUTPUT -s 172.16.100.7 -p tcp --sport 23 -m iprange --dst-range 172.16.100.1-172.16.100.100 -j ACCEPT

      

string:字符串匹配,能够检测报文应用层中的字符串

 字符串匹配检测高效算法

     kmp,bm

 

      专用选项:

--algo {kmp|bm}

--string “STRING”

--hex-string “HEX_STRING”:HEX_STRING为编码成16进制格式的字串;

例如:# iptables -I OUTPUT -m string --algo kmp --string "sex" -j DROP


time:基于时间做访问控制

专用选项:

--datestart YYYY[-MM][-DD[Thh[:mm[:ss]]]]

--datestop

 

 --timestart hh:mm[:ss]

 --timestop hh:mm[:ss]

 --weekdays day[,day]

  mon,tue

      例如:# iptables -I INPUT -d 172.16.100.7 -p tcp --dport 80 -m time --timestart 08:20  --timestop 18:40 --weekdays Mon,Tue,Thu,Fri -j REJECT


connlimit:连续数限制,对每ip所能够发起并发连接数做限定;

专用选项

 [!]--connlimit-above [n]

 

 例如:iptables -A INPUT -d 172.16.100.7 -p tcp --dport 22 -m connlimit --connlimit-above 2 -j DROP



limit:速率限制

专用选项

--limit n[/second|/minute|/hour|/day]

--limit-burst n

例如:# iptables -A INPUT -d 172.16.100.7 -p icmp --icmp-type 8 -m limit --limit 20/minute --limit-burst 5 -j ACCEPT


state:状态检查

专用选项:

 --state

  

 连接追踪中的状态

NEW:新建一个会话,

ESTABLISHED:已建立的连续

RELATED:有关联关系的连接

INVALID:无法识别的连接

调整连接追踪功能所能容纳的连接的最大数目;

/proc/sys/net/nf_conntrack_max

当前追踪的所有连接

/proc/net/nf_conntrack

不同协议或连接类型追踪时的属性:

/proc/sys/net/netfilter目录

放行被动模式下的FTP服务:

1、装载模块/lib/modules/KERNEL_VERSION/kernel/net/netfilter/

模块:nf_conntrack_ftp

2、放行请求报文:

 (1)放行NEW状态对21端口请求的报文;

  (2) 放行ESTABLISHED以及RELATED状态的报文

3、放行响应报文:

  (1) 放行ESTABLISHED以及RELATED状态的报文

NEW:有限放行

 

优化规则:尽量减少规则条目,彼此不相关的匹配机会较多的放在上面,属于同一功能匹配规则更严格放在上面;


处理目标:

内置目标

DROP 拒绝  悄悄丢弃

REJECT 明确说明拒绝

ACCEPT 允许

自定义的链

        例如:iptables -t filter -A INPUT -s 172.16.0.0/16 -d 172.16.100.7 -p icmp -j DROP


删除

iptables [-t table] -D chain rulenum

例如:iptables -t filter -D input 1


设定策略:

iptables [-t table] -p chain target


修改规则

iptables [-t table] -R chain rulenum rule-specification

例如:iptables -R OUTPUT 1 -s 172.16.100.7 -d 172.16.0.0/16 -o eth0 -p tcp --sport 22 -j ACCEPT


插入规则:

iptables [-t table] -I chain [rulenum] rule-specification

iptables -I INPUT -i lo -j ACCEPT  能进不能出

iptables -I OUTPUT -o lo -j ACCEPT  可进可出


创建自定义链:

iptables [-t table ] -N chain

例如:iptables -t filter -N http_in

iptables -A http_in -d 172.16.100.7 -p tcp --dport 80 -m iprange --src-range 172.16.100.1-172.16.100.100 -j ACCEPT



删除自定义且0引用的空链

iptables [-t table ] -X chain


重命名自定义链且 0引用

iptables [ -t table ] -E old_name new_name

目标:

RETURN:在自定义链中无法匹配报文时,将其返回主链

NAT:

SNAT:源地址转换

DNAT:目标地址转换

PNAT:端口地址转换

FULL NAT:全地址转换

SNAT

--to-source SIP表示转换成那个源地址图5-23

iptables -t nat -A POSTROUTING -s 192.168.3.0/24 -j SNAT --to-source 172.16.100.7


MASQUERADE:地址伪装