Iptables
iptables blacklist empty User-Agent sip tcpdump
我使用 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:
。