用 Intel 網卡上的 Flow Director 過濾封包

在「Traffic filtration using NIC capabilities on wire speed (10GE, 14Mpps)」這邊看到的技巧。

作者建議另外安裝 driver,因為 Linux kernel 內的 driver 功能有限:「Intel Ethernet Drivers and Utilities」。

重點在 ethtool 這個工具,可以看到條件設定:

ethtool --help:
        ethtool -N|-U|--config-nfc|--config-ntuple DEVNAME    Configure Rx network flow classification options or rules
        rx-flow-hash tcp4|udp4|ah4|esp4|sctp4|tcp6|udp6|ah6|esp6|sctp6 m|v|t|s|d|f|n|r... |
        flow-type ether|ip4|tcp4|udp4|sctp4|ah4|esp4
            [ src %x:%x:%x:%x:%x:%x [m %x:%x:%x:%x:%x:%x] ]
            [ dst %x:%x:%x:%x:%x:%x [m %x:%x:%x:%x:%x:%x] ]
            [ proto %d [m %x] ]
            [ src-ip %d.%d.%d.%d [m %d.%d.%d.%d] ]
            [ dst-ip %d.%d.%d.%d [m %d.%d.%d.%d] ]
            [ tos %d [m %x] ]
            [ l4proto %d [m %x] ]
            [ src-port %d [m %x] ]
            [ dst-port %d [m %x] ]
            [ spi %d [m %x] ]
            [ vlan-etype %x [m %x] ]
            [ vlan %x [m %x] ]
            [ user-def %x [m %x] ]
            [ action %d ]
            [ loc %d]] |
        delete %d

看起來 stateless 的過濾可以在上面做...

m0n0wall 的終結

m0n0wall 算是元老級的 firewall 套件,看到「End of the m0n0wall project」這個消息還是有點感慨啊...

有很多類似的 project 興起取代掉了 m0n0wall 的位置 (像是 pfSense),這讓我想到前陣子 esr 在「Defending GCC considered futile」提到 GCC 的沒落時講的話:

Obsolescence happens; this is nobody's fault. It will happen to clang/LLVM someday, too, but today is not that day.

用 Docker 測試 Mesos

照著「Deploy a Mesos Cluster with 7 Commands Using Docker」上面的方法做,遇到一些小狀況,解決後總算是搞定了。

文章作者的目的是利用 Docker 在不弄髒環境下讓人很容易上手測試,不需要處理一堆 Java 以及設定檔的問題。讓沒有用過的人可以感受一下 MesosMarathon 的界面與操作。

總共會跑起四個 docker instance,分別是 ZooKeeper、Mesos Master、Marathon、Mesos Slave Container。

我遇到的問題是我在 Ubuntu 上面的 UFW 設為 default deny,造成這四隻程式之間溝通不良,最後是針對 docker0 這個 interface 放行:

# ufw allow in on docker0

有些感覺之後就可以看官網看更進階的功能操作。

用 pfSense 架設 Firewall (以及 NAT)

pfSense 是一套很不錯的 firewall 以及 NAT 服務,上面還可以跑一切服務 (像是 OpenVPN 或是 Squid),不過後來都是用商用的硬體方案來處理...

看到「Build your own pro-grade firewall」這篇突然想到要查 pfSense 是否可以 High Availability,如果做的夠好的話,其實可以用兩台機器來跑,成本相對低很多。

結果查到這篇官方文件「Configuring pfSense Hardware Redundancy (CARP)」,裡面有幾個關鍵字,像是 XMLRPC Sync 似乎暗示了設定也可以同步?

官方文件裡的配置圖。

該測試看看了,兩台 server 也才十萬,但兩台能跑到 500Mbps+ 的硬體防火牆的價錢就貴多了... (不過比較省電?)

用 UFW 控制 iptables

之前都是自己設定 iptables,這次灌完家裡的系統後用 UFW 設定,對於基本的 firewall 功能來說相當簡單,但也夠用了:

sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw enable

如果有需要開某些 port 也可以設定,比起之前自己設 INPUT policy 方便...

Debian 重開機後維持 iptables 設定值的作法

標題所提到的問題在 lenny 以及更早的版本沒有標準解,一般 Google 到的解法是在 /etc/network/if-up.d/ 裡面放一個 script,當介面起來的時候會跑 iptables-restoreiptables 的規則倒回去,這是「會動」的方法,但我不喜歡這種 hacking...

剛剛找到 iptables-persistent,在 squeeze 以及 sid 都可以裝,雖然沒有文件,但看了一下程式很快就可以理解他的用法。

apt-get install iptables-persistent 安裝完畢之後,理論上就會把 script 裝好,並且把目錄建好,接下來只要跑 iptables-save > /etc/iptables/rules 就可以把目前的 iptables 設定倒進去。

這個方式看起來會是比較好的作法...