如何通过SSH会话测试远程服务器的配置时如何自动重置Linux防火墙

时间:2020-01-09 10:41:40  来源:igfitidea点击:

如何告诉我的Linux iptables防火墙每5分钟刷新一次当前配置。
这对我进行测试新规则和配置选项时有所帮助。如果被防火墙拒绝了,5分钟后它能重置。

如何在不进行硬重启的情况下自动重置Linux防火墙?

您可以使用iptables命令和Shell脚本组合轻松清除当前配置。
这种设置没有内置选项。
因此,您需要编写一个小的Shell脚本并从crontab文件中调用它。

创建防火墙重置shell脚本

创建一个/root/reset.fw脚本:

#!/bin/bash
# reset.fw - Reset firewall
# set x to 0 - No reset
# set x to 1 - Reset firewall
# --------------------------------------------------------------------------------------------------------------
# Added support for IPV6 Firewall
# --------------------------------------------------------------------------------------------------------------
# Written by  <[email protected]>
# --------------------------------------------------------------------------------------------------------------
# You can copy / paste / redistribute this script under GPL version 2.0 or above
# =============================================================
x=1
 
# set to true if it is CentOS / RHEL / Fedora box
RHEL=false
 
# set true if it is CentOS/RHEL v7.x or above
RHEL7=false 
 
### no need to edit below  ###
IPT=/sbin/iptables
IPT6=/sbin/ip6tables
 
if [ "$x" == "1" ];
then
	if [ "$RHEL" == "true" ];
	then
	      # reset firewall using redhat script
               if [ "$RHEL7" == "true" ];
               then
                 systemctl stop iptables 
                 systemctl stop ip6tables 
               else  ## old rhel <= v6.x ##
		         /etc/init.d/iptables stop
		         /etc/init.d/ip6tables stop
               fi
	else
		# for all other Linux distro use following rules to reset firewall
		### reset ipv4 iptales ###
		$IPT -F
		$IPT -X
		$IPT -Z
		for table in $(</proc/net/ip_tables_names)
		do 
			$IPT -t $table -F
			$IPT -t $table -X
			$IPT -t $table -Z 
		done
		$IPT -P INPUT ACCEPT
		$IPT -P OUTPUT ACCEPT
		$IPT -P FORWARD ACCEPT
		### reset ipv6 iptales ###
		$IPT6 -F
		$IPT6 -X
		$IPT6 -Z
		for table in $(</proc/net/ip6_tables_names)
		do 
			$IPT6 -t $table -F
			$IPT6 -t $table -X
			$IPT6 -t $table -Z 
		done
		$IPT6 -P INPUT ACCEPT
		$IPT6 -P OUTPUT ACCEPT
		$IPT6 -P FORWARD ACCEPT
	fi
else
        :
fi

设置权限:

# chmod +x /root/reset.fw

创建cronjon每5分钟重置一次当前配置,输入

# crontab -e

或者

# vi /etc/crontab

追加以下设置:

*/5 * * * * root /root/reset.fw >/dev/null 2>&1

请记住,一旦为您的Linux系统创建了有效的配置,请将" x设置为0"。

处理命令行规则

在基于屏幕的会话上运行命令:

Your-iptable-rule-here && sleep 120 && /root/reset.fw

您可以加载防火墙规则并休眠120秒,然后使用/root/reset.fw脚本禁用/重置防火墙。

关于安全性的注意事项

另外,与其让服务器容易受到攻击,不如让它还原表的一个已知的良好版本,或者将其锁定为除ssh外的其他任何版本,可能会更好:

iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -m state --state ESTABLISHED,RELATED -j ACCEPT

例如,可以如下更新上述脚本:

...
	else
		# for all other Linux distro use following rules to reset firewall
		### reset ipv4 iptales ###
		$IPT -F
		$IPT -X
		$IPT -Z
		for table in $(</proc/net/ip_tables_names)
		do 
			$IPT -t $table -F
			$IPT -t $table -X
			$IPT -t $table -Z 
		done
		$IPT -P INPUT ACCEPT
		$IPT -P OUTPUT ACCEPT
		$IPT -P FORWARD ACCEPT
		#Uncommet to drop everything but only allow ssh over ipv4 ##
		#$IPT -P INPUT DROP
		#$IPT -P OUTPUT DROP
		#$IPT -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
		#$IPT -A OUTPUT -p tcp --sport 22 -m state --state ESTABLISHED,RELATED -j ACCEPT
		### reset ipv6 iptales ###
		$IPT6 -F
		$IPT6 -X
		$IPT6 -Z
		for table in $(</proc/net/ip6_tables_names)
		do 
			$IPT6 -t $table -F
			$IPT6 -t $table -X
			$IPT6 -t $table -Z 
		done
		$IPT6 -P INPUT ACCEPT
		$IPT6 -P OUTPUT ACCEPT
		$IPT6 -P FORWARD ACCEPT
	fi
...