【发布时间】:2021-06-18 03:09:21
【问题描述】:
我构建了一个与 API 对话的服务器;但是,端点没有静态 IP。我已经能够成功创建一个 bash 文件,该文件将查询 ip,将其写入日志,然后即时更改 iptables。由于这是写入磁盘,我不想这样做。
工作原理:这段代码将向 iptables 列表写入一个条目。
什么不起作用:每次我运行它时它都会继续运行。如果条目已经存在,我想删除它。
这里是没有日志文件的代码:
#!/bin/bash
IPT="/sbin/iptables"
HOSTNAME=google.com
if [[ $EUID -ne 0 ]]; then
echo "This script must be run as root"
exit 1
fi
new_ip=$(host $HOSTNAME | head -n1 | cut -f4 -d ' ')
old_ip=$($IPT -L -n --line-number | grep $HOSTNAME | head -1 | tr -s ' ' | cut -f5 -d ' ')
if [ "$new_ip" = "$old_ip" ] ; then
echo "first if statment"
#echo IP address has not changed
else
echo "first else"
if [ -n "$old_ip" ] ; then
echo "second if statement"
$IPT -D OUTPUT -d $old_ip -p tcp -m tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
$IPT -D INPUT -s $old_ip -p tcp -m tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT
fi
echo "generic if"
$IPT -I OUTPUT -p tcp -d $new_ip --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
$IPT -I INPUT -p tcp -s $new_ip --sport 443 -m state --state ESTABLISHED -j ACCEPT
#echo iptables have been updated
fi
这是带有日志文件的代码(不想使用):
#!/bin/bash
IPT="/sbin/iptables"
HOSTNAME=google.com
LOGFILE=/home/runrun/testing.log
Current_IP=$(host $HOSTNAME | head -n1 | cut -f4 -d ' ')
if [ ! -f $LOGFILE ]; then
echo "first if statement"
$IPT -I OUTPUT -p tcp -d $Current_IP --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
$IPT -I INPUT -p tcp -s $Current_IP --sport 443 -m state --state ESTABLISHED -j ACCEPT
echo $Current_IP > $LOGFILE
else
echo "first else statement"
fi
Old_IP=$(cat $LOGFILE)
if [ "$Current_IP" = "$Old_IP" ] ; then
echo "second if statement"
#echo IP address has not changed
else
echo "second else statement"
$IPT -D OUTPUT -d $Old_IP -p tcp -m tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
$IPT -D INPUT -s $Old_IP -p tcp -m tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT
$IPT -I OUTPUT -p tcp -d $Current_IP --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
$IPT -I INPUT -p tcp -s $Current_IP --sport 443 -m state --state ESTABLISHED -j ACCEPT
echo $Current_IP > $LOGFILE
echo iptables have been updated
fi
【问题讨论】: