iptables 黑名单空 User-Agent sip tcpdump

iptables 黑名单空 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

答案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:

相关内容