什么是防火墙
- 一道保护性的安全屏障
- 保护、隔离
Linux包过滤防火墙
- RHEL7默认使用firewalld做为防火墙
- 但firewalld底层还是调用包过滤防火墙iptables
一、安装防火墙软件
[root@ip52 ~]# systemctl stop firewalld
[root@ip52 ~]# systemctl disable firewalld
[root@ip52 ~]# yum -y install iptables-services
[root@ip52 ~]# systemctl restart iptables
iptables的表、链结构
1)iptables的4个表(区分大小写):
iptables默认有4个表,nat
表(地址转换表)、filter
表(数据过滤表)、raw
表(状态跟踪表)、mangle
表(包标记表)。
2)iptables的5个链(区分大小写): //数据包传输的方向
INPUT
链(入站规则)
OUTPUT
链(出站规则)
FORWARD
链(转发规则)
PREROUTING
链(路由前规则)
POSTROUTING
链(路由后规则)
包过滤匹配流程
- 规则链内的匹配顺序
- 顺序对比,匹配即停止(LOG除外)
- 若无任何匹配,则按该链的默认策略处理
iptables用法解析
iptables基本用法
- 管理程序位置
/sbin/iptables
- 指令组成
iptables [-t表名] 选项 [链名] [条件] [-j目标操作]
注意事项/整体规律
- 可以不指定表,默认为filter表
- 可以不指定链,默认为对应表的所有链
- 如果没有匹配的规则,则使用防火墙默认的规则
- 选项/链名/目标操作用大写字母,其余都小写字母
基本的目标操作
- ACCEPT:允许通过/放行
- DROP:直接丢弃,不给出任何回应
- REJECT:拒绝通过,必要时会给出提示
- LOG:记录日志,然后传给下一条规则
常用的管理选项
(1)往该主机的filter(数据包过滤表)表中插入INPUT(入站)链,写入规则是拒绝(REJECT)所有从本机进入的icmp包(ping)
[root@ip51 ~]# iptables -t filter -I INPUT -p icmp -j REJECT
(2)测试
[root@ip52 ~]# ping 192.168.4.51
PING 192.168.4.51 (192.168.4.51) 56(84) bytes of data.
From 192.168.4.51 icmp_seq=1 Destination Port Unreachable
(3)往本机filter表中的第一个序号处插入一条规则,允许22端口进
[root@ip51 ~]# iptables -t filter -I INPUT 1 -p 22 -j ACCEPT
(4)查看filter表中所有的规则
[root@ip51 ~]# iptables -t filter -nL --line-numbers
(5)清除filter表中编号为1的规则
[root@ip51 ~]# iptables -t filter -D INPUT 1
(6)清除filter表的所有规则
[root@ip51 ~]# iptables -t filter -F
[root@ip51 ~]# iptables -F //默认清空filter表
(7)清空四个表的规则
[root@ip51 ~]# iptables -t filter -F
[root@ip51 ~]# iptables -t nat -F
[root@ip51 ~]# iptables -t mangle -F
[root@ip51 ~]# iptables -t raw -F
设置默认规则
- 所有链的初始默认规则均为ACCEPT
- 通过-P选项可重置默认规则
ACCEPT
或者DROP
防护类型及条件
根据防火墙保护的对象不同,防火墙可以分为主机型防火墙与网络型防火墙,如图所示。
主机型防火墙,主要保护的是服务器本机(过滤威胁本机的数据包)。
网络防火墙,主要保护的是防火墙后面的其他服务器,如web服务器、FTP服务器等。
开启内核的IP转发
- 做为网关、路由的必要条件
[root@ip51 ~]# echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf
或者
[root@ip51 ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
基本的匹配条件
- 通用匹配
可直接使用,不依赖于其他条件或扩展
包括网络协议、IP地址、网络接口等条件 - 隐含匹配
要求以特定的协议匹配作为前提
包括端口、TCP标记、ICMP类型等条件
注:需要条件取反时,用前面加!,如 !-p tcp,就是除tcp之外的协议
(1)配置51主机往filter表中的INPUT链中添加策略,允许tcp协议的22端口的数据包通过
[root@ip51 ~]# iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT
(2)将本机的默认策略修改为DROP
[root@ip51 ~]# iptables -t filter -P INPUT DROP
(3)查看策略
[root@ip51 ~]# iptables -t filter -nL --line-numbers
(4)使用50主机ssh 51主机
[root@ip50 ~]# ssh 192.168.4.51
(5)禁止50主机ssh 51
[root@ip51 ~]# iptables -t filter -I INPUT -s 192.168.4.50 -p tcp --dport 22 -j DROP
(6)允许外网访问本机的80端口
[root@ip51 ~]# iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT
(7)将防火墙配置规则永久保存
[root@ip51 ~]# iptables-save > /etc/sysconfig/iptables
(8)由于OUTPUT默认的规则是ACCEPT,所以添加如下规则,允许本机的ping包进来,就会达到本机能ping外主机,外主机不能ping本机的效果
[root@ip51 ~]# iptables -t filter -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
(9)永久保存配置
[root@ip51 ~]# iptables-save > /etc/sysconfig/iptables
扩展匹配
扩展条件的方法
- 前提条件
有对应的防火墙模块支持 - 基本用法
-m 扩展模块 --扩展条件 条件值
示例:-m mac --mac-source 00:0C:29:74:BE:21
常见的扩展条件类型
选项 | 用法 |
---|---|
MAC地址匹配 | -m mac --mac-source MAC地址 |
多端口匹配 | -m multiport --sports 源端口列表 |
-m multiport --dports 目标端口列表 | |
IP范围匹配 | -m iprange --src-range IP1-IP2 |
-m iprange --dst-range IP1-IP2 |
(1)添加多端口的过滤规则
[root@ip51 ~]# iptables -t filter -I INPUT -p tcp -m multiport --dports 22,80 -j ACCEPT
(2)删除单条的22跟80的tcp的过滤规则,使用上一条规则代替
[root@ip51 ~]# iptables -t filter -D INPUT 3
(3)添加允许250~254主机的ping包进来
[root@ip51 ~]# iptables -t filter -I INPUT -p icmp --icmp-type echo-request -m iprange --src-range 192.168.4.250-192.168.4.254 -j ACCEPT
(4)根据MAC地址封锁主机
[root@ip51 ~]# arp -n //获取ping过本主机的其他主机对应的mac地址
[root@ip51 ~]# iptables -t filter -I INPUT 4 -p icmp --icmp-type echo-request -m mac --mac-source 52:54:00:37:78:11 -j DROP //添加到上一条配置ip范围的过滤规则之前
NAT转换原理
私有地址的局限性
- 从局域网访问互联网的时候
比如看网页、收邮件、。。。。。
源地址为私有地址,服务器如何正确的给出回应?
SNAT源地址转换
- Source Network Address Translation
修改数据包的源地址
仅用于nat表的POSTROUTING链
一,修改2-54主机网关(eth0:192.168.4.54,eth1:192.168.2.54)
[root@ip2-54 ~]# systemctl stop NetworkManager
//设置网关
[root@ip2-54 ~]# route add default gw 192.168.2.52
//删除网关
[root@ip2-54 ~]# route add default gw 192.168.2.52
//查看网关
[root@ip2-54 ~]# route -n
二,修改网关设备的防火墙规则(eth0:192.168.4.52,eth1:192.168.2.52)
(1)开启路由转发功能
[root@ip52 ~]# echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf
(2)配置防火墙的nat规则
[root@ip52 ~]# iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -p tcp --dport 80 -j SNAT --to-source 192.168.4.52
[root@ip52 ~]# iptables-save > /etc/sysconfig/iptables
[root@ip52 ~]# iptables -t nat -nL
(3)客户端测试
[root@ip2-54 ~]# curl 192.168.4.51
地址伪装策略
- 共享动态公网IP地址实现上网
主要针对外网接口的IP地址不固定的情况
将SNAT改为MASQUERADE即可
对于ADSL宽带拨号连接,网络接口可写为ppp+
[root@ip52 ~]# iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -o eth0 -j MASQUERADE //指定网关域名跟外网网卡(eth0)