IpTables是linux内核中内置的防火墙,可以允许管理员通过设置table,chain以及相关的规则来进行数据包的过滤和NAT。一般来讲,iptables防火墙已经内置于Centos 6以及其他Linux版本中,而且iptables服务默认都是启动的。
防火墙,就是用于实现Linux下访问控制的功能的,它分为硬件的或者软件的防火墙两种。无论是在哪个网络中,防火墙工作的地方一定是在网络 的边缘。而我们的任务就是需要去定义到底防火墙如何工作,这就是防火墙的策略,规则,以达到让它对出入网络的IP、数据进行检测。
目前市面上比较常见的有3、4层的防火墙,叫网络层的防火墙,还有7层的防火墙,其实是代理层的网关。对于TCP/IP的七层模型来讲,我们知道第三层是网络层,三层的防火墙会在这层对源地址和目标地址进行检测。但是对于七层的防火墙,不管你源端口或者目标端口,源地址或者目标地址是什么,都将对你所有的东西进行检查。 所以,对于设计原理来讲,七层防火墙更加安全,但是这却带来了效率更低。所以市面上通常的防火墙方案,都是两者结合的。而又由于我们都需要从防火墙所控制的这个口来访问,所以防火墙的工作效率就成了用户能够访问数据多少的一个最重要的控制,配置的不好甚至有可能成为流量的瓶颈。
Iptables的相关指令和配置文件:
首先iptables的相关配置文件位置:/etc/sysconfig/iptables
iptables启动:
service iptables start
iptables关闭:
service iptables stop
iptables保存设置:即修改完iptables要使配置文件生效需要执行下面两步
serviceiptables save
serviceiptables restart
iptables定义规则:
Iptables[-t table] command chain CRETIRIA -j ACTION
[-ttable]: 用来指明使用的表,有三种选项,filter、nat和mangle,如果未指定,则使用filter作为缺省值,事实上,对于单个服务器的防火墙配置,一般来讲,我们只需要对filter表进行配置就可以了,filter表包括:INPUT OUTPUT FORWARD三个chain。
command:定义如何对规则进行管理,比如
-A(append):该命令会把一条规则附加到chain的末尾
-D(delete):用来删除某个规则
-F(flush):如果指定了chain ,删除该chain中的所有规则,如果没有指定chain,则 删除所有chain中的所有规则
chain:指定你接下来的规则到底是在哪个链上操作的,当定义策略的时候,是可以省略 的
CRETIRIA:指定匹配标准
-jACTION :指定如何进行处理
如:我们只允许192.168.0.3的机器进行SSH连接
iptables-A INPUT -s 192.168.0.3 -p tcp --dport 22 -j ACCEPT
如果要允许,或限制一段IP地址可用 192.168.0.0/24 表示192.168.0.1-255端的所有IP.
24表示子网掩码数.但要记得把 /etc/sysconfig/iptables 里的这一行删了.
-AINPUT -p tcp -m tcp --dport 22 -j ACCEPT 因为它表示所有地址都可以登陆.
(转载自http://blog.chinaunix.net/uid-26495963-id-3279216.html)
详解COMMAND:
1.链管理命令(这都是立即生效的)
-P:设置默认策略的(设定默认门是关着的还是开着的)
默认策略一般只有两种
iptables -P INPUT (DROP|ACCEPT) 默认是关的/默认是开的
iptables-P INPUT DROP 这就把默认规则给拒绝了。并且没有定义哪个动作, 所以关于外界连接的所有规则包括Xshell连接之类的,远程连接都被拒绝了。
-F:FLASH,清空规则链的(注意每个链的管理权限)
iptables -t nat -FPREROUTING
iptables -t nat -F 清空nat表的所有链
-N:NEW支持用户新建一个链
iptables-N inbound_tcp_web 表示附在tcp表上用于检查web的。
-X:用于删除用户自定义的空链
使用方法跟-N相同,但是在删除之前必须要将里面的链给清空昂了
-E:用来Rename chain主要是用来给用户自定义的链重命名
-E oldname newname
-Z:清空链,及链中默认规则的计数器的(有两个计数器,被匹配到多少个数据包,多 少个字节)
Iptables -Z :清空
2.规则管理命令
-A:追加,在当前链的最后新增一个规则
-Inum : 插入,把当前规则插入为第几条。
-I 3 :插入为第三条
-Rnum:Replays替换/修改第几条规则
格式:iptables -R 3 …………
-Dnum:删除,明确指定删除第几条规则
iptables删除某一条规则:根据INPUT编号从1开始
iptabels-D INPUT 3
3.查看管理命令“-L”
附加子命令
-n:以数字的方式显示ip,它会将ip直接显示出来,如果不加-n,则会将ip反向解析成主机名。
-v:显示详细信息
-vv
-vvv:越多越详细
-x:在计数器上显示精确值,不做单位换算
--line-numbers: 显示规则的行号
-tnat:显示所有的关卡的信息
详解匹配标准:
1.通用匹配:源地址目标地址的匹配
-s:指定作为源地址匹配,这里不能指定主机名称,必须是IP
IP| IP/MASK | 0.0.0.0/0.0.0.0
而且地址可以取反,加一个“!”表示除了哪个IP之外
-d:表示匹配目标地址
-p:用于匹配协议的(这里的协议通常有3种,TCP/UDP/ICMP)
-ieth0:从这块网卡流入的数据
流入一般用在INPUT和PREROUTING上
-oeth0:从这块网卡流出的数据
流出一般在OUTPUT和POSTROUTING上
2.扩展匹配
2.1隐含扩展:对协议的扩展
-p tcp :TCP协议的扩展。一般有三种扩展
--dportXX-XX:指定目标端口,不能指定多个非连续端口,只能指定单个端口,比如
--dport 21 或者--dport 21-23 (此时表示21,22,23)
--sport:指定源端口
--tcp-fiags:TCP的标志位(SYN,ACK,FIN,PSH,RST,URG)
对于它,一般要跟两个参数:
1.检查的标志位
2.必须为1的标志位
--tcpflagssyn,ack,fin,rst syn = --syn
表示检查这4个位,这4个位中syn必须为1,其他的必须为0。所以这个意思就是用于检测三次握手的第一次包的。对于这种专门匹配第一包的SYN为1的包,还有一种简写方式,叫做--syn
-pudp:UDP协议的扩展
--dport
--sport
-picmp:icmp数据报文的扩展
--icmp-type:echo-request(请求回显),一般用8来表示
所以--icmp-type 8 匹配请求回显数据包
echo-reply (响应的数据包)一般用0来表示
2.2显式扩展(-m)
扩展各种模块
-m multiport:表示启用多端口扩展
之后我们就可以启用比如--dports 21,23,80
详解-jACTION
常用的ACTION:
DROP:悄悄丢弃
一般我们多用DROP来隐藏我们的身份,以及隐藏我们的链表
REJECT:明示拒绝
ACCEPT:接受
custom_chain:转向一个自定义的链
DNAT
SNAT
MASQUERADE:源地址伪装
REDIRECT:重定向:主要用于实现端口重定向
MARK:打防火墙标记的
RETURN:返回
在自定义链执行完毕后使用返回,来返回原规则链。