ホーム » 「iptables」タグがついた投稿

タグアーカイブ: iptables

システム

最近の投稿

アーカイブ

カテゴリー

network トラブル kde-plasma-desktop

自宅ネットワークが動かなくなる。

原因は Ubuntu の記事で KDE Plasma が X11 から Wayland への移行がすすみ安定してきたとのことで、”apt install kde-plasma-desktop”を実行。これがトラブルの始まりだった。

この中でたっぷりパッケージインストールがあったけど、この中で firewalld がインストールされたと共に、iptables-persistent , netfilter-persistent が uninstall された。最終的な症状としては firewalld が DNS をブロック(他のポートもほぼ全部シャットアウト)したようで、自宅ネットワークで名前解決が動かなくなり、自宅全体が ネットワークにつながらない(パケットは流れるけど、名前解決できなきゃ何もできない)

端末側で nslookup server 192.168.xx.xx でサーバに問い合わせをかけても返事がない。nmap 192.168.xx.xx で確認すると、ssh 以外のポートが全滅。iptables -L -n してもちゃんと普通のルールが表示されるし、iptables を消去しても変化なし。この辺でようやく iptables の問題ではないと見えてくる。(でもこの段階で別のFireWallが動いているとはイメージできてなかった)

ということで、

$ sudo apt purge firewalld
$ sudo apt install iptables-persistent netfilter-persistent
$ sudo netfilter-persistent save
  # 最初、iptables-persistent も消えているのに気づかず、
  # netfilter-persistent save が動かず悩んだ。

設定を復旧するなか途中で LAN (enp2s0) も動かなくなるけど、netplan の設定をやり直して無事回復。(netplanの一言をメモに残しておかないと、IPアドレス固定の設定どこでやったっけ…ということを思い出せない NetworkManager だっけ /etc/network 配下だっけ…と無駄に悩む)

$ cd /etc/netplan
$ sudo vi 90-NM-xxxx....xxxx.yaml
$ sudo netplan apply

ファイアウォールとiptables

インターネットからの攻撃を防ぐには、ファイアウォールが必要となる。外部からの接続をうけるコンピュータは、ファイアウォールがどう設定されているのか把握することが重要。

ファイアウォールとDMZ

ファイアウォールは、パケットの(送信元IPアドレス,送信元ポート番号)、(宛先IPアドレス,宛先ポート番号)を見て、通信を制限するルータであり、専用のファイアウォールではさらに細かい制限を加えたり、通信履歴を保存することができる。

組織向けの外部公開のWebサーバやメールサーバを持つ組織では、外部からの接続をうける必要があり、脆弱性があればサーバは乗っ取りなどの被害に会いやすい。サーバが被害を受けたらファイアウォール内部のコンピュータに被害が広がる(トロイの木馬)のは危険であることから、(1) DMZ(非武装地帯)内部に外部公開のサーバを置き、(2) 対外FireWallで外部からのパケットはすべてDMZだけに通す。(3) 内部FireWall では、DMZ の特定の受信パケットだけ流す様にする。

DMZ内部のサーバは、外部からの攻撃をうけるため、極めて慎重にセキュリティ対策を行う必要がある。

iptables

Linux で FireWall を構築するときには、iptables を用いる。iptables では、主に以下の3つのルール(チェイン)でパケットを制限できる。

  • コンピュータに入ってくるパケットに対するルール(INPUT チェイン)、
  • コンピュータから出ていくパケットに対するルール(OUTPUTチェイン)、
  • コンピュータで中継するパケットに対するルール(FORWARDチェイン)

iptables の設定を見るには、iptables -L を実行する。

$ sudo iptables -L  # すべてのルールを表示
Chain INPUT (policy DROP)
target     prot opt source           destination         
DROP       all  --  anywhere         anywhere      state INVALID
ACCEPT     all  --  192.168.11.0/24  anywhere            
ACCEPT     tcp  --  anywhere         anywhere      tcp dpt:http
ACCEPT     tcp  --  anywhere         anywhere      tcp dpt:https
:
Chain FORWARD (policy DROP)
target     prot opt source           destination         
DROP       all  --  anywhere         anywhere      state INVALID
ACCEPT     all  --  127.0.0.0/8      anywhere            
ACCEPT     all  --  192.168.11.0/24  anywhere            

Chain OUTPUT (policy ACCEPT)
target     prot opt source           destination         
ACCEPT     all  --  anywhere         anywhere      state RELATED,ESTABLISHED

iptables で制限のための設定を間違えると、通信ができなくなるので、基本的な考え方だけを紹介する。

「条件にマッチしたパケットをどうするのか」というルールを、チェインに並べておき、パケットが届くとチェインの先頭からルールを適用し、ACCEPT/REJECT/DROPなどの対応を決める。

iptables でルールを登録する場合は、一般的に以下の書式で、条件1,条件2… をすべて満たすパケットをどうするのかのラベルを最後に記載する。

$ iptables -A チェイン 条件1 条件2 … -j ラベル

$ iptables -P INPUT DROP            # デフォルトポリシーの設定
  # INPUT のルールにどれもマッチしない場合はDROP(パケット廃棄)
$ iptables -P OUTPUT ACCEPT
  # OUTPUT のどのルールにもマッチしなければACCEPT(受信許可)

$ iptables -A INPUT -s 127.0.0.1 -j ACCEPT
  # INPUT の末尾に、"送信元IPが 127.0.0.1 ならACCEPT" を追加

$ iptables -A INPUT --dport 80 -j ACCEPT
  # INPUT の末尾に、"宛先ポートが 80 ならACCEPT" を追加

$ iptables -A INPUT -s 11.22.33.44 -j DROP
  # INPUT の末尾に、"送信元IPが 11.22.33.44 ならDROP" を追加

iptablesのオプション引数
  -P      デフォルトポリシーの設定
  -A      末尾にルールを追加
  -s      送信元IPアドレスの条件指定
  -d      宛先IPアドレスの条件指定
  --sport 送信元ポート番号の条件指定
  --dport 宛先ポート番号の条件指定
  -j      指定ラベルに移動

INPUT chain
  |
<送信元IPが127.0.0.1なら>----ACCEPT
  |
<宛先ポートが80なら>----------ACCEPT
  |
<送信元IPが11.22.33.44なら>--DROP
  |
  DROP

Google 検索

My Google   Yahoo

Microsoft

ファンサイト