Iptables

iptables blacklist empty User-Agent sip tcpdump

  • May 18, 2018

我使用 tcpdump 掃描訪問我的電話伺服器的使用者代理。

我得到了有趣的結果。我將它們添加到保護我的許多伺服器的列表中。

這很好用。問題是我得到空白或空的使用者代理。我該如何阻止它?

這是我的 tcpdump 掃描和空白使用者代理的結果

tcpdump -i eth0 port sip -l -A | egrep -i 'User-Agent'
Fri May 18 09:37:50 EDT 2018
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on venet0, link-type LINUX_SLL (Linux cooked), capture size 65535 bytes
User-Agent: friendly-scanner
User-Agent: UK Dialer
User-Agent: UK Dialer
User-Agent: friendly-scanner
User-Agent: friendly-scanner
User-Agent: friendly-scanner
User-Agent: friendly-scanner
User-Agent: friendly-scanner
User-Agent: friendly-scanner
User-Agent: Asterisk PBX 1.6.5
User-Agent: friendly-scanner
User-Agent: friendly-scanner
User-Agent: friendly-scanner
User-Agent:
User-Agent:
User-Agent:
User-Agent:
User-Agent: friendly-scanner
User-Agent: friendly-scanner

這是我用來阻止的

iptables INPUT -p udp -m udp --dport 5060 -m string --string "friendly-scanner" --algo bm --to 65535 -j DROP

您可以使用更長的匹配,包括記錄分隔符,並使用十六進製表示不可列印。然後你的規則可以變成:

iptables -A INPUT -p udp -m udp --dport 5060 -m string --icase --hex-string '|a|User-Agent: |0d0a|' --algo bm --to 65535 -j DROP

這將列印回來(使用iptables-save)為:

iptables -A INPUT -p udp -m udp --dport 5060 -m string --icase --hex-string '|0a557365722d4167656e743a200d0a|' --algo bm --to 65535 -j DROP

現在您應該知道SIP 的 Header Field Format中的空格語法。由於沒有可用的正則表達式匹配,幾乎有無限的可能性(即使只鼓勵一種),因此您應該定期使用 Wireshark 而不是 tcpdump 檢查您的“垃圾郵件”以獲得準確的內容。這是來自Wireshark 的範例擷取的範例 SIP 呼叫擷取。

標頭也不區分大小寫,但是經過測試,--icase它確實可以與 的內容一起使用,--hex-string因此它也可以匹配USER-AGENT:

引用自:https://serverfault.com/questions/912824