iptables防火墙及netfilter基础

 

Netfilter和iptables:

Netfile:指的是linux内核中实现包过滤防火墙的内部结构,不以程序或者文件的形式存在,属于内核空间的防火墙功能体系。

Iptables:指的是linux防火墙的命令工具,程序通常位于/sbin/iptables ,属于用户空间的防火墙管理体系。

Netfilter的框架

Prerouting:进如本机后路由发生前

Input:到达本机

Output:本机发出

Forward:本机转发

Postrouting:路由发生后

报文流向经由的位置:

到本机内部:prerouting,input,

由本机发出:output,postrouting

由本机转发:prerouting,forward,postrouting

规则功能:

过滤:firewall

地址转换:Nat server

Mangle:修改报文首部中某些信息

Raw:关闭nat表上启用的连接追踪功能

规则表,链结构。四张表,五条链。

Filter:input,forward,output

Nat:prerouting,output,postrouting

Mangele:prerouting,input,forward,output,postrouting

Raw:prerouteing,output

关于规则次序检查法则:

(1)同类规则,匹配范围小的放上面

(2)不同类规则,匹配报文几率比较大的放上面。

(3)应该设置默认策略。

优先级由高到低:raw->mangle->nat->filter

注意:报文不能经过自定义链,只有在被内置链上的引用才能生效。

关于规则链的计数器:

Pkts:由规则或链匹配到的报文个数。

Bytes:又规则或链匹配到的所有报文大小之和。

Iptables 用法:

规则通过内核接口直接送至内核,因为会立即生效,但是不会永久有效。

若要永久生效,需要保存配置文件,开机启动。

Iptables [-t table]  subcommand chain criteria –j target

-t table:默认为filter,共有filter,nat,mangle,raw四个可用。

Subcommand:

链:

-F:清空指定表上的指定链上的所有规则

-N:新建一个用户自定义的链,自定义链只能作为默认链上的跳转对象,即在默认的链通过引用来生效。

-X:删除用户自定义的空恋,非空自定义的链和内置链无法删除

-Z:将规则计数器重置为0

-P:设置链的默认处理机制,当所有无法匹配或者有匹配由无法做出有效处理机制时,默认策略生效。

-E:重命名自定义链。注意被引用的链,无法删除和改名。

规则:

-A:在链尾追加一条规则

-I:在指定位置插入一条规则

-D:删除指定规则

-R:替换指定规则

查看:

-L:列出指定链上的所有规则

-n:以数字的形式 显示出地址和端口号,即不反解

-v:详细格式,显示出规则的详细信息,包括规则计数器等。

-vv:显示更为详细..

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

-x:显示计数器的精确值。

 

Pkts bytes target port pot in out source destination

Pkts:被本规则所匹配到包个数

Bytes:被本规则所匹配到的所包的大小之和。

Target:处理目标

Prot:协议{tcp  udp icmp}

In :数据包流入接口

Out:数据包流出接口

Source:源地址

Destination:目标地址

Creteria:匹配条件:

检测ip首部,tcp udp和icmp首部

基于扩展机制,也可以进行额外的检查:

#注意:可以同时制定多个条件,默认多条件要同时满足

匹配条件两类:

通用匹配:

[!]-s,--src,--source IP|Network :检查报文中的源ip地址 。!可以取反。

-d,--dst,--destination:检查报文中的目标ip地址

-p,-protocol:检查报文中的协议,即ip首部中的protocols所标识的协议。

-I,--in-interface:数据报文的流入接口,通常只用于prerouting,input,forward链上的规则。

-o,-out-interface:检查报文的流出接口,通常用于forward,output,postrouting链上的规则。

 Tcp:--dport 目标端口

     --sport 源端口

     --tcp-flags  LIST1 LIST2 tcp的标志位,LIST1要检查的标志位,LIST2要在list1中出现过的。

Icmp:

 --icmp-types 8:echo request 0:echo reply

扩展匹配:/lib64/xtables/目录存在的模块支持。

  1. 隐式扩展,如果在通用匹配上使用-p选项指明了协议的话。
  2. 显式扩展,必须制定使用扩展机制。

 

Target:

-j:jump ,跳转目标

 内置目标:

Accept: 接受

Drop:丢弃

Reject:拒绝

案例:

通用匹配:

[root@local htdocs]# iptables -t filter -A INPUT -s  172.16.250.81 -d 172.16.249.75 -j ACCEPT  允许源地址81的访问75的

[root@local htdocs]# iptables  -R INPUT 2 -s 172.16.250.81 -d  172.16.249.75 -p icmp -i eth1 -j  ACCEPT  重命名上条记录的加了一个经过eth1的所有icmp协议都允许

[root@local htdocs]# iptables -D INPUT 3 删除input上第三条规则

[root@local htdocs]# iptables -A INPUT -d 172.16.249.75 -p icmp -j ACCEPT 允许任意主机ping 本机  

显式扩展:必须指明的扩展机制:

-m 模块名称

 每个模块会引入新的匹配机制,查看可以用的模块:rpm    -ql iptables 以小写.so结尾的

Mutiport扩展:

离散方式指明多端口访问,最多可指定15个端口
专用选项: --source-ports,--sports [port1,port2]

           --destination-port,--dports [port1,port2]

           --ports [prot,…]

[root@local ~]# iptables -I INPUT 1 -d 172.16.249.75  -p tcp -m multiport --dports 22,80 -j ACCEPT

[root@local ~]# iptables -I OUTPUT 1  -s 172.16.249.75 -p tcp -m multiport --sports 22,80 -j ACCEPT

两条命令放行22,80 端口

Iprange扩展:

标识指定的连续ip地址范围:

选项:

[!]--src-range ip

[!]—dst-range ip

示例:

iptables -A INPUT -d 172.16.100.11 -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.11 -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进制的字串。

[root@local htdocs]# iptables -I  OUTPUT  1 -s 172.16.249.75  -p tcp --sport 80 -m string   --string "sex"  --algo  kmp -j REJECT

Time扩展:

基于时间区间坐访问控制:

选项:

--datestart

--datestop

--timestart

--timestop

--weekdays day1,[day2]

 [root@local htdocs]# iptables -I  INPUT  1  -d 172.16.249.75 -p tcp --dport 80 -m time --timestart 08:30 --timestop 18:30   -j  REJECT

[root@local htdocs]# date 0506150000 修改系统时间之后,查看丢弃的报文。

[root@local htdocs]# iptables -L -n -v

Chain INPUT (policy ACCEPT 18 packets, 1142 bytes)

 pkts bytes target     prot opt in     out     source               destination        

1    40 REJECT     tcp  --  *      *       0.0.0.0/0            172.16.249.75       tcp dpt:80 TIME from 08:30:00 to 18:30:00 reject-with icmp-port-unreachable

 

[root@local htdocs]# iptables -R INPUT 1 -d 172.16.249.75 -p tcp --dport 80 -m time --timestart 08:30 --timestop 18:30 --weekdays Mon,Tue,Thu,Fri  -j REJECT

在周一,二,四,五,早8点30到晚8点30数据包丢弃…

Connlimit扩展:

基于连接数作限制,对每个ip能够发起的并发连接数作限制。

选项:

--comlimit-adove  [n]

[root@local ~]# iptables -A INPUT  -d 172.16.249.164 -p tcp  --dport 22 -m connlimit --connlimit-above 5 -j REJECT

连接到第六个就无法连接了。之前连接的不包括.因为是事先打开的。

[root@local ~]# iptables -D INPUT 2 把input链上的第二条删除即可访问….

Limit 扩展:

基于发包速率作限制

选项: --limit n[/s/m/h/d] 时分秒

       --limit-burst n  最大速度..

iptables -R INPUT 3 -d 172.16.100.11 -p icmp --icmp-type 8 -m limit --limit 10/minute --limit-burst 5 -j ACCEPT

======================单词整理======================

Netfile:网络过滤器,linux内核中包过滤防火墙的名称

Iptables:ip表,管理设置防火墙的命令工具

NAT:网络地址转换

Input:进入

Outfpu:出去

Forward:转发

Accept: 允许

Reject:拒绝

Drop:丢弃

Source:来源

Destination:目标

Policy:策略

Rule:规则

Mangle:调整 标记

Raw:原始的

General:通用的

Implicit:隐含的

Explicit:明确的

===========================================================

 


发表评论

登录 后发表评论.