iptables详解
大约 6 分钟
防火墙相关概念
- 从逻辑上讲。防火墙可以大体分为主机防火墙和网络防火墙。
主机防火墙:针对于单个主机进行防护。
网络防火墙:往往处于网络入口或边缘,针对于网络入口进行防护,服务于防火墙背后的本地局域网。
网络防火墙和主机防火墙并不冲突,可以理解为,网络防火墙主外(集体), 主机防火墙主内(个人)。
- 从物理上讲,防火墙可以分为硬件防火墙和软件防火墙。
硬件防火墙:在硬件级别实现部分防火墙功能,另一部分功能基于软件实现,性能高,成本高。
软件防火墙:应用软件处理逻辑运行于通用硬件平台之上的防火墙,性能低,成本低。
- Linux 中的 iptables
iptables 其实不是真正的防火墙,我们可以把它理解成一个客户端代理,用户通过 iptables 这个代理,将用户的安全设定执行到对应的"安全框架"中,这个"安全框架"才是真正的防火墙,这个框架的名字叫 netfilter
netfilter 才是防火墙真正的安全框架(framework),netfilter 位于内核空间。
iptables 其实是一个命令行工具,位于用户空间,我们用这个工具操作真正的框架。
防火墙 iptables
# 安装iptables
yum install iptables-services
# 状态|启动|停止|重启|开机自启|禁止开机自启
systemctl {status|start|stop|restart|enable|disable} iptables.service
iptables -h # 查询帮助
iptables -L -n # 列出(filter表)所有规则
iptables -L -n --line-number # 列出(filter表)所有规则,带编号
iptables -L -n -t nat # 列出(nat表)所有规则
iptables -F # 清除(filter表)中所有规则
iptables -F -t nat # 清除(nat表)中所有规则
service iptables save # 保存配置(保存配置后必须重启iptables)
service iptables restart # 重启
# 禁止192.168.1.3 IP地址的所有类型数据接入
iptables -A INPUT ! -s 192.168.1.3 -j DROP
iptables -A INPUT -p tcp --dport 80 -j ACCEPT # 开放80端口
iptables -I INPUT -p tcp --dport 22:80 -j ACCEPT # 开发22-80范围的端口
iptables -I OUTPUT -p tcp --dport 80 -j DROP # 不允许80端口流出
service iptables save # 保存修改
service iptables restart # 重启防火墙,修改生效
# 防火墙开启8081端口
vi /etc/sysconfig/iptables
# 在打开的文件中加入如下内容
-A INPUT -p tcp -m state --state NEW -m tcp --dport 8081 -j ACCEPT
ipvsadm
ipvsadm 工具常用的参数选项有:
-A --add-service | 添加一条新的虚拟服务 |
---|---|
-E --edit-service | 编辑虚拟服务 |
-D --delete-service | 删除虚拟服务 |
-C --clear | 清除所有的虚拟服务规则 |
-R --restore | 恢复虚拟服务规则 |
-a --add-server | 在一个虚拟服务中添加一个新的真实服务器 |
-e --edit-server | 编辑某个真实服务器 |
-d --delete-server | 删除某个真实服务器 |
-L | -l --list | 显示内核中的虚拟服务规则 |
-n --numeric | 以数字形式显示 IP 端口 |
-c --connection | 显示 ipvs 中目前存在的连接,也可以用于分析调度情况 |
-Z --zero | 将转发消息的统计清零 |
-p --persistent | 配置持久化时间 |
--set tcp tcpfin udp | 配置三个超时时间(tcp/tcpfin/udp) |
-t | -u | TCP/UDP 协议的虚拟服务 |
-g | -m | -i | LVS 模式为:DR | NAT | TUN |
-w | 配置真实服务器的权重 |
-s | 配置负载均衡算法,如:rr, wrr, lc 等 |
--timeout | 显示配置的 tcp/tcpfin/udp 超时时间 |
--stats | 显示历史转发消息统计(累加值) |
--rate | 显示转发速率信息(瞬时值) |
## 管理虚拟服务
# 添加一个虚拟服务192.168.1.100:80,使用轮询算法
ipvsadm -A -t 192.168.1.100:80 -s rr
# 修改虚拟服务的算法为加权轮询
ipvsadm -E -t 192.168.1.100:80 -s wrr
# 删除虚拟服务
ipvsadm -D -t 192.168.1.100:80
## 管理真实服务
# 添加一个真实服务器192.168.1.123,使用DR模式,权重2
ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.123 -g -w 2
# 修改真实服务器的权重
ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.123 -g -w 5
# 删除真实服务器
ipvsadm -d -t 192.168.1.100:80 -r 192.168.1.123
## 查看统计
# 查看当前配置的虚拟服务和各个RS的权重
ipvsadm -Ln
# 查看当前ipvs模块中记录的连接(可用于观察转发情况)
ipvsadm -lnc
# 查看ipvs模块的转发情况统计
ipvsadm -Ln --stats | --rate
ipset
pset 是 iptables 的扩展,它允许你创建 匹配整个地址集合的规则。
官网:http://ipset.netfilter.org/
# 安装
yum install -y ipset
# 黑名单
ipset create blacklist hash:net maxelem 1000000
# 白名单
ipset create whitelist hash:net maxelem 1000000
# 查看已创建的ipset
ipset list
# 加入一个名单ip
ipset add blacklist 10.60.10.xx
# 去除名单ip
ipset del blacklist 10.60.10.xx
# 创建防火墙规则,与此同时,allset这个IP集里的ip都无法访问80端口(如:CC攻击可用)
iptables -I INPUT -m set –match-set blacklist src -p tcp -j DROP
iptables -I INPUT -m set –match-set whitelist src -p tcp -j DROP
service iptables save
iptables -I INPUT -m set –match-set setname src -p tcp –destination-port 80 -j DROP
# 将ipset规则保存到文件
ipset save blacklist -f blacklist.txt
ipset save whitelist -f whitelist.txt
# 删除ipset
ipset destroy blacklist
ipset destroy whitelist
# 导入ipset规则
ipset restore -f blacklist.txt
ipset restore -f whitelist.txt
# ipset的一个优势是集合可以动态的修改,即使ipset的iptables规则目前已经启动,新加的入ipset的ip也生效
Sysstat 性能监控工具
# 安装
yum install -y sysstat
# 查看版本
sar -V
sysstat 工具包包含的工具:
- iostat 工具提供 CPU 使用率及硬盘吞吐效率的数据; #比较核心的工具
- mpstat 工具提供单个处理器或多个处理器相关数据;
- pidstat: 关于运行中的进程/任务、CPU、内存等的统计信息
- sar 工具负责收集、报告并存储系统活跃的信息; #统计数据的核心工具
- sa1 工具负责收集并存储每天系统动态信息到一个二进制的文件中。它是通过计划任务工具 cron 来运行,是为 sadc 所设计的程序前端程序;
- sa2 工具负责把每天的系统活跃性息写入总结性的报告中。它是为 sar 所设计的前端 ,要通过 cron 来调用
- sadc 是系统动态数据收集工具,收集的数据被写一个二进制的文件中,它被用作 sar 工具的后端;
- sadf 显示被 sar 通过多种格式收集的数据;
- nfsiostat: NFS(Network File System)的 I/O 统计信息。
- cifsiostat: CIFS(Common Internet File System)的统计信息
iostat --help
# -c : 仅显示cpu的状态
iostat -c 1 3
# 显示扩展状态,显示出更多内容
iostat -x
## mpstat 用于多处理器系统中的CPU的利用率的统计。细化到具体某个cpu的状态时可以使用参数-P,处理器的ID从0开始
mpstat --help
mpstat -p 0 1 2
## sdac是一个搜集写入工具,并不直接回显于屏幕上
/usr/local/lib/sa/sadc --help