(SOから移動)
私はsipサーバーを保護するiptablesを持っています。私が特別に開いたものを除くすべてのIPをブロックし、ほとんどすべての人で機能するようです。ホワイトリストに記載されていない多くのIPアドレスからテストしましたが、必要な場合はすべてドロップされます。
しかし、私はiptablesルールを迂回できると思われる「ハッカー」を拾いました。彼の調査中のINVITEはそれを成功させ、私はそれがどのように、あるいはそれが可能であったかさえ知りません。 10年間、私はこれを見たことがない。
自分がやったことだと思いますが、見えません。
このように作成されたiptables(MYIPは上部で定義されています-編集済み):
iptables -F
iptables -X
iptables -N ALLOWEDSIP
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p tcp -d $MYIP --dport 22 -j ACCEPT
iptables -t filter -A INPUT -j ALLOWEDSIP
# This is my white list.
iptables -A ALLOWEDSIP -j RETURN
さて、ALLOWEDSIPにNOTHINGを指定すると、SSHを使用するだけで(SSHを使用できるようになります)私がそれに電話をかけると、それらはすべて落とされます。しかしwiresharkは私にこれを示しています(私のip編集済み):
89.163.146.25 -> x.x.x.x SIP/SDP 805 Request: INVITE sip:[email protected] |
x.x.x.x -> 89.163.146.25 SIP 417 Status: 100 Giving a try |
x.x.x.x -> 89.163.146.25 SIP 875 Status: 407 Proxy Authentication Required |
彼の通話は私のスイッチに当たり、最終的にはACLによって拒否されましたが、そこに到達することはありません。他には何も通過しません。私の髪を引っ張ります。誰か知ってる?
完全を期すために、iptables -Lの結果を次に示します。
# iptables -L --line-numbers -v
Chain INPUT (policy DROP 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 10 640 ACCEPT all -- any any anywhere anywhere state RELATED,ESTABLISHED
2 0 0 ACCEPT all -- lo any anywhere anywhere
3 0 0 ACCEPT tcp -- any any anywhere <redacted>.com tcp dpt:6928
4 0 0 ALLOWEDSIP all -- any any anywhere anywhere
Chain FORWARD (policy DROP 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 6 packets, 544 bytes)
num pkts bytes target prot opt in out source destination
Chain ALLOWEDSIP (1 references)
num pkts bytes target prot opt in out source destination
1 0 0 RETURN all -- any any anywhere anywhere
編集:wiresharkからこれを見たところです。彼らは何か他の方法で確立され、確立されたルールでプレーするような恐ろしいことをしていますか?多分彼らはRELATEDのいくつかの穴で遊んでいますか?
89.163.146.25 -> <redacted> RTCP 806 Source port: tag-pm Destination port: sip
編集2:UDPはここでの鍵です。 TCPのみをリッスンするようにOpenSIPSを設定すると、問題は解消したようです。彼らは「tag-pm」メッセージをさらに送信していますが、彼らの試みはこれ以上通り抜けることはできません。パケットがopensipsに到達している理由を説明していません。 iptablesは最初にそれらを停止する必要があります。私がここで間違ったことを知りたいです。
編集3:RELATEDを削除すると、私は彼らへの返信をやめるので、それはそれと関係があります。しかし、私は関連が必要だと思います。回避策に関するヒントはありますか?
それがどのように機能するかについてのもっともらしい説明は、問題のあるUDPデータグラムが何らかの理由で--state ESTABLISHED,RELATED
。
UDPがステートレスプロトコルであることを考えると、state
モジュールがそれを効果的に追跡しているとは思えません。
問題を解決するために、状態チェックをTCPプロトコルに限定します。
-A INPUT -m tcp -m state -p tcp --state ESTABLISHED,RELATED -j ACCEPT`
そして、UDPプロトコルを使用してALLOWEDSIP
を事前にフィルタリングします(できれば、宛先ポートも使用してください)。
iptables -t filter -A INPUT -m udp -p udp --dport 5060 -j ALLOWEDSIP