一、防火墙概述
1.什么是防火墙
防火墙通常具备以下几个特点。
(1)位置权威性。
(2)检测合法性。
(3)性能稳定性。
2.防火墙的种类
(1)包过滤防火墙
(2)代理防火墙
(3)状态检测技术
二、iptables简介 firewalld
早期的Linux系统采用过ipfwadm作为防火墙,但在2.2.0核心中被ipchains所取代。
Linux 2.4版本发布后,netfilter/iptables信息包过滤系统正式使用。
Netfilter/iptables IP数据包过滤系统实际由netfilter和iptables两个组件构成。Netfilter是集成在内核中的一部分,它的作用是定义、保存相应的规则。而iptables是一种工具,用以修改信息的过滤规则及其他配置。用户可以通过iptables来设置适合当前环境的规则,而这些规则会保存在内核空间中。
对于Linux服务器而言,采用netfilter/iptables数据包过滤系统,能够节约软件成本,并可以提供强大的数据包过滤控制功能,iptables是理想的防火墙解决方案。
1、工作原理
1.1默认的4个规则表
具有相同功能的规则的集合
列表查看各个规则 :
iptables -t filter -L -n(数字格式显示IP和端口)
-
raw表:确定是否对该数据包进行状态跟踪
-
mangle表:为数据包设置标记
-
nat表:修改数据包中的源、目标ip地址或端口,地址转换功能
-
filter表:确定是否放行该数据包(过滤)
1.2默认的5种规则链:
- INPUT:处理入站数据包
- OUTPUT:处理出站数据包
- FORWARD:处理转发数据包
- POSTROUTING:在进行路由选择后处理数据包
- PREROUTING:在进行路由选择前处理数据包
其中input、output链主要用在“主机型防火墙”中,主要针对服务器本机进行保护;
而FORWARD\POSTROUTING\PREROUTING多用在“网络型防火墙”中,如使用Linux防火墙作为网关服务器,在公司内网与Ineternet之间进行安全控制。
2、匹配顺序
(1)规则表之间的顺序从左到右:raw mangle nat filter
(2)规则链之间的顺序:不同链的处理时机比较固定,顺序取决于数据包的流向。
入站数据流向: 来自外界的数据包到达防火墙后,首选被PREROUTING链处理,然后进行路由选择;如果数据包的目的地址是防火墙本机,交给INPUT链进行处理,通过以后再交给系统上层应用程序进行响应。
转发数据流向: 来自外界的数据包到达防火墙后,首选被PREROUTING链处理,然后进行路由选择;如果数据包的目标地址是其他外部地址,则交给FORWARD链进行处理,最后交给POSTROUTING链进行处理。
出站数据流向:防火墙本机向外部地址发送数据包,首选被OUTPUT链处理,然后进行路由选择,再交给POSTROUTING链进行处理。
(3)规则链内部各条防火墙规则之间的顺序:从上往下,一旦匹配,立即终止。
(4)Centos7中使用iptables
systemctl stop firewalld 关闭防火墙
yum install iptables-services 安装或更新服务
再使用systemctl enable iptables 启动iptables
最后 systemctl start iptables 打开iptables
再执行service iptables save
重启iptables服务:
service iptables restart
3、iptables语法格式
iptables [-t 表名] 管理选项 [链名] [条件匹配] [-j 目标动作]
举例:
iptables -t filter -A INPUT -s 192.168.10.0/24 -d 192.168.10.1 -p tcp --dport 80 -j ACCEPT
service iptables save 设置完后要保存设置的规则
iptables: Saving firewall rules to /etc/sysconfig/iptables:[ 确定 ]
systemctl restart iptables 重启服务新规则生效
举例:
iptables -L 没有-t 指定表名,默认查看的是fileter表中的信息
iptables -L INPUT 只看INPUT链
iptables -L --line-number 查看的是fileter表中的信息,并显示行号
iptables -F 没有-t 指定表名,默认清空fileter表中的信息
iptables -t fileter -A INPUT -d 127.0.0.1 -p tcp --dport 22 -j ACCEPT 在链尾追加一条规则
iptables -I INPUT -s 192.168.75.1 -d 127.0.0.1 -p tcp --dport 22 -j ACCEPT 在第一个位置插入一条规则
iptables -I INPUT 2 -s 192.168.75.1 -d 127.0.0.1 -p tcp --dport 22 -j DROP 在第2条规则前插入一条规则
iptables -D INPUT 1 删除INPUT链中的第一条规则
iptables -P INPUT DROP 设置默认策略为拒绝所有连接
iptables -P INPUT ACCEPT 设置默认策略为允许已建立的规则进行连接
iptables -h 查看帮助信息
man iptables 查看iptables手册
4、规则的匹配条件
可直接使用,不依赖于其他的条件或扩展模块
包括网络协议、IP地址、网络接口等匹配方式
iptables -t filter INPUT -s 192.168.0.0/24 -j REJECT
隐含条件匹配
一般需要以特定的协议匹配作为前提,包括端口、TCP标记、ICMP类型等匹配方式,源端口 2000以上的随机端口
显式条件匹配
需要使用“-m扩展模块”的形式明确指定匹配方式
5、举例说明
1、拒绝192.168.0.1访问web服务
Iptables -A INPUT -s 192.168.0.1 -p tcp --dport 80 -j REJECT
2、拒绝192.168.0.0/24ping通服务器
iptables -A INPUT -s 192.168.0.0/24 -p icmp -j REJEC
3、允许192.168.1.0/24访问服务器的21与80端口
iptables -A INPUT -s 192.168.1.0/24 -m multiport -p tcp --dports 21,80 -j ACCEPT
6、练习:
1、建立规则:
iptables -A INPUT -p icmp -j DROP
iptables -A OUTPUT -p udp --sport 25 -j DROP
iptables -I INPUT -s 192.168.0.0/24 -j REJECT
2、删除规则:
Iptables -D INPUT -p icmp -j DROP
iptables -D INPUT 1
3、基于TCP包的目的端口来匹配包
iptables -I INPUT 2 -p tcp --dport 80 -j ACCEPT
4、基于目标网络来匹配包
iptables -I OUTPUT -d 192.168.1.0/24 -j ACCEPT
5、以包离开本地所使用的网络来匹配
iptables -A OUTPUT -o eth1 -j ACCEPT
1、查看nat表中所有链的规则
iptables -t nat -L OUTPUT
2、查看filter表中FORWARD链的规则
iptables -t filter -L FORWARD
3、为filter表的INPUT链添加一条规则,规则为拒绝所有使用ICMP协议的数据包
iptables -A INPUT -p icmp -j DROP将数据包丢弃,不回应
REJECT丢弃并回应
4、为filter表的INPUT链添加一条规则,规则为允许访问TCP协议的80端口的数据包通
iptables -A INPUT -p tcp --dport 80 -j ACCEP
5、在filter表中INPUT链的第2条规则前插入一条新规则,规则为不允许访问TCP协议的53端口的数据包通过。
查看:iptables -L -n --line-number (显示规则的序号:num)
iptables -I INPUT 2 -p tcp --dport 53 -j DOP
6、在filter表中INPUT链的第1条规则前插入一条新规则,规则为允许源IP地址属于172.16.0.0/16网段的数据包通过
iptables -I INPUT 1 -s 172.16.0.0/16 -j ACCEPT
7、删除filter表中的第2条规则。
iptables -D INPUT
8、清除filter表中INPUT链的所有规则。
iptables -t filter -F INP
9、禁止员工访问域名为www.xxxx.org的网站(域名必须存在,且能被解析,否则
会出错)
iptables -A FORWARD -d [www.xxxx.org](http://www.xxxx.org) -j DROP
iptables -A INPUT -d [www.xxxx.org](http://www.xxxx.org) -j OP
10、禁止员工访问IP地址为212.1.2.3的网站。
iptables -A FORWARD -d 212.1.2.3 -p tcp --port 80 -j DRO
补充:
备份规则集:iptables-save > /etc/iptables-save
恢复规则集:iptables-restore < /etc/iptables-save
保存:service iptables save
三、综合案例
NAT:网络地址转换
源地址转换(SNAT):通常指私有地址转换成公有地址,内网访问互联网。
目标地址转换(DNAT):公网地址转换成私有地址,互联网访问内网服务器。
假如某公司需要Internet接入,由ISP分配IP地址202.112.113.112。采用iptables作为NAT服务器接入网络,内部采用192.168.1.0/24地址,外部采用202.112.113地址。为确保案例需要配置防火墙功能,要求内部web服务器192.168.1.100通过端口映射方式对外提供服务。网络拓朴图如下:
SNAT:源地址转换,通常指私有地址转换为公有地址,(内部数据发往外网的数据)对应的链是postrouting(路由规则后的动作)
DNAT:目标地址转换,通常指公有地址转换为私有地址,(外网数据发往内网的数据)
对应的链是prerouting(路由规则前的动作)
局域网内的web服务器192.168.1.100
Linux网关服务器:eth0:202.112.113.112 eth1:192.168.1.1
Inetrnet中的客户机:202.113.111
推荐实现步骤:
1、确认已开启网关的路由转发功能
vim /etc/sysctl.conf
sysctl -p
2、添加使用DNAT策略的防火墙规则
iptables -t nat -A PREROUTING -i eth1 -d 10.1.1.1 -p tcp --dport 80 -j DNAT --to-destination 192.168.10.1
3、源地址转换
客户端的网关--》防火墙的内网地址--》防火墙开转发
防火墙SNAT规则的操作:
iptables -t nat -I POSTROUTING -s 192.168.100.0/24 -j SNAT --to-source 172.16.100.20
开启转发:
sed -i 's/net.ipv4.ip_forward = 0/net.ipv4.ip_forward = 1/' /etc/sysctl.conf
sysctl -p
测试效果:
在客户端ping 172.16.100.10能ping通 。
去互联网机器上查看访问的ip地址是防火墙的外网地址。172网段的。
DNAT目的地址转换,意为把外网地址转换成私网地址。
DNAT是destination network address translation的缩写
当互联网上的用户来访问公司内网的服务器的时候,把公网的ip地址转换成公司的内网ip地址,当在服务器查看的时候发现是内网地址来访问的,这就是DNAT的作用。
| 互联网客户端 | 防火墙 | 内网服务器 |
| ----------------- | ------------------- | --------------- |
| IP:172.168.100.2 | 外网:172.168.100.1 | IP:192.168.1.2 |
| GW:172.168.100.1 | 内网:192.168.1.1 | GW:192.168.1.1 |
开启:转发
iptables -t nat -I PREROUTING -d 172.168.100.1 -j DNAT --to-destination 192.168.1.2
测试ping通了。
例:200台客户机,IP地址范围为192.1610.1.1-192.1610.1.254,掩码为255.255.255.255.0。Mail服务器:IP为192.1610.1.254/24;Ftp服务器:IP为192.1610.1.253/24;Web服务器:IP为192.1610.1.25/24。公司网络拓扑图如图所示。
需求分析
公司的内部网络为了保证安全性,首先要删除所有规则设置,并将默认规则设置为DROP,然后开启防火墙对于客户机的访问限制,打开Web、Msn、QQ以及mail的相应端口,并允许外部客户端登录Web服务器的80、22端口。
策略配置:
停掉firewalld防火墙以免冲突 并且下载iptables防火墙
(1)配置默认策略
删除策略
设置默认策略
(2)允许回环地址
(3)连接状态设置
(4)设置80端口转发
(5)允许DNS查询
(6)允许访问服务器的SSH
(7)不允许内网主机登录MSN和QQ
QQ能够使用TCP80、8000、4000登录,MSN通过TCP1863、443验证。需要禁止这些端口的FORWARD转发,即可以。
(8)允许内网主机收发邮件
客户端发送邮件时访问邮件服务器TCP25端口,接收邮件时访问,可能使用的端口则较多,UDP协议以及ICP协议的端口:110,143,993以及995,如下所示: