Shell ❀ 一键配置Iptables规则脚本 (HW推荐)

文章目录

  • 注意事项
  • 1. 地址列表填写规范
  • 2. 代码块
  • 3. 执行结果
  • 4. 地址与端口获取方法
    • 4.1 tcpdump抓包分析(推荐使用)
    • 4.2 TCP连接分析(仅能识别TCP连接)


注意事项

  • 请务必按照格式填写具体参数,否则会影响到匹配规则的创建,严重时会影响到业务流量!!!
  • 请务必按照格式填写具体参数,否则会影响到匹配规则的创建,严重时会影响到业务流量!!!
  • 请务必按照格式填写具体参数,否则会影响到匹配规则的创建,严重时会影响到业务流量!!!

1. 地址列表填写规范

ip.txt文件内容填写案例:

ip port 						# 单个地址和单个端口格式
ip port1,port2...				# 单个地址和多个端口格式
ip/net port						# 网段地址和单个端口格式
ip/net port1,port2...			# 网段地址和多个端口格式
  • 地址文件名称为ip.txt,若需替换则修改代码块第9if test -s ./ip.txt;ip.txt即可;
  • 多个IP地址请务必隔行输出;
  • 添加IP地址不可重复,但支持包含关系;
  • 支持CIDR格式添加IP地址;
  • 多个端口使用 [英文格式逗号] 间隔;
  • IP地址与端口之间使用 [空格] 字符进行间隔。
  • 若不了解该服务,可先查阅iptables服务详解

2. 代码块

#!/bin/bash

file_path=$(dirname "$0")
cd $file_path

chain="IP_WHITELIST"											# 创建链名称为:IP_WHITELIST
ip_list=""

if test -s ./ip.txt; then
	cat ip.txt | awk '{print$1}' > ./ip_temp.txt				# IP地址去重
	ip_list=($(sort -u ./ip_temp.txt))
	rm -f ./ip_temp.txt
fi

function create_rule(){
	# 注意iptables插入顺序
	iptables -w -t filter -N $chain								# 创建新链
	iptables -w -t filter -I $chain -j DROP						# 匹配所有流量,执行动作拒绝
	for ip in ${ip_list[@]}; do
		dports=`cat ip.txt | grep "$ip" | awk '{print$2}'`
		if [ -z "$dports" ]; then								# 判断端口列表是否为空
			iptables -w -t filter -I $chain -s $ip -j ACCEPT
		else
			iptables -w -t filter -I $chain -s $ip -p tcp -m multiport --dports $dports -j ACCEPT
		fi
	done
	echo -e "\033[32miptables service rule crete complete!\033[0m" 
}

function delete_rule(){
	# 清理iptables创建的匹配规则
	while iptables -w -t filter -D INPUT -p tcp -j $chain 2>/dev/null; do 		# 忽略删除匹配规则错误信息
		sleep 0.1s	
	done
	# 
	iptables -w -t filter -F $chain 2>/dev/null
    iptables -w -t filter -X $chain 2>/dev/null
    echo -e "\033[32miptables service rule cleanup complete!\033[0m" 
}

function backup_rule(){
	# 备份当前环境下iptables规则到指定目录下临时文件
	iptables-save > ./iptables_bk_$(date +"%Y-%m-%d %H:%M:%S")	# 以时间指定文件名称
	echo -e "\033[32miptables service rule backup complete,path is "$file_path"/iptables_bk_\033[0m"
}

case ${1:-help} in 
	"create" )
		# 先备份规则,再清理规则,后创建新规则
		backup_rule && delete_rule && create_rule
		;;
	"delete" )
		# 先备份规则,再清理规则
		backup_rule && delete_rule
		;;
	"backup" )
		# 直接备份规则
		backup_rule
		;;
	"help" )
		# 可用参数说明
		echo -e "\033[31m  Usage: \n\t$0 options is [create/delete/backup/help]\033[0m"
		;;
esac

3. 执行结果

Shell ❀ 一键配置Iptables规则脚本 (HW推荐)_第1张图片
ip.txt配置参考
Shell ❀ 一键配置Iptables规则脚本 (HW推荐)_第2张图片

4. 地址与端口获取方法

4.1 tcpdump抓包分析(推荐使用)

tcpdump -i any -s56 -lnnqt 'inbound and (dst port 2181 or dst port 2888 or dst port 3888)' | cut -d'.' -f1-4 | awk '!a[$NF]++ {print $NF; fflush();}' | tee <file_path>/ip.txt

命令解析

  • tcpdumo:-i any 抓取所有接口数据包,-s56 截取报文前56字节内容,-lnnqt 使用数字格式显示IP地址和端口号,inbound 只抓取入站数据包,dst port 目标端口列表
  • cut:切割出IP地址
  • awk:对每个IP地址进行去重操作

4.2 TCP连接分析(仅能识别TCP连接)

ss -nat | grep -E ":2181|2888|3888" | awk '{print $NF}' | grep -Eo "([0-9]{1,3}[\.]){3}[0-9]{1,3}" | awk '!a[$0]++' | tee <file_path>/ip.txt

命令解析

  • ss:查找当前系统中所有TCP连接的状态信息,并同时过滤端口
  • awk:第一个为输出最后一行信息并过滤出IP地址,第二个为对每个IP地址进行去重操作

你可能感兴趣的:(Linux,&,Shell,linux,服务器,网络)