linux iptables firewall

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” 博客,转载请与作者联系!

你可能感兴趣的:(iptables)