安全防御
一、安全防御概述
1. 常见的攻击手段
拒绝服务(DOS):通过大量访问请求使服务器资源耗尽,无法向正常用户处理请求连接。常见解决手段使用云服务商的流量清洗功能。
口令破解:常用攻击手法俗称“跑字典”,常用解决方案设置登录错误次数限制
已知漏洞:通过已知漏洞进行数据获取或提权,常见解决手段定时更新防御性补丁
欺骗权限用户:又称社会工程学,通过欺骗权限用户得到授权资格的方式
2. 常见的安全防御设备
基础类防火墙:主要实现包过滤防火
DS类防火墙:入侵检测系统,提供报告和事后监督为主
IPS类防火墙:入侵防御系统,分析数据包内容,根据模式匹配去阻断非法访问
主动安全类防火墙:对特定服务类型进行专项防御,常见设备有waf、daf
二、基础类防火墙
1. 什么是防火墙
工作在主机边缘或者网络边缘处对数据报文进行检测,并且能够根据事先定义好的规则,对数据报文进行相应处理的模块。
2. 防火墙的分类
结构
软件:iptables、firewalld
硬件:华为、网御
工作机制
包过滤防火墙:源地址 目的地址 源端口 目标端口 连接状态
应用层防火墙:URL
模块
内核态:netfilter
用户态:iptables、firewalld
3. iptables 工作结构
4. iptables 历经的构造变化
5. iptables 相关原理
四表五链功能性
规则链:承载防火墙规则
1)入站:INPUT
2)出站:OUTPUT
3)转发:FORWARD
4)路由前应用规则:修改目标地址 PREROUTING
5)路由后应用规则:修改源地址 POSTROUTING
规则表:承载防火墙链
1)raw:状态跟踪
2)mangle:标记TTL
3)nat:实现地址转换
4)filter:过滤
防火墙相关顺序
规则匹配顺序:由上至下,匹配即停止
表应用顺序:raw>mangle>nat>filter
链应用顺序
入站:PREROUTING>INPUT
出站:OUTPUT>POSTROUTING
转发:PREROUTING>FORWARD>POSTROUTING
6. iptables 语法规则
6.1 书写规则
iptables [-t 表名] 选项 [链名] [条件] [-j 控制类型]
注意事项:
1. 不指定表名时,默认指filter 表 2. 不指定链名时,默认指表内的所有链 3. 除非设置链的默认策略,否则必须指定匹配条件 4. 选项、链名、控制类型使用大写字母,其余均为小写
6.2 常见动作类型
ACCEPT:允许通过
DROP:直接丢弃,不给出任何回应
REJECT:拒绝通过,必要时给出提示
LOG:记录日志信息,然后传给下一条规则继续匹配
SNAT:修改数据包源地址
DNAT:修改数据包目的地址
REDIRECT:重定向
6.3 常见选项
6.4 配型类型分类
通用匹配
可直接使用,不依赖于其他条件或扩展
包括网络协议、IP地址。网络接口等条件
隐含匹配
要求以特定的协议匹配作为前提
包括端口、TCP标记、ICMP类型等条件
显式匹配
要求以"-m 扩展模块"的形式明确指出类型
包括多端口、MAC地址、IP范围、数据包状态等条件
6.4.1 通用匹配
常见的通用匹配条件
协议匹配:-p 协议名
地址匹配:-s 源地址、-d 目的地址
接口匹配:-i 入站网卡、-o 出站网卡
示例
# iptables -A FORWARD -s 192.168.1.101 -jREJECT # iptables -I INPUT -s 10.20.30.0/24 -j DROP # iptables -I INPUT -p icmp -j DROP # iptables -A FORWARD -p ! icmp -j ACCEPT # iptables -A INPUT -i ens33 -s 192.168.0.0/12 -j DROP
6.4.2 隐含匹配
常见的隐含匹配条件
端口匹配:--sport 源端口、--dport 目的端口
ICMP类型匹配:--icmp-type ICMP类型
示例
# iptables -A FORWARD -s 192.168.160.0/24 -p udp --dport 53 -j ACCEPT # iptables -A INPUT -p tcp --dport 20:21 -j ACCEPT # iptables -A INPUT -p icmp --icmp-type 8 -j DROP # iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT # iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT # iptables -A INPUT -p icmp -j DROP
6.4.3 显式匹配
常见显式匹配条件
多端口匹配
-m multiport --sport 源端口列表
-m multiport --dport 目标端口列表
IP范围匹配
-m iprange --src-range IP范围
MAC地址匹配
-m mac --mac-source MAC地址
状态匹配
-m state --state 连接状态
示例
# iptables -A INPUT -p tcp -m multiport --dport 25,80,110,443 -j ACCEPT # iptables -A FORWARD -p tcp -m iprange --src-range 192.168.80.131-192.168.80.134 -j ACCEPT # iptables -A INPUT -m mac --mac-source 00:0c:29:91:26:ef -j DROP # iptables -P INPUT DROP # iptables -I INPUT -p tcp -m multiport --dport 80-88,8080 -j ACCEPT # iptables -I INPUT -p tcp -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
SNAT 规则
SNAT 策略的典型应用环境:局域网主机共享单个公网 IP 地址接入 Internet
SNAT 策略的原来
源地址转换,Source Network Address Translation
修改数据包的源地址
SNAT 网络拓扑
启动SNAT 转换代码记录
前提条件
局域网主机正确设置IP地址/子网掩码
局域网各主机正确设置默认网关地址
Linux网关支持IP 路由转发
实现方法:编写SNAT 转换规则
# iptables -t nat -A POSTROUTING -s 192.168.160.0/24 -o ens33 -j SNAT --to-source 192.168.80.133
MASQUERADE-- 地址伪装
适合于外网IP地址非固定的情况
对于ADSL拨号连接,接口通常为ppp0、ppp1
将SNAT 规则改为 MASQUERADE 即可
实现
# iptables -t nat -A POSTROUTING -s 192.168.160.0/24 -o ens33 -j MASQUERADE
DNAT 规则
DNAT 策略的典型应用环境:在Internet 中发布位于企业局域网内的服务器
DNAT 策略的原理
目标地址转换,Destination Network Address Translation
修改数据包的目标地址
DNAT 网络拓扑
启动DNAT 转换代码记录
前提条件
局域网的web 服务器能访问Internet
网关的外网IP 地址有正确的DNS解析记录
Linux网关支持IP路由转发
实现方法:编写DNAT 转换规则
# iptables -t nat -A PREROUTING -i ens33 -d 218.29.30.31 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.6 # iptables -t nat -A PREROUTING -i ens33 -d 192.168.80.133 -p tcp --dport 80 -j DNAT --to-destination 192.168.160.134
常见的iptables 相关命令
导出(备份)规则:iptables-save 工具,可结合重定向输出保存到指定文件
导入(还原)规则:iptables-restore 工具。可结合重定向输入指定规则来源
规则永久生效:
iptables save
centos7 使用iptables
# rpm -e --nodeps firewalld # yum -y install iptables-services # systemctl start iptables # systemctl enable iptables
常用iptables 配置脚本
#!/bin/bash PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin export PATH function support_distro() { if [ -z "`egrep -i "centos" /etc/issue`" ];then echo "Sorry,iptables script only support centos system now." exit1 fi } support_distro echo"============================iptables configure============================================" # Only support CentOS system # 获取SSH端口 if grep "^Port" /etc/ssh/sshd_config>/dev/null;then sshdport=`grep "^Port" /etc/ssh/sshd_config|sed "s/Port\s//g"` else sshdport=22 fi # 获取DNS服务器IP if [ -s /etc/resolv.conf ];then nameserver1=`cat /etc/resolv.conf | grep nameserver | awk 'NR==1{print $2}'` nameserver1=`cat /etc/resolv.conf | grep nameserver | awk 'NR==2{print $2}'` fi IPT="/sbin/iptables" # 删除已有规则 $IPT --delete-chain $IPT --flush # 禁止进,允许出,允许回环网卡 $IPT -P INPUT DROP $IPT -P FORWARD DROP $IPT -P OUTPUT ACCEPT $IPT -A INPUT -i lo -j ACCEPT # 允许已建立的或相关连接的通行 $IPT -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT $IPT -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT # 限制80端口单个IP的最大连接数为10 $IPT -I INPUT -p tcp --dport 80 -m connlimit --connlimit-above 10 -j DROP # 允许80(HTTP)/873(RSYNC)/443(HTTPS)/20,21(FTP)/25(SMTP)端口的连接 $IPT -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT $IPT -A INPUT -p tcp -m tcp --dport 873 -j ACCEPT $IPT -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT $IPT -A INPUT -p tcp -m tcp --dport 20 -j ACCEPT $IPT -A INPUT -p tcp -m tcp --dport 21 -j ACCEPT $IPT -A INPUT -p tcp -m tcp --dport 25 -j ACCEPT # 允许SSH端口的连接,脚本自动侦测目前的SSH端口,否则默认为22端口 $IPT -A INPUT -p tcp -m tcp --dport $sshdport -j ACCEPT # 允许 ping $IPT -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT $IPT -A INPUT -p icmp -m icmp --icmp-type 11 -j ACCEPT # 允许DNS [ ! -z "$nameserver1" ] && $IPT -A OUTPUT -p udp -m udp -d $nameserver1 --dport 53 -j ACCEPT [ ! -z "$nameserver2" ] && $IPT -A OUTPUT -p udp -m udp -d $nameserver2 --dport 53 -j ACCEPT # 保存规则并重启IPTABLES service iptables save systemctl restart iptables echo"============================iptables configure completed============================================"