linux防火墙分为表和链的结构,对于linux防火墙主要适用于中小型企业。工作在网络层,主要针对TCP/IP数据包过滤和限制。
[表]
filter:主要用来对数据包进行过滤。包含三个链INPUT,FORWARD,OUTPUT对应iptable_filter模块。
nat:用来修改数据包的IP和端口等信息,对应内核模块iptable_nat,包含三个链POSTROUTING,PREROUTING,OUTPUT。
mangle:用来修改数据包的TOS,或者为数据包作mark标记,实现流量整形和策略路由等高级应用,对应iptable_mangle,包含五个链PREROUTING,POSTROUTING,INPUT,FORWARD,OUTPUT。
raw:对数据包进行状态跟踪,对应iptable_raw,包含OUTPUT,PREROUTING。
[规则链]
INPUT:入站访问防火墙本机的数据包应用此规则。
OUTPUT:从防火墙本机向外部发送数据包时应用此规则。
FORWARD:通过防火墙转发的数据包应用此规则。
PREROUTING:在数据包路由前应用此规则。
POSTROUTING:在数据包路由后应用此规则。
[匹配流程]
表匹配流程:raw-mangle-nat-filter
链匹配流程如下:
1〉入站方向的数据流向:PERROUTING-路由选择-INPUT
2〉出站方向的数据流向:OUTPUT-路由选择-POSTROUTING
3〉转发数据流向:PREROUTING-路由选择-FORWARD-POSTROUTING
链规则遵循“匹配即停止”LOG策略除外
[基本语法和控制类型]
iptalbes[-t表名]管理选项[链名][匹配条件][-j控制类型]
不加-t时,默认是对filter表进行操作
-j后控制类型
ACCEPT:允许数据包通过
DROP:丢弃该数据包
REJECT:拒绝该数据包,并返回相应的信息
LOG:在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则
简单示例:iptables-IINPUT-ptcpicmp-jDROP/REJECT
上述结果就是:任何主机都无法ping通本机
当然你也可以通过修改/proc中的参数,或者vim/etc/sysctl.conf都可以达到上述效果。
管理选项:
-A:在指定链的末尾添加一条新规则
-D:删除指定链中的规则,加序号就可以
-I:在指定链中插入一条规则,不加序号时在开头插入
-R:修改,替换指定链中的某一条规则,加序号就可以
-L:列出指定链中的所有规则
-F:清空指定链中的所有规则
-P:设置指定链的默认策略
-n:使用数字的形式显示结果
-v:查看规则列表的详细信息
-h:查看命令帮助信息
--line-number:查看规则列表时,显示序号
[示例]
添加新的规则
[root@localhost ~]#iptables -t filter -A INPUT -p tcp -j ACCEPT
-A用来追加规则,-I用来插入规则,当然也可以指定添加规则的顺序号.未指定时默认为第一条,如下:
[root@localhost ~]#iptables -I INPUT -p udp -j ACCEPT [root@localhost ~]#iptables -I INPUT 2 -p icmp -j ACCEPT
查看规则列表
[root@localhost ~]#iptables -L INPUT --line-numbers [root@localhost ~]#iptables -vnL INPUT --line-numbers -vnL是以数字的形式显示规则,--line-numbers是用来显示规则的顺序号的.
删除和清空规则
[root@localhost ~]#iptables -F INPUT -F[这里可以加-t表名,或者是清空某一链的规则] 如: [root@localhost ~]#iptables -F 清空filter表 [root@localhost ~]#iptables -t nat -F 清空nat表 [root@localhost ~]#iptables -t mangle INPUT -F 清空mangle表的INPUT链 [root@localhost ~]#iptables -X清除自定义的链规则 [root@localhost ~]#iptables -D INPUT 3删除filter表的INPUT链的第三条规则
设置默认的策略
[root@localhost ~]#iptables -t filter -P FORWARD DROP 将filter表的FORWARD链的默认规则改为DROP
[规则的匹配条件]条件的设置对于iptables的至关重要的,条件是什么?简单点说呢就是你将要对数据包做什么样的限制和约束,从而达到你想要的结果。
[通用匹配]
协议匹配:-ptcp/udp/icmp/all(针对所有的IP数据包)
可以查看/etc/procotols文件中的其他协议
[root@localhost ~]#iptables -I INPUT -p icmp -j DROP丢弃通过icmp访问防火墙本机的数据包 [root@localhost ~]#iptables -A FORWARD -p ! icmp -j ACCEPT允许转发通过防火墙的除icmp以外的数据包,!表示取反操作
地址匹配:-s源地址,-d目标地址,支持网段
[root@localhost ~]#iptables -A FORWARD -s 192.168.1.11 -j REJECT拒绝转发源地址为192.168.1.11的数据 [root@localhost ~]#iptables -A FORWARD -s 192.168.10.0/24 -j ACCEPT允许转发源地址为192.168.10.0网段的数据
网络接口匹配:-i入接口名(--in-interface),-o出接口名(--out-interface)
如果要丢弃从外网接口eth1访问本机且源地址是私有地址的数据包,执行以下: [root@localhost ~]#iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP [root@localhost ~]#iptables -A INPUT -i eth1 -s 172.16.0.0/12 -j DROP [root@localhost ~]#iptables -A INPUT -i eth1 -s 192.168.0.0/16 -j DROP
[隐含匹配]
要求以指定的协议作为前提条件,因此是无法独立使用的,其对应的功能由iptables在需要时自动载入内核。
端口匹配:--sport源端口,--dport目标端口,也可以是多端口
允许为网段192.168.1.0/24转发DNS查询数据包
[root@localhost ~]#iptables -A FORWARD -s 192.168.1.0/24 -p udp --dport 53 -j ACCEPT [root@localhost ~]#iptables -A FORWARD -s 192.168.1.0/24 -p udp --sport 53 -j ACCEPT
再如ftp服务的被动模式的端口范围
[root@localhost ~]#iptables -A INPUT -p tcp --dport 20000:30000 -j ACCEPT
TCP标记匹配:--tcp-flags以“,”分隔多个标记
[root@localhost ~]#iptables -I INPUT -i eth1 -p tcp --tcp-flags SYN,RST,ACK SYN -j DROP就是拒绝eth1网卡协议是tcp的syn的请求连接
ICMP类型匹配:--icmp-type,echo-request代码为8,echo-reply代码0,destination-unreachable代码3,意思大家都懂。
如:禁止从其他主机ping本机,但是允许本机ping其他主机。 [root@localhost ~]#iptables -A INPUT -p icmp --icmp-type 8 -j DROP [root@localhost ~]#iptables -A INPUT -p icmp --icmp-type 0-j ACCEPT [root@localhost ~]#iptables -A INPUT -p icmp DROP
[显式匹配]
这种匹配要有额外的内核模块提供支持,-m模块名称的形式调用相应的模块,然后才能设置匹配条件。
多端口匹配:-mmultiport--dport/sport端口列表的形式,‘,’作为分隔符号
如:
允许本机开放25,80,443端口 [root@localhost ~]#iptables -A INPUT -p tcp -m multiport --dport 25,80,443 -j ACCEPT
IP范围匹配:-miprange--src-range/--dst-range的形式
如:
禁止转发源ip在192.168.4.21-192.168.4.30之间的tcp数据包 [root@localhost ~]#iptables -A FORWARD -p tcp -m iprange --src-range 192.168.4.21-192.168.4.30 -j ACCEPT
MAC地址匹配:-mmac--mac-sourceMAC地址的形式,不常用。
如:
禁止访问本机的任何应用。 [root@localhost ~]#iptables -A INPUT -m mac --mac-source 00:0c:29:01:f5 -j DROP
状态匹配:-mstate--state‘连接状态’的形式,经常用到
如:
访问ftp服务。 [root@localhost ~]#iptables -A INPUT -p tcp --dport 21 -j ACCEPT [root@localhost ~]#iptables -A INPUT -m state --state RELATED -j ACCEPT
本文出自 “Hello_World” 博客,转载请与作者联系!