Top / Network / iptables

Linux関連のFirewall、っていうかパケットフィルタリングの定番、iptablesを使ってみます。

Ubuntu Server 16.04.2 LTS で構築しています。

インストール

# sudo apt install iptables

使い方

リスト表示

# sudo iptables  -L  (もしくは --list)
# sudo iptables  --list -n -v (詳細に。)

たとえば、HTTPは任意のIPから許可。

# sudo iptables  -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT

たとえばsshは所定のIPだけ許可

# 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

これでいいかな?

TIPS集

個別に設定の削除

$ sudo iptables -L --line-number

で行番号を表示して、

$ sudo iptables -D INPUT 2  ←行番号

で個別に削除可能

関連リンク


この記事は

選択肢 投票
おもしろかった 0  
そうでもない 0  

Top / Network / iptables

現在のアクセス:476


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-06-25 (日) 13:27:06 (873d)