Bash

通過“MAC”地址更改“iptables”規則

  • April 2, 2020

我正在使用連接到 VPN 的網關通過工業 LAN 元素的埠進行轉發。

我在瀏覽器中使用 iptables 轉發訪問我網關的 80/443 埠,向我顯示該項目的 80/443 埠的內容:

iptables -t nat -A POSTROUTING -p tcp -d 192.168.1.37 --dport 80 -j MASQUERADE 

iptables -t nat -A POSTROUTING -p tcp -d 192.168.1.37 --dport 443 -j MASQUERADE 

iptables -t nat -A PREROUTING -i br0 -p tcp --dport 80 -j DNAT --to 192.168.1.37:80 

iptables -t nat -A PREROUTING -i br0 -p tcp --dport 443 -j DNAT --to 192.168.1.37:80 

問題是該元素有時會通過重新啟動路由器或通過 DHCP 伺服器上的到期來更改本地 IP 地址;我們無權訪問。為此,我想知道是否可以通過您的 MAC 進行轉發而不是通過您的 IP 地址。

我試圖做類似的事情,但它不起作用:iptables -t nat -A POSTROUTING -p tcp -m mac --mac-source AA:BB:CC:DD:EE:FF --dport 80 -j MASQUERADE,投擲iptables: Invalid argument. Run 'dmesg' for more information.

用腳本更新

為了解決這個問題,我開發了一個腳本bash來檢查 MAC 地址並返回它的 IP 地址來創建iptables規則。主要思想是不時使用crontab.

這是腳本:

#!/bin/bash

vpnip=10.2.10.1
subred=192.168.1.0/24
mac=aa:bb:cc:11:22:33 # lowercase
ip=$(nmap -sP $subred >/dev/null && arp -an | grep $mac | awk '{print $2}' | sed 's/[()]//g')


if [  $ip  ]; then
   echo "IP address found: $ip"
   iptables -t nat -A POSTROUTING -p tcp -d $ip --dport 80 -j MASQUERADE 
   iptables -t nat -A POSTROUTING -p tcp -d $ip --dport 443 -j MASQUERADE 
   iptables -t nat -A PREROUTING -i br0 -p tcp --dport 80 -j DNAT --to $ip:80 
   iptables -t nat -A PREROUTING -i br0 -p tcp --dport 443 -j DNAT --to $ip:443
   iptables -t nat -A PREROUTING -d $vpnip -p tcp -m multiport --dports 80,443 -j DNAT --to-destination $ip:80
   iptables --table nat --list 
else
   echo "IP not found"
fi

該腳本工作正常。但是,當iptables規則定期發佈時,它們就會重複。

有沒有辦法在再次編寫這些規則之前檢查它們是否存在?還是先刪除它們?

有沒有辦法在再次編寫這些規則之前檢查它們是否存在?還是先刪除它們?

您可以對 iptables 使用 -C 選項。查看man iptables更多資訊。我認為一種巧妙的方法是創建一個包含規則的數組,並在將規則添加到鏈中之前檢查規則是否存在。

範例腳本:

#!/bin/bash

ip='1.1.1.1'
ip2='8.8.8.8'

rules=(
"INPUT -s $ip -j DROP"
"INPUT -s $ip2 -j DROP"
)

for rule in "${rules[@]}"; do
   if ! iptables -C $rule 2> /dev/null; then
       echo "Adding rule \"$rule\""
       iptables -A $rule
   fi
done

引用自:https://unix.stackexchange.com/questions/574652