目录
一、防火墙iptables的概述
1、防火墙的作用
netfilter/iptables(简称为iptables)组成Linux平台下的包过滤防火墙,与大多数的Linux软件一样,这个包过滤防火墙是免费的,它可以代替昂贵的商业防火墙解决方案,完成封包过滤、封包重定向和网络地址转换(NAT)等功能。
2、netfilet和iptables的关系
这是第一个要说的地方,Iptables和netfilter的关系是一个很容易让人搞不清的问题。很多的知道iptables却不知道 netfilter。其实iptables只是Linux防火墙的管理工具而已,位于/sbin/iptables。真正实现防火墙功能的是 netfilter,它是Linux内核中实现包过滤的内部结构。
3、四表五链
四表:
(1)raw表
确定是否对该数据包进行状态跟踪。包括两个规则链,OUTPUT,PREAUTING
(2)mangle表
修改数据包内容,用来做数据整形,给数据包设置标记。包含五个规则链,INPUT、OUTPUT、
FORWARD、PREROUTING 、POSTROUTING
(3)nat表
用来负责地址转换,用来修改数据包中的源、目标ip地址或端口。包含三个规则链,OUTPUT、
PREROUTING 、POSTROUTING
(4)filter表
负责过滤数据包,确认是否放行该数据包(过滤)包含三个规则链,INPUT、OUTPUT、FORWARD
五链:
(1)INPUT
处理入站数据包,匹配目标ip为主机的数据包
(2)OUTPUT
处理出站数据包,一般不在此链上做配置
(3)FORWARD
处理转发数据包,匹配流经本机的数据包
(4)PREROUTING
在进行路由选择前处理数据包,用来修改目的地址,用来做DNAT,相当于把内网服务器的ip和端口映射到路由器的外网ip和端口上。
(5)POSTROUTING
在进行路由路由选择后处理数据包,用来修改源地址,用来做SNAT,相当于内网通过路由器NAT转换功能来实现内网主机通过一个公网IP地址来上网。
4、常用的控制类型
(1)ACCEPT
允许数据包通过
(2)DROP
直接丢弃数据包,不会给出任何回应
(3)REJCET
拒绝数据包通过,会给数据发送端发送一个响应信息
(4)SNAT
修改数据包的源地址
(5)DNAT
修改数据包的目的地址
(6)MASQUERADE
伪装成非固定公网ip地址
(7)LOG
在/var/log/message文件中记录日志信息,然后将数据包传递给下一条规则,LOG只是一条辅助动作,并没有真正处理数据包。
二、配置基础iptables
1、配置格式
iptables [ -t 表名] 管理选项 [链名] [匹配条件] [ -j 控制类型]
常用的管理选项
(1)-A
在指定链的末尾追加一条新的规则
(2)-I
在指定链的开头追加一条新的规则,未指定序号时默认第一条规则
(3)-R
修改、替换 指定链上的某一条规则,若为指定链名则清空表中的所有链
(4)-F
清空指定链的所有规则,若为指定链名则清空表中的所有链
(5)-L
列出指定链中的所有规则,若未指定链名则列出表中的所有链
(6)-n
使用数字形式显示出数字结果,如显示ip地址而不是主机名。
(7)-v
显示详细信息,包括每条规则的匹配包数量和匹配字节数
(8)-line--numbers
查看规则时,显示规则序号
2、查看配置列表
(1)安装软件包
[root@localhost ~]# yum -y install iptables iptables-services
(2) 查看配置列表
[root@localhost ~]# iptables -nL INPUT #以数字形式显示INPUT链所有的规则条目(n
和L的顺序不能倒)
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:53
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:53
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:67
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:67
(3)查看INPUT链所有的规则条目,并显示规则的序号
[root@localhost ~]# iptables -L INPUT --line-numbers
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT udp -- anywhere anywhere udp dpt:domain
2 ACCEPT tcp -- anywhere anywhere tcp dpt:domain
3 ACCEPT udp -- anywhere anywhere udp dpt:bootps
4 ACCEPT tcp -- anywhere anywhere tcp dpt:bootps
3、添加规则
(1)在INPUT链的末尾追加tcp协议允许通过的规则
[root@localhost ~]# iptables -t filter -A INPUT -p tcp -j ACCEPT
[root@localhost ~]# iptables -L INPUT --line-numbers
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT udp -- anywhere anywhere udp dpt:domain
2 ACCEPT tcp -- anywhere anywhere tcp dpt:domain
3 ACCEPT udp -- anywhere anywhere udp dpt:bootps
4 ACCEPT tcp -- anywhere anywhere tcp dpt:bootps
5 ACCEPT tcp -- anywhere anywhere
(2) 在INPUT链中的第三条插入icmp禁ping
[root@localhost ~]# iptables -t filter -L INPUT --line-numbers
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT udp -- anywhere anywhere udp dpt:domain
2 ACCEPT tcp -- anywhere anywhere tcp dpt:domain
3 REJECT icmp -- anywhere anywhere reject-with icmp-port-unreachable
4 ACCEPT udp -- anywhere anywhere udp dpt:bootps
5 ACCEPT tcp -- anywhere anywhere tcp dpt:bootps
6 ACCEPT tcp -- anywhere anywhere
4、设置默认策略
设置格式
iptables [-t 表名] -P 链名 控制类型
为FORWARD链设置默认规则为不允许通过
[root@localhost ~]# iptables -t filter -P FORWARD DROP
(2) 清空规则
清空INPUT的所有规则
[root@localhost ~]# iptables -t filter -F INPUT
[root@localhost ~]# iptables -t filter -L INPUT --line-numbers
Chain INPUT (policy ACCEPT)
num target prot opt source destination
删除INPUT里的第一条规则
(1)先在INPUT第一条那创建一条规则
[root@localhost ~]# iptables -t filter -A INPUT -p icmp -j ACCEPT
(2)通过-D命令删除第一条规则
[root@localhost ~]# iptables -t filter -D INPUT 1
(3)以数字的形式打开指定链名查看删除情况
[root@localhost ~]# iptables -t filter -L INPUT --line-numbers
Chain INPUT (policy ACCEPT)
num target prot opt source destination
三、规则匹配
1、通用匹配
-
协议匹配: -p协议名 .
-
地址匹配: -s源地址、-d目的地址 可以是IP、网段、域名、空(任何地址)
-
接口匹配: -i入站网卡、-o出站网卡
(1)拒绝指定地址禁ping
[root@localhost ~]# iptables -t filter -s 192.168.222.100 -A INPUT -p icmp -j REJECT
2、隐含匹配
要求以特定的协议匹配作为前提,包括端口、TCP标记、ICMP类 型等条件。 端口匹配: --sport 源端口、–dport 目的端口,可以是个别端口、端口范围
允许tcp目标端口20、21通过
[root@localhost ~]# iptables -t filter -A INPUT -p tcp --dport 20:21 -j ACCEPT
3、显示匹配
要求以“-m 扩展模块” 的形式明确指出类型包括多端口、MAC地址、IP范围、数据包状态等条件
多端口匹配:-m multiport --sports 源端口列表
-m multiport --dports 目的端口列表
IP范围匹配:-m iprange --src-range IP范围
MAC地址匹配:-m mac --mac-source MAC地址
状态匹配:-m state --state 连接状态
(1)在INPUT链中追加一条规则:目的端口列表中tcp25,80,110端口允许通过
[root@localhost ~]# iptables -t filter -A INPUT -p tcp -m multiport --dports 25,80,100 -j ACCEPT
4、状态匹配
状态匹配:-m state --state 连接状态常见的连接状态:
NEw :与任何连接无关的,还没开始连接
ESTABLISHED :响应请求或者已建立连接的,连接态
RELATED:与已有连接有相关性的(如FTP主被动模式的数据连接),衍生态,一般与ESTABLISHED配合使用INVALID :不能被识别属于哪个连接或没有任何状态