一、简介
1)---> IPTABLES 是与最新的 3.5 版本 Linux 内核集成的 IP 信息包过滤系统,在redhat7.1 centos7.1以上都内置装有。
2)---> iptables 的最大优点是它可以配置有状态的防火墙,有四种有效状态,名称分别为 ESTABLISHED 、 INVALID 、 NEW 和 RELATED。
-状态 ESTABLISHED 指出该信息包属于已建立的连接,该连接一直用于发送和接收信息包并且完全有效。
-状态INVALID指出该信息包与任何已知的流或连接都不相关,联,它可能包含错误的数据或头。状态 NEW 意味着该信息包已经或将启动新的连接,或者它与尚未用于发送和接收信息包的连接相关联。最后,
-RELATED 表示该信息包正在启动新连接,以及它与已建立的连接相关联。
3)---> iptables 的另一个重要优点是,它使用户可以完全控制防火墙配置和信息包过滤。您可以定制自己的规则来满足您的特定需求,从而只允许您想要的网络流量进入系统。
4)---> Iptables 是用来设置、维护和检查Linux内核的IP包过滤规则的,同时iptables 是免费的,这对于那些想要节省费用的人来说十分理想,它可以代替昂贵的防火墙解决方案。
二 、iptables的结构和使用
--iptables表、链结构图
1)有四张表raw、mangle、nat、filter,都有独立的相应链表。
2)包过滤匹配流程(规则链内的匹配顺序)
-顺序比对,匹配即停止(LOG除外)
-若无任何匹配,则按该链的默认策略处理
3)iptables基本用法
-iptables [-t 表名] 选项 [链名(大写)] 条件 [-j 目标操作(大写)]
例:[root@pc88 ~]# iptables -t filter -A INPUT -p tcp -j ACCEPT
A.注意事项/整体规律
-可以不指定表,默认为filter表
-可以不指定链,默认为对应表的所有链
-除非设置默认策略,否则必须指定匹配条件
-选项/链名用大写字母/目标操作用大写字母,其余都小写
B.常见目标操作:
ACCEPT:允许通过/放行
DROP:直接丢弃,不给出任何回应
REJECT:拒绝通过,必要时会给出提示
LOG:记录日志,然后传给下一条规则
C.常用的iptables命令选项
补充:iptables -X 清除预设表filter中使用者自定链中的规则(清除默认规则)
4)规则管理示例
-iptables的默认配置文件路径:/etc/sysconfig/iptables
-用iptables命令添加规则后要使用service iptables save命令后才能永久保存
-systemctl restart iptables.service 或 service iptables restart重启iptables服务
A.添加新规则
[root@pc88 ~]# iptables -t filter -A INPUT -p tcp -j ACCEPT //允许接收tcp协议进来的数据包
(在表filter的INPUT链中追加规则)(-A末尾追加这条规则)
[root@pc88 ~]# iptables -I INPUT -p udp -j ACCEPT //允许接收udp协议进来的数据包
(没写表名时,默认是指filter)(在INPUT规则表中首行插入这条规则)
[root@pc88 ~]# iptables -I INPUT 2 -p icmp -j ACCEPT //允许接收icmp协议进来的数据包
(没写表名时,默认是指filter)(在INPUT规则表中第2行插入这条规则)
B.查看规则
[root@pc88 ~]# iptables -nL -t nat //查看nat 的全部规则表
[root@pc88 ~]# iptables -nL POSTROUTING -t nat //查看nat表中POSTROUTING链的规则表
[root@pc88 ~]# iptables -L POSTROUTING -t nat --line-numbers //以规则序号的方式查看
C.删除、清空规则
-D删除规则 -F清空规则
[root@pc88 ~]# iptables -D INPUT 1 -t filter
//删除表filter中INPUT链的第1条规则(-t filter没写时,默认为filter表)
[root@pc88 ~]# iptables -D POSTROUTING 2 -t nat
//删除表nat中POSTROUTING链中的第2条规则
-F清空规则(分别清空四个表,第一个默认为filter表)
[root@pc88 ~]# iptables -F
[root@pc88 ~]# iptables -t nat -F
[root@pc88 ~]# iptables -t mangle -F
[root@pc88 ~]# iptables -t raw -F
D.设置默认规则
当用户添加的规则都不匹配时,为匹配默认规则
所有链的始默认规则均为ACCEPT(接收状态)
通过-P选项可重置默认规则,常用两种状态ACCEPT或DROP
[root@pc88 ~]# iptables -t nat -P POSTROUTING DROP
//将nat表中POSTROUTING链默认规则设置为DROP(弃包状态)
[root@pc88 ~]# iptables -t filter -P INPUT ACCEPT
//将filter表中INPUT链默认规则设置为ACCEPT(接收状态)
E.常见的防火墙设置类型:主机型和网络型
根据防火墙保护的对象不同,防火墙可以分为主机型防火墙与网络型防火墙,如图所示。
主机型防火墙,主要保护的是服务器本机(过滤威胁本机的数据包)。
网络防火墙,主要保护的是防火墙后面的其他服务器,如web服务器、FTP服务器等。
F.常见的扩展条件类型
前提条件:有对应的防火墙模块支持
基本用法:
-m 扩展模块 --扩展条件 条件值
示列:-m mac --mac-source 00:0D:33:88:BC:66
实用案例1
功能:拒绝某主机的访问,锁定该主机的MAC地址,这样不管变成什么IP都无法访问本机
[root@pc88 ~]# iptables -A INPUT -m mac --mac-source 00:0D:33:88:BC:66 -j DROP
实用案例2
功能:一条规则开放多个端口
[root@pc88 ~]# iptables -A INPUT -p tcp -m multiport --dports 21:23,25,80,110,16500:16800 -j ACCEPT
//先指定大的协议如tcp,然后再指定扩展协议
//21:23指21到23间的所有端口,16500:16800同理,不连续的用,分开
实用案例3
功能:根据IP范围指定可以访问本机相关端口的IP段(例如SSH远程登陆本机)
-先写允许访问的IP段,然后再写禁止IP段
[root@pc88 ~]# iptables -A INPUT -p tcp --dport 22 -m iprange --src-range 192.168.8.20-192.168.8.60 -j ACCEPT
//先写允许20-60间的主机可以通过22端口远程访问本机
[root@pc88 ~]# iptables -A INPUT -p tcp --dport 22 -s 92.168.4.0/24 -j DROP
//当进来的IP不符合第一条规则时,会开始中匹配第二条,就在第二条上执行禁止4.0/24网段的访问。相当于只允许第一条的人访问。
实用案例4
功能:通过iptables实现局域网内不同网段间的两台主机的互联网共享.
假如A主机IP192.168.0.5/192.168.2.5(双网卡)可以上网,B主机IP192.168.2.100不能上网
-首先确保A和B要能相互ping通,A主机能上网
-然后把B主机的IP网关设置成192.168.2.5,DNS设置成和主机A的DNS一样
-开始添加修改主机A的iptables规则
[root@pca ~]# echo 0 > /proc/sys/net/ipv4/ip_forward
//echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf
//修改/etc/sysctl.conf配置文件,可以实现永久有效规则
//首先开启主机A的路由转发功能
[root@pca ~]# iptables -t nat -A POSTROUTING -s 192.168.2.100 -p tcp --dport 80 -j SNAT --to-source 192.168.0.5
//将主机B访问主机A的80端口上的数据转发到主机A另一个能访问外网的网卡上ip是192.168.0.5 ,其中-p tcp --dport 80 可以不写,就变成访问A的所有端口数据都转到ip为192.168.0.5的网卡上,借由这个网卡再加上路由功能转的开启,从而实现连接外网。
实用案例5
功能:实现A可以ping能B,B无法ping通A(只是回应拒绝访问)
[root@pca ~]# iptables -A INPUT -p icmp --icmp-type echo-request -j REJECT
//在主机A上添加上面规则
实用案例6
功能:实现禁止路由访问代理服务器后面的服务器主机
-在代理服务器开启路由转发的前提下
[root@server ~]# iptables -I FORWARD -s 192.168.2.200 -p tcp --dport 80 -j DROP
//192.168.2.200是要访问server的客户机,当客户机通过server访问80转发端口时丢弃数据包
实用案例7
[root@pc88 ~]#iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
//如上例,添加一条入站规则:对进来的包的状态进行检测。已经建立tcp连接的包以及该连接相关的包允许通过!
//ESTABLISHED:已建立的链接状态。RELATED:该数据包与本机发出的数据包有关。
实用案例8
//防止骇客使用洪水攻击
[root@pc88 ~]#iptables -A INPUT -m limit --limit 3/hour
//说明 用来比对某段时间内封包的平均流量,上面的例子是用来比对:每小时平均流量是
否超过一次 3 个封包。 除了每小时平均次外,也可以每秒钟、每分钟或每天平均一次,
默认值为每小时平均一次,参数如后: /second、 /minute、/day。 除了进行封数量的
比对外,设定这个参数也会在条件达成时,暂停封包的比对动作,以避免因骇客使用洪水
攻击法,导致服务被阻断