Linux関連のFirewall、っていうかパケットフィルタリングの定番、iptablesを使ってみます。
Ubuntu Server 16.04.2 LTS で構築しています。
# sudo apt install iptables
# sudo iptables -L (もしくは --list) # sudo iptables --list -n -v (詳細に。)
# sudo iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
# sudo iptables -A INPUT -p tcp -s 192.168.0.10/32 --dport 22 -j ACCEPT
[linux-users:103966] Re: iptables -m tpc をみると、-p tcp をつけてる限り、-m tcp はあってもなくても変わらない、、、ぽいです。
上記のように変更した内容は、再起動したら消えてしまうようで、保存するには下記のツールを使用します。
# sudo apt list iptables-persistent # sudo apt install iptables-persistent
保存と、読み込み
# sudo /etc/init.d/netfilter-persistent save # sudo /etc/init.d/netfilter-persistent reload
設定は
# sudo cat /etc/iptables/rules.v4
ココに反映されるようですね。
install直後の初期状態はこちら。
# sudo iptables --list Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination
なんでも許可になっていますね。以下のように変更してみます。
# sudo iptables -P INPUT DROP // 自分への送信先のばあい、はすべて破棄 # sudo iptables -P FORWARD DROP // ルーティング?時はすべて破棄 # sudo iptables -P OUTPUT ACCEPT // 自分からの送信のばあい、はすべて許可
$ sudo iptables -L Chain INPUT (policy DROP) target prot opt source destination Chain FORWARD (policy DROP) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination
デフォルトの設定が変更されました。あ、この状態で、リモートで接続している場合は遮断されるのでご注意。
sshでつないでる場合は、上記より先に
# sudo iptables -A INPUT -p tcp -s 192.168.0.0/24 --dport 22 -j ACCEPT
とやってSSHを許可しておいたり、
# sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
すでに確立されている接続についての応答パケットなどは許可、などを入れておきましょう。
# sudo iptables -F // defaultのポリシー以外の初期化。INPUTが DROPだとココで接続切れるので注意。 # sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT //セッション確立後の応答パケットとかなどは許可 # sudo iptables -P INPUT DROP // 自分への送信先のばあい、はすべて破棄 # sudo iptables -P FORWARD DROP // ルーティング?時はすべて破棄 # sudo iptables -P OUTPUT ACCEPT // 自分からの送信のばあい、はすべて許可 # sudo iptables -A INPUT -p icmp -j ACCEPT // pingなどICMPは許可 # sudo iptables -A INPUT -i lo -j ACCEPT // loopback 自分から自分への通信は許可。
あとは個別に、使ってるポートだけ穴開け。
# sudo iptables -A INPUT -p tcp -s 192.168.0.0/24 --dport 22 -j ACCEPT
これでいいかな?
$ sudo iptables -L --line-number
で行番号を表示して、
$ sudo iptables -D INPUT 2 ←行番号
で個別に削除可能
この記事は
現在のアクセス:1749