ページ

2012-03-23

Arch linuxの設定(iptables)

Arch linuxのファイヤーウォールとして
iptablesを設定した。


  • iptablesの取得
  • iptablesはpacmanから入手できる。

    pacman -S iptables
  • 必要なチェインの生成
  • # iptables -N TCP
    # iptables -N UDP
    
  • ポリシーの設定
  • # iptables -P FORWARD DROP
    # iptables -P OUTPUT ACCEPT
    
  • INPUT chainのpolicyをdropに設定する。
  • 全てのトラフィックを破棄し、必要なものを指定して許可することがセキュアなファイヤーウォールの作り方らしい。

    # iptables -P INPUT DROP
    
  • ESTABLISHED,RELATEDの許可
  • ESTABLISHED
    確立された既存のパケットと関係のあるパケット
    RELATED
    既存のパケットと関係のある新しいセッションのパケット
    # iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
    



  • loopbackの許可
  • loopbak(lo)interfaceは多くのサービスやアプリケーションに必要である。

    loopback
    自分自身に対するデータ通信
    # iptables -A INPUT -i lo -j ACCEPT
    



  • INVALIDの破棄
  • invalid状態のトラフィックを全て破棄すること。

    トラフィックは状態により、NEW,ESTABLISHED,RELATED,INVALIDという4つのカテゴリに分けられる。

    そして、"stateless"firewallよりもセキュアな"stateful"firewallを作ることが可能。

    # iptables -A INPUT -m conntrack --ctstate INVALID -j DROP
    


  • ICMP echo requestの許可(ping)
  • PCがルータでなくなってから、他に状態NEWのICMPトラフィックは許可する必要はない。

    # iptables -A INPUT -p icmp --icmp-type 8 -m conntrack --ctstate NEW -j ACCEPT
    


  • OPEN chainsの設定
  • トランスポート層でありネットワーク層のIPとセッション層のプロトコル橋渡しする。

    UDP
    user datagram protocol
    TCP
    transmission control protocol

    新しい接続はsyn packetで始まる。

    # iptables -A INPUT -p udp -m conntrack --ctstate NEW -j UDP
    # iptables -A INPUT -p tcp --syn -m conntrack --ctstate NEW -j TCP
    



  • RST TCPコネクションと、ICMP port unreacheのUDP streamは拒絶(REJECT)する。
  • これはデフォルトのLinuxのふるまい(RFC準拠)を模倣しており、接続停止の素早い許可と整理がなされる。

    REJECT:dropとは違い、拒絶したことが送り側に返される。

    RST:syn を送り、接続できなかった場合RSTパケットが送られてくる。

    # iptables -A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable
    # iptables -A INPUT -p tcp -j REJECT --reject-with tcp-rst
    



  • 他のプロトコルのための設定。
  • これはデフォルトのLinuxの振る舞いを模倣している。

    # iptables -A INPUT -j REJECT --reject-with icmp-proto-unreachable
    

    以下ではFTP,SMPT,WEBを許可している。



    FTPの許可
    # iptables -A TCP -p tcp --dport 20 -j ACCEPT
    # iptables -A TCP -p tcp --sport 20 -j ACCEPT
    # iptables -A TCP -p tcp --dport 21 -j ACCEPT
    # iptables -A TCP -p tcp --sport 21 -j ACCEPT
    


    SMTP(送信)の許可
    # iptables -A TCP -p tcp --dport 25 -j ACCEPT
    # iptables -A TCP -p tcp --sport 25 -j ACCEPT
    


    WEBの許可
    # iptables -A TCP -p tcp --dport 80 -j ACCEPT
    # iptables -A TCP -p tcp --sport 80 -j ACCEPT
    



  • spoofing attack対策(なりすまし)
  • spoofing attackに対応するために/etc/sysctl.confを編集する。

    vim /etc/sysctl.conf
    net.ipv4.conf.all.rp_filter=1
    



  • Hide PC
  • echo リクエストをブロックする。

    vim /etc/sysctl.conf
    net.ipv4.icmp_echo_ignore_all = 1
    

    また、レート制限をすることは不正行為をコントロールするためには良い方法といえる。

    iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 30/min --limit-burst 8 -j ACCEPT
    iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
    



  • ルールのセーブ
  • ここまで行った操作を保存する。

    # /etc/rc.d/iptables save
    



  • boot時の読み込み(/etc/rc.conf::networkの前に書く)
  • boot時にiptablesが読み込まれるようにdaemonの設定をする。

    DAEMONS=(... iptables network ...)
    


サーバ用ではない個人用のPCのファイアーウォールの設定としてArch linuxに以上のiptablesの設定をした。




参考リンク
Archwiki::Simple Stateful Firewall


0 件のコメント:
コメントを投稿