#!/bin/bash
# 設(shè)置要獲取IP地址的域名
domain="yourdomain.com"
# 獲取域名的IP地址
new_ip=$(dig +short A $domain)
# 移除之前添加放行的IP地址(通過備注找它的編號)
rule_number=$(iptables -L INPUT -n --line-numbers -v | awk -v domain="${domain}" '$0 ~ "Allow from " domain {print $1}')
# 如果有就刪除
if [ -n "$rule_number" ]; then
iptables -D INPUT $rule_number
fi
# 添加新的IP地址到iptables規(guī)則(帶備注)
iptables -A INPUT -s $new_ip -m comment --comment "Allow from $domain" -j ACCEPT
#保存規(guī)則,如果有docker請省略這一步
service iptables save
正則表達式部分的解釋:
- Allow from : 這是一個固定的文本字符串,表示規(guī)則中的注釋內(nèi)容開始部分。
- domain: 這是一個變量,其中存儲了您要匹配的注釋內(nèi)容。在命令中使用-v選項將該變量傳遞給awk命令。
- ~操作符: 在awk中,~操作符用于進行模式匹配。
- $0: 這是awk中的一個特殊變量,表示整個輸入行。
- ~操作符后面的部分 "Allow from " domain 是我們的模式。它指示awk在輸入行中查找以"Allow from
"開頭,后面跟著domain變量的內(nèi)容的部分。
因此,使用模式"Allow from " domain,我們可以匹配包含所需注釋的規(guī)則行。一旦找到匹配的行,print $1將打印該行的第一個字段,即規(guī)則行號。
有docker為啥不保存:
在使用Docker時,iptables規(guī)則是由Docker自動管理的。Docker使用自己的網(wǎng)絡(luò)橋接和轉(zhuǎn)發(fā)機制來管理容器之間的通信,它會自動更新iptables規(guī)則以適應(yīng)容器的網(wǎng)絡(luò)需求。
當你運行service iptables save
命令時,它會嘗試保存當前系統(tǒng)的iptables規(guī)則到配置文件中,但是這個命令不會考慮Docker所管理的規(guī)則。
如果你希望保存Docker所管理的iptables規(guī)則,你可以使用Docker自帶的命令來實現(xiàn)。例如,使用docker save
命令將Docker的iptables規(guī)則保存到文件中,然后在需要的時候使用docker load
命令重新加載規(guī)則。
另外,從Docker 1.13版本開始,Docker引入了新的命令docker save
和docker load
,用于保存和加載容器的狀態(tài),包括網(wǎng)絡(luò)規(guī)則。這樣你就可以使用docker save
命令保存Docker的狀態(tài),并在需要的時候使用docker load
命令重新加載狀態(tài),包括iptables規(guī)則。文章來源:http://www.zghlxwxcb.cn/news/detail-694917.html
總之,如果你在使用Docker,并且希望保存iptables規(guī)則,建議使用Docker提供的相關(guān)命令來管理和保存規(guī)則。文章來源地址http://www.zghlxwxcb.cn/news/detail-694917.html
到了這里,關(guān)于自動化防火墻放行目標域名IP的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!