跳至主要內容

iptables详解

知识库编程技巧CentOSlinux大约 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 | -uTCP/UDP 协议的虚拟服务
-g | -m | -iLVS 模式为: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/open in new window

# 安装
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