如何通过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 ...