前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux - 用Iptables构建主机防火墙安全

Linux - 用Iptables构建主机防火墙安全

作者头像
小小工匠
发布2024-05-26 13:57:07
620
发布2024-05-26 13:57:07
举报
文章被收录于专栏:小工匠聊架构小工匠聊架构

概述

设置主机防火墙在网络安全中具有重要意义。主机防火墙是一种软件或硬件系统,可以监控和控制进出主机的网络流量。它的作用包括:

  1. 保护主机免受未经授权的访问: 主机防火墙可以限制网络流量,防止未经授权的访问进入主机。这有助于防止恶意攻击者通过网络攻击入侵系统或窃取敏感信息。
  2. 减少攻击面: 通过仅允许特定的网络流量通过,主机防火墙可以减少系统的攻击面,从而降低系统受到攻击的可能性。它可以阻止许多常见的网络攻击,如端口扫描、拒绝服务攻击等。
  3. 监控和记录网络流量: 主机防火墙可以监控主机上的网络流量,并记录网络活动。这有助于发现潜在的安全问题,以及跟踪和调查安全事件。
  4. 加强安全策略: 通过配置主机防火墙,可以实施细粒度的安全策略,根据特定的安全要求和网络环境来限制网络流量。这使得管理员能够根据实际需求来保护主机,确保符合公司的安全标准和合规要求。

通常涉及以下步骤:

  • 选择合适的防火墙软件或硬件: 根据需求选择适合的主机防火墙产品,可以是商业产品或开源产品。
  • 配置防火墙规则: 确定哪些网络流量允许通过,哪些需要被阻止,并配置相应的防火墙规则。这通常涉及定义允许或拒绝特定端口、协议和IP地址的规则。
  • 更新和维护: 定期更新主机防火墙软件和规则,以确保及时响应新的安全威胁和漏洞。
  • 监控和审计: 对主机防火墙进行监控和审计,以确保它有效地保护系统并符合安全标准和合规要求。

通过设置主机防火墙,可以提高系统的安全性,降低受到网络攻击的风险,并保护敏感数据免受未经授权的访问。


Shell脚本实现

代码语言:javascript
复制
#!/bin/bash


# 检查iptables服务是否存在
iptables_exists=$(sudo systemctl --type=service list-unit-files | grep -i "iptables")
# 检查firewalld服务是否存在
firewalld_exists=$(sudo systemctl --type=service list-unit-files | grep -i "firewalld")
# 初始化变量
iptables_status=$(sudo service iptables status &>/dev/null; echo $?)
if [ "$iptables_exists" != "" ] && [ "$firewalld_exists" != "" ]; then
	echo "同时存在iptables和firewalld服务,未避免冲突将停用firewalld服务,请确认是否停用?(y/n)"
	read -p "请输入 'y' or 'n': " user_input
	if [ "$user_input" == "y" ]; then
		# 执行停止服务器的命令
		echo "firewalld服务正在停止..."
		sudo systemctl stop firewalld
		sudo systemctl disable firewalld
		sudo systemctl enable iptables
		sudo systemctl start iptables
		echo "firewalld服务已停用,并启用iptables"
	else
		echo "已取消操作"
		echo "请按任意键退出程序..."
		read -n 1 -s
		exit
	fi
else
	if [ "$iptables_exists" != "" ]; then
		sudo systemctl enable iptables
		sudo systemctl start iptables
	else
		echo "iptables服务不存在"
	fi
	if [ "$firewalld_exists" != "" ]; then
		echo "存在firewalld服务,当前脚本不支持firewalld防火墙配置"
	else
		echo "firewalld服务不存在"
	fi
fi
# 判断iptables是否在运行
if [ $iptables_status -eq 0 ]; then
	echo "iptables已启用"
	echo "执行此脚本前请先确认脚本中的端口是否与现场配置情况一致,不一致请根据现场情况调整!"
	echo ""
	read -p "请按任意键继续,或按Ctrl+C退出:"
	echo "请选择部署方式:"
	echo "1. 单机部署"
	echo "2. 集群部署"
	read choice

	case $choice in
		1)
			echo "执行单机部署模式下防火墙配置脚本"
			echo "服务器默认1个,若不满足可根据现场实际情况修改脚本"
			echo ""
			read -p "请按任意键继续,或按Ctrl+C退出:"
			echo "请输入服务器ip1:"
			read trusted_ip1
			
			# 允许所有流量通过
			sudo iptables -t filter -P INPUT ACCEPT
			# 清空所有规则
			sudo iptables -F
			# 允许本地回环地址和特定IP地址的流量通过
			sudo iptables -t filter -A INPUT -i lo -j ACCEPT
			# 拒绝特定端口的流量  端口最多支持13个,如果多余13个请分两行 
			sudo iptables -A INPUT -p tcp -m multiport --dport 8889,9000,9765 -j REJECT
			sudo iptables -A INPUT -p tcp -m multiport --dport 8888,9098,9765 -j REJECT
			# 允许来自特定IP地址的TCP流量
			sudo iptables -I INPUT -p TCP -m multiport --dport 8443,12345 -j DROP
			sudo iptables -I INPUT -s 127.0.0.1,$trusted_ip1 -p TCP -m multiport --dport 8443,12345 -j ACCEPT
			# 保存iptables规则
			sudo mkdir -p /etc/artisaniptables
			sudo iptables-save > /etc/artisaniptables/rules.v4

			# 开启自动重新加载,请根据自身系统,选择合适的加载时机
			sudo echo "iptables-restore < /etc/artisaniptables/rules.v4" | sudo tee -a /etc/rc.local
			;;
		2)
			echo "执行集群部署模式下防火墙配置脚本"
			echo "服务器默认1个,若不满足可根据现场实际情况修改脚本"
			echo ""
			read -p "请按任意键继续,或按Ctrl+C退出:"
			echo "请输入服务器ip1:"
			read trusted_ip1
			echo "集群服务器默认3台,若不满足请根据现场实际情况修改脚本"
			echo ""
			read -p "请按任意键继续,或按Ctrl+C退出:"
			echo "请输入本机ip地址:"
			read local_ip
			echo "请输入集群ip1:"
			read cluster_ip1
			echo "请输入集群ip2:"
			read cluster_ip2

			# 允许所有流量通过
			sudo iptables -t filter -P INPUT ACCEPT
			# 清空所有规则
			sudo iptables -F
			# 允许本地回环地址和特定IP地址的流量通过
			sudo iptables -t filter -A INPUT -i lo -j ACCEPT
			# 允许特定端口的流量通过  端口最多支持13个,如果多余13个请分两行 
			sudo iptables -I INPUT 1 -p tcp -s 127.0.0.1,$local_ip,$cluster_ip1,$cluster_ip2 -m multiport --dport 8889,9876 -j ACCEPT
			sudo iptables -I INPUT 1 -p tcp -s 127.0.0.1,$local_ip,$cluster_ip1,$cluster_ip2 -m multiport --dport 8888,9098,8897 -j ACCEPT
			sudo iptables -A INPUT -p tcp -m multiport --dport 8889,9400,9001 -j REJECT
			sudo iptables -A INPUT -p tcp -m multiport --dport 18888,13776 -j REJECT
			# 允许来自特定IP地址的TCP流量
			sudo iptables -I INPUT -p TCP -m multiport --dport 2122,9123,10123 -j DROP
			sudo iptables -I INPUT -s 127.0.0.1,$trusted_ip1 -p TCP -m multiport --dport 2122,9123,10123 -j ACCEPT
			# 保存iptables规则
			sudo mkdir -p /etc/artisaniptables
			sudo iptables-save > /etc/artisaniptables/rules.v4

			# 开启自动重新加载,请根据自身系统,选择合适的加载时机
			echo "iptables-restore < /etc/artisaniptables/rules.v4" | sudo tee -a /etc/rc.local
			;;
		*)
			echo "输入错误,请输入1或2"
			;;
	esac
	echo "防火墙已配置完成,请根据【端口外漏检测】检查配置是否生效"
else
	echo "当前系统不支持iptables或iptables未启用"
fi
echo "请按任意键退出程序..."
read -n 1 -s
exit

这个脚本是用来配置防火墙的,主要是针对iptables服务和firewalld服务的检测与配置。

  1. 检查服务存在性:通过systemctl命令检查iptables和firewalld服务是否存在。
  2. 停用firewalld服务:如果同时存在iptables和firewalld服务,给用户一个选项来停用firewalld服务以避免冲突。
  3. 防火墙规则配置:根据用户选择的部署方式(单机或集群),配置相应的iptables规则。
  4. 保存配置:将配置保存到/etc/artisaniptables/rules.v4文件中,以便系统重启后规则能够自动加载。
  5. 启用自动重新加载:根据系统选择合适的加载时机,添加iptables规则重新加载命令到/etc/rc.local文件中。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-05-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 概述
  • Shell脚本实现
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档