文章目录
防火墙
- 防火墙指(firewall)的是一个由软件和硬件设备组合而成、在内部网和外部网之间、专用网与公共网之间的界面上构造的保护屏障.是一种获取安全性方法的形象说法,它是一种计算机硬件和软件的结合,使Internet与Intranet之间建立起一个安全网关(Security Gateway),从而保护内部网免受非法用户的侵入,防火墙主要由服务访问规则、验证工具、包过滤和应用网关4个部分组成,防火墙就是一个位于计算机和它所连接的网络之间的软件或硬件。该计算机流入流出的所有网络通信和数据包均要经过此防火墙。
- 防火墙是一种隔离工具,工作于主机和网络边缘,对于出入本机或网络的报文,根据事先定义的检查规则左匹配检验,对于能被匹配的报文做出处理的组件。
- Firewall 分主机防火墙和网络防火墙,从实现方式分软件防火墙和硬件防火墙;防火墙是对报文的过滤和处理,首先我得知道报文的发送是单向的,这就涉及到源和目标的问题,如何理解什么是源,什么是目标
A —————发送报文—————>B A:源主机,源IP, B:目标主机,目标IP
A<—————收到报文响应———B A:目标主机,目标IP, B:源主机,源IP
包过滤防火墙
- 包过滤防火墙是用一个软件查看所流经的数据包的包头(header),由此决定整个包的命运。它可能会决定丢弃(DROP)这个包,可能会接受(ACCEPT)这个包(让这个包通过),也可能执行其它更复杂的动作。
- 包过滤是一种内置于Linux内核路由功能之上的防火墙类型,其防火墙工作在
网络层
四表五链
表
- filter(过滤表):过滤数据包
- nat(地址转换表):network address translation,用于网络地址转换(IP、端口)
- mangle(包标记表):修改数据包的服务类型、TTL、并且可以配置路由实现QOS
- raw(状态跟踪表):决定数据包是否被状态跟踪机制处理
链
- INPUT:进来的数据包应用此规则链中的策略
- FORWARD:转发数据包时应用此规则链中的策略
- OUTPUT:外出的数据包应用此规则链中的策略
- PREROUTING:对数据包作路由选择前应用此链中的规则(所有的数据包进来的时侯都先由这个链处理)
- POSTROUTING:对数据包作路由选择后应用此链中的规则(所有的数据包出来的时侯都先由这个链处理)
表实现的链
包过滤匹配流程
- 规则链内的匹配顺序
– 顺序对比,匹配即停止(LOG除外)
– 若无任何匹配,则按该链的默认策略处理
iptables用法解析
- 管理程序位置
/sbin/iptables
iptabels基本用法
- 注意事项/整体规律
– 可以不指定表,默认为filter表
– 可以不指定链,默认对应表的所有链
– 如果没有匹配的规则,则使用防火墙默认规则
– 选项/链名/目标操作 用 大写字母,其余都小写
iptabels语法格式
- iptables [-t 表名] 选项 [链名] [条件] [-j 目标操作]
- iptables命令的常用选项
iptables命令
-L 列出指定链上的所有规则
-t 指定表,默认为filter
-n 以数字格式显示地址和端口号
-v 显示详细信息
–line-number 显示规则编号
-F 清空规则链,省略链表示清空指定表上的所有链
-N 创建新的自定义规则链
-X 删除用户自定义的空的规则链
-P 指定链的默认策略,包括accept、drop
-A 将新规则追加至指定链的尾部
-I 将新规则插入链的指定位置
-D 删除指定链上的指定规则
匹配规则
-s 指定源ip(也可以指定网段)
-d 指定目标ip(也可以指定网段)
-p 指定协议
–dport 指定端口
-j jump至指定的targrt
-j target:jump至指定的target
ACCEPT:允许通过/放行
DROP:丢弃
REJECT:拒绝
LOG:记录日志
RETURN:返回调用链
REDIRECT:端口重定向
MARK:做防火墙标记
DNAT:目标地址转换
SNAT:源地址转换
MASQUERADE:地址伪装
防火墙规则实例
- 清空所有策略:
iptables -F
#默认filter表
iptables -t nat -F
#nat表 - 自定义一个链:
iptables -I INPUT -p udp -j ACCEPT
#插入规则至filter表中的INPUT链的开头,允许任何人使用UDP协议访问本机
iptables -I INPUT 2 -p icmp -j ACCEPT
#插入规则至filter表中的INPUT链的第2行,允许任何人使用ICMP协议访问本机
iptables -t filter -A INPUT -p tcp -j ACCEPT
#追加规则至filter表中的INPUT链的末尾,允许任何人使用TCP协议访问本机 - 查看iptables防火墙规则
iptables -nL
# 查看filter表所用链的规则
iptables -nL INPUT --line-numbers
#仅查看INPUT链的规则,同时显示行号 - 删除规则
iptables -D INPUT 3
#删除filter(默认)表中INPUT链的第3条规则
iptables -t filter -D INPUT 3
#删除filter表中INPUT链的第3条规则 - 设置防火墙默认规则
iptables -t filter -P INPUT DROP
- 保存规则
iptables-save > /etc/sysconfig/iptables
filter过滤和转发控制
开启内核的IP转发
Linux内核默认支持软路由功能,通过修改内核参数即可开启或关闭路由转发功能
echo 0 > /proc/sys/net/ipv4/ip_forward #关闭路由转发
echo 1 > /proc/sys/net/ipv4/ip_forward #开启路由转发
//注意以上操作仅当前有效,计算机重启后无效
echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf
#修改/etc/sysctl.conf配置文件,可以实现永久有效规则
iptables防火墙规则的条件
iptables防火墙可以根据很多很灵活的规则进行过滤行为,具体常用的过滤条件如下表
主机型防火墙案例
iptables -I INPUT -p tcp --dport 80 -j REJECT
iptables -I INPUT -s 192.168.2.100 -j REJECT
iptables -I INPUT -d 192.168.2.5 -p tcp --dport 80 -j REJECT
iptables -I INPUT -i eth0 -p tcp --dport 80 -j REJECT
iptables -A INPUT -s 192.168.4.100 -j DROP
//丢弃192.168.4.100发给本机的所有数据包
iptables -A INPUT -s 192.168.2.0/24 -j DROP
//丢弃192.168.2.0/24网络中所有主机发送给本机的所有数据包
iptables -A INPUT -s 114.212.33.12 -p tcp --dport 22 -j REJECT
//拒绝114.212.33.12使用tcp协议远程连接本机ssh(22端口)
网络型防火墙案例
- 打开proxy的路由转发功能
- 实验拓扑图:
添加网关的命令
- 方法一(临时)
route add default gw 192.168.4.5
- 方法二(永久)
nmcli connection modify eth0 ipv4.gateway 192.168.4.5
nmcli connection up eth0
- 方法三(永久)
vim /etc/sysconfig/network-scripts/ifcfg-eth0
GATEWAY=192.168.4.200 #添加这一行
- 修改防火墙规则
iptables -P FORWARD DROP #设置filter表FOEWARD链默认DROP规则
iptables -A FORWARD -p tcp --sport 80 -j ACCEPT #添加filter表FOEWARD链通过tcp协议中原端口为80的规则
iptables -A FORWARD -p tcp --dport 80 -j ACCEPT #添加filter表FOEWARD链通过tcp协议中目的端口为80的规则
- 一次定义多个端口
iptables -A FORWARD -p tcp -m multiport --sports 22,80,8080,3306 -j ACCEPT
iptables -A FORWARD -p tcp -m multiport --dports 22,80,8080,3306 -j ACCEPT
测试结果,client1可以访问web1的tcp协议80等等端口的服务
扩展匹配
扩展条件的方法
- 前提条件
– 有对应的防火墙模块支持 - 基本用法
– -m 扩展模块 --扩展条件 条件值
常见的扩展条件类型
选项 | 用法 |
---|---|
MAC地址匹配 | -m mac --mac-source MAC地址 |
多端口匹配 | -m multiport --sports 源端口列表 |
多端口匹配 | -m multiport --dports 目标端口列表 |
IP范围匹配 | -m iprange --src-range IP1-IP2 |
IP范围匹配 | -m iprange --dst-range IP1-IP2 |
扩展案例
根据MAC地址过滤
iptables -A INPUT -p tcp --dport 22\
> -m mac --mac-source 52:54:00:00:00:0b -j DROP
#拒绝52:54:00:00:00:0b这台主机远程本机
基于多端口设置过滤规则
iptables -A INPUT -p tcp \
> -m multiport --dports 20:22,25,80,110,143,16501:16800 -j ACCEPT
#一次性开启20,21,22,25,80,110,143,16501到16800所有的端口
根据IP地址范围设置规则
iptables -A INPUT -p tcp --dport 22 \
> -m iprange --src-range 192.168.4.10-192.168.4.20 -j ACCEPT
#允许从 192.168.4.10-192.168.4.20 登录
注意,这里也可以限制多个目标IP的范围,参数是--dst-range,用法与--src-range一致。
iptables -A INPUT -p tcp --dport 22 -s 192.168.4.0/24 -j DROP
禁止从 192.168.4.0/24 网段其他的主机登录
配置SNAT实现共享上网
SANT源地址转换
- Source Network Address Translation
– 修改数据包的源地址
– 仅用于nat表的POSTROUTING
设置防火墙规则,实现IP地址的伪装(SNAT源地址转换)
- 确保proxy主机开启了路由转发功能
- 设置防火墙规则,实现SNAT地址转换
iptables -t nat -A POSTROUTING \
> -s 192.168.4.0/24 -p tcp --dport 80 -j SNAT --to-source 192.168.2.5
- 登陆web主机查看日志
tail /var/log/httpd/access_log
.. ..
192.168.2.5 - - [12/Aug/2018:17:57:10 +0800] "GET / HTTP/1.1" 200 27 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"
通过日志会发现,客户端是先伪装为了192.168.2.5之后再访问的web服务器!
- 扩展知识,对于proxy外网IP不固定的情况可以执行下面的地址伪装,动态伪装IP。
iptables -t nat -A POSTROUTING \
> -s 192.168.4.0/24 -p tcp --dport 80 -j MASQUERADE
最后,所有iptables规则都是临时规则,如果需要永久保留规则需要执行如下命令:
service iptables save
或者
iptables-save > /etc/sysconfig/iptables