我使用 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
答案1
您可以使用更长的匹配,包括记录分隔符,并使用十六进制表示不可打印。您的规则可以变成:
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 的标头字段格式。由于没有可用的正则表达式匹配,因此几乎有无限的可能性(即使只鼓励一种),因此您应该定期使用 Wireshark 而不是 tcpdump 检查“垃圾邮件”以获取准确的内容。这是一个SIP 呼叫示例捕获自Wireshark 的样本捕获。
标题也不区分大小写,但经过测试,--icase
可以与的内容一起使用,--hex-string
因此它也会匹配USER-AGENT:
。