我有一台 Ubuntu 服务器,我的 SIP 代理服务器目前正在运行。我已根据以下语句在代理服务器上配置了 iptables:
*filter
# Allows all loopback traffic and drop all traffic to 127/8 that doesn't use lo
-A INPUT -i lo -j ACCEPT
-A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT
-A INPUT -i eth0 -j ACCEPT
-A INPUT -i eth1 -j ACCEPT
-A INPUT -i eth2 -p icmp --icmp-type 8 -s 0/0 -d 1.2.3.4 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
-A INPUT -i eth2 -d 1.2.3.4 -p udp -m multiport --dports 5060,5061 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -i eth2 -d 1.2.3.4 -p tcp -m multiport --dports 5060,5061 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -i eth2 -j REJECT
# Reject all other inbound from public (eth2) - default deny unless explicitly allowed policy
-A FORWARD -i eth0 -j ACCEPT
-A FORWARD -i eth1 -j ACCEPT
-A FORWARD -i eth2 -j REJECT
# Outbound traffic
-A OUTPUT -j ACCEPT
# Log
-I INPUT 5 -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
COMMIT
通过执行,iptables -L -v -n
我可以看到我从我的吉特西(支持 SIP、XMPP/Jabber 等协议的音频/视频和聊天通信器)到我的代理服务器进行身份验证,正在被接受:
pkts bytes target prot opt in out source destination
14 7881 ACCEPT udp -- eth2 * 0.0.0.0/0 1.2.3.4 multiport dports 5060,5061 state NEW,ESTABLISHED
0 0 ACCEPT tcp -- eth2 * 0.0.0.0/0 1.2.3.4 multiport dports 5060,5061 state NEW,ESTABLISHED
0 0 REJECT all -- eth2 * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
但是,iptables 报告说这些数据包被丢弃了!
Feb 5 16:55:25 sip kernel: [ 788.538025] iptables denied: IN=eth2 OUT= MAC=00:11:22:33:44:55:66:77:88:99:AA:BB:CC:DD SRC=4.3.2.1 DST=1.2.3.4 LEN=566 TOS=0x00 PREC=0x00 TTL=127 ID=5381 PROTO=UDP SPT=2119 DPT=5060 LEN=546
Feb 5 16:55:26 sip kernel: [ 789.041576] iptables denied: IN=eth2 OUT= MAC=00:11:22:33:44:55:66:77:88:99:AA:BB:CC:DD SRC=4.3.2.1 DST=1.2.3.4 LEN=566 TOS=0x00 PREC=0x00 TTL=127 ID=5387 PROTO=UDP SPT=2119 DPT=5060 LEN=546
Feb 5 16:55:27 sip kernel: [ 790.041679] iptables denied: IN=eth2 OUT= MAC=00:11:22:33:44:55:66:77:88:99:AA:BB:CC:DD SRC=4.3.2.1 DST=1.2.3.4 LEN=566 TOS=0x00 PREC=0x00 TTL=127 ID=5388 PROTO=UDP SPT=2119 DPT=5060 LEN=546
Feb 5 16:55:29 sip kernel: [ 792.041974] iptables denied: IN=eth2 OUT= MAC=00:11:22:33:44:55:66:77:88:99:AA:BB:CC:DD SRC=4.3.2.1 DST=1.2.3.4 LEN=566 TOS=0x00 PREC=0x00 TTL=127 ID=5390 PROTO=UDP SPT=2119 DPT=5060 LEN=546
Feb 5 16:55:33 sip kernel: [ 796.042401] iptables denied: IN=eth2 OUT= MAC=00:11:22:33:44:55:66:77:88:99:AA:BB:CC:DD SRC=4.3.2.1 DST=1.2.3.4 LEN=566 TOS=0x00 PREC=0x00 TTL=127 ID=5391 PROTO=UDP SPT=2119 DPT=5060 LEN=546
Feb 5 16:55:41 sip kernel: [ 804.043009] iptables denied: IN=eth2 OUT= MAC=00:11:22:33:44:55:66:77:88:99:AA:BB:CC:DD SRC=4.3.2.1 DST=1.2.3.4 LEN=566 TOS=0x00 PREC=0x00 TTL=127 ID=5393 PROTO=UDP SPT=2119 DPT=5060 LEN=546
Feb 5 16:55:53 sip kernel: [ 816.043858] iptables denied: IN=eth2 OUT= MAC=00:11:22:33:44:55:66:77:88:99:AA:BB:CC:DD SRC=4.3.2.1 DST=1.2.3.4 LEN=566 TOS=0x00 PREC=0x00 TTL=127 ID=5410 PROTO=UDP SPT=2119 DPT=5060 LEN=546
Feb 5 16:58:18 sip kernel: [ 961.394041] iptables denied: IN=eth2 OUT= MAC=00:11:22:33:44:55:66:77:88:99:AA:BB:CC:DD SRC=4.3.2.1 DST=1.2.3.4 LEN=566 TOS=0x00 PREC=0x00 TTL=127 ID=5785 PROTO=UDP SPT=1254 DPT=5060 LEN=546
Feb 5 16:58:18 sip kernel: [ 961.894736] iptables denied: IN=eth2 OUT= MAC=00:11:22:33:44:55:66:77:88:99:AA:BB:CC:DD SRC=4.3.2.1 DST=1.2.3.4 LEN=566 TOS=0x00 PREC=0x00 TTL=127 ID=5786 PROTO=UDP SPT=1254 DPT=5060 LEN=546
Feb 5 16:58:19 sip kernel: [ 962.894533] iptables denied: IN=eth2 OUT= MAC=00:11:22:33:44:55:66:77:88:99:AA:BB:CC:DD SRC=4.3.2.1 DST=1.2.3.4 LEN=566 TOS=0x00 PREC=0x00 TTL=127 ID=5787 PROTO=UDP SPT=1254 DPT=5060 LEN=546
Feb 5 16:58:21 sip kernel: [ 964.894617] iptables denied: IN=eth2 OUT= MAC=00:11:22:33:44:55:66:77:88:99:AA:BB:CC:DD SRC=4.3.2.1 DST=1.2.3.4 LEN=566 TOS=0x00 PREC=0x00 TTL=127 ID=5788 PROTO=UDP SPT=1254 DPT=5060 LEN=546
Feb 5 16:58:25 sip kernel: [ 968.894651] iptables denied: IN=eth2 OUT= MAC=00:11:22:33:44:55:66:77:88:99:AA:BB:CC:DD SRC=4.3.2.1 DST=1.2.3.4 LEN=566 TOS=0x00 PREC=0x00 TTL=127 ID=5789 PROTO=UDP SPT=1254 DPT=5060 LEN=546
Feb 5 16:58:32 sip kernel: [ 975.544611] iptables denied: IN=eth2 OUT= MAC=00:11:22:33:44:55:66:77:88:99:AA:BB:CC:DD SRC=4.3.2.1 DST=1.2.3.4 LEN=614 TOS=0x00 PREC=0x00 TTL=127 ID=5793 PROTO=UDP SPT=1254 DPT=5060 LEN=594
Feb 5 16:58:44 sip kernel: [ 987.045243] iptables denied: IN=eth2 OUT= MAC=00:11:22:33:44:55:66:77:88:99:AA:BB:CC:DD SRC=4.3.2.1 DST=1.2.3.4 LEN=614 TOS=0x00 PREC=0x00 TTL=127 ID=5808 PROTO=UDP SPT=1254 DPT=5060 LEN=594
为什么我的数据包被丢弃了,尽管它们已被规则接受-A INPUT -i eth2 -d 1.2.3.4 -p udp -m multiport --dports 5060,5061 -m state --state NEW,ESTABLISHED -j ACCEPT
?
答案1
您正在接受状态为NEW
或 的数据包ESTABLISHED
,但不是RELATED
。RELATED
状态可能分配给正在启动新连接(或 conntrack 认为是 UDP 的“连接”)但与另一个现有连接相关的数据包。此状态用于使用多个连接的协议(如 FTP 或 SIP)以及 ICMP 错误回复。
在您的情况下,xt_conntrack_sip
模块可能会拦截 SIP 控制连接并添加 conntrack 条目以将与音频/视频流相关的 UDP 数据包标记为RELATED
;您的规则应该接受这样的数据包。
此外,您可能需要接受所有数据ESTABLISHED
包RELATED
而不检查端口号 — 否则您的计算机发起的连接将不起作用,因为此类连接通常使用您这边的临时(非固定)端口号。这应该是安全的,因为具有这些状态的数据包要么属于您的计算机发起的连接,要么与其他已允许的连接相关联,这些连接需要多个连接的协议。
但您的情况中,第一个问题是您的日志记录规则实际上是插入在 INPUT 链的开头,并将所有内容记录为“拒绝”!只需使用-A
而不是-I
将其放在链的末尾(这假设-P INPUT DROP
已设置,因此未明确允许的数据包将被丢弃)。
(是的,在这种情况下Ubuntu wiki 上的 iptables 指南建议使用错误的命令。