Filter messages sent over Erlang distribution.
Use the -proto_dist flag to set the module to use for distribution:
iex --erl "-proto_dist Elixir.TCPFilter" -S mixThen start your node:
Node.start(:"[email protected]")Create a filter module that will intercept data coming into the node:
defmodule MyApp.Filter do
@behaviour TCPFilter.Filter
# allow genserver calls to `:increment`
def filter({:reg_send, _sender, _unused, MyApp.MyGenServer}, {:"$gen_call", _, :increment}),
do: :ok
# block other messages to the genserver
def filter({:reg_send, _sender, _unused, MyApp.MyGenServer}, _msg),
do: {:error, :unauthorized}
# ignore other message types
def filter(_control_message, _message), do: :ignore
def filter(_control_message), do: :ignore
endSet the filter to use with TCPFilter.set_filter/1:
TCPFilter.set_filter(MyApp.Filter)You can also set this filter when starting the TCPFilter in your supervisor:
{TCPFilter, filter: MyApp.Filter, name: TCPFilter}To use TLS, use TCPFilter.set_socket/1 with the TCPFilter.SSLSocket module:
TCPFilter.set_socket(TCPFilter.SSLSocket)You can also set this socket when starting the TCPFilter in your supervisor:
{TCPFilter, filter: MyApp.Filter, socket: TCPFilter.SSLSocket, name: TCPFilter}Set the -ssl_dist_optfile option when running your application:
iex --erl "-proto_dist Elixir.TCPFilter -ssl_dist_optfile my_tls.config" -S mix
See Erlang Distribution over TLS for more information on configuring TLS in your application.
Besides TCPFilter.TCPSocket and TCPFilter.SSLSocket, you can implement your own socket modules to handle all of the socket operations needed for a distribution module.
For example, you could define a module that sends messages over a WebSocket.
defmodule MyApp.WebSocket do
@behaviour TCPFilter.Socket
# ...
end
TCPFilter.set_socket(MyApp.WebSocket)See TCPFilter.Socket for more information.
If available in Hex, the package can be installed
by adding tcp_filter_dist to your list of dependencies in mix.exs:
def deps do
[
{:tcp_filter_dist, "~> 0.1.0"}
]
endDocumentation can be generated with ExDoc and published on HexDocs. Once published, the docs can be found at https://hexdocs.pm/tcp_filter_dist.