Memo/Linux/iptables

http://dexlab.net/pukiwiki/index.php?Memo/Linux/iptables
 

iptables


一時的な追加

  • 以下のような状態(sshのみ許可してある)で、一時的にHTTP/80も許可したい。順番が需要。5番目のREJECTより上に追加する必要がある
    1. sudo service iptables status                                                                        
    2. Table: filter
    3. Chain INPUT (policy ACCEPT)
    4. num  target     prot opt source               destination        
    5. 1    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
    6. 2    ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           
    7. 3    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
    8. 4    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22 
    9. 5    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited
  • 「-I INPUT 5」(Insert)で挿入
    1. sudo iptables -I INPUT 5 -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
    2.  
    3. sudo service iptables status
    4. ...
    5. 4    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22 
    6. 5    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:80 
    7. 6    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited
  • 「-A」(Append)は最後に追加される。REJECTより後ろに追加しても効果は無い
  • 「-F」で全て削除
  • 「-D」(Delete)削除
    1. # 完全一致したルールを削除
    2. sudo iptables -D INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
    3.  
    4. # 5番目を削除
    5. sudo iptables -D INPUT 5
  • 「-R」(Replace)で置換
    1. # ポートだけ443に変更
    2. sudo iptables -R INPUT 5 -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT
  • save前であれば再起動で元に戻る。reloadでは変わらない
    1. sudo service iptables restart
  • 保存したい場合はsave。「/etc/sysconfig/iptables」に保存される。1世代前の設定は「/etc/sysconfig/iptables.save」になる。
    1. sudo service iptables save

メンテナンス中に一時的に通信を止める

  • iptalbesで外から内のトラフィック(例:http)をブロックする場合
    1. # 制限
    2. iptables -A INPUT -p tcp -m tcp --dport 80 -j DROP
    3.  
    4. # 作業
    5.  
    6. # 解除
    7. iptables -D INPUT -p tcp -m tcp --dport 80 -j DROP
    8.  
    9. # iptablesが実行されているので、必要なら止める
    10. service iptables stop
  • iptalbesで内から外のトラフィック(例:http)をブロックする場合
    1. iptables -A OUTPUT -p tcp -m tcp --dport 80 -j DROP

日本/特定国のアクセスを遮断する


iptables unable to initializetable 'filter'

古いkernelを削除したところ、iptablesの再起動ができなくなった。 /var/log/messageを見るとエラーが出ているので、kernelを入れ直して終了

  • エラー
    1. service iptables restart
    2. iptables ファイアウォールルールを適用中: iptables-restore v1.3.5: iptables-restore: unable to initializetable 'filter'
    3.  
    4. Error occurred at line: 3
    5. Try `iptables-restore -h' or 'iptables-restore --help' for more information.
  • 原因
    1. tail -f /var/log/messages
    2. Jan 31 01:36:44 localhost modprobe: FATAL: Could not load /lib/modules/2.6.18-194.el5/modules.dep: No such file or directory
  • 該当カーネルのインストール
    1. yum install kernel-2.6.18-194.el5

iptablesでのファイヤーウォール設定

  • IPアドレス範囲を指定して許可
    1. # swat
    2. -A RH-Firewall-1-INPUT -s 192.168.1.0/255.255.255.0 -p tcp -m state --state NEW -m tcp --dport 901 -j ACCEPT
  • eth0(global), eth1(internal)がある場合、eth1は全許可
    1. -A INPUT -i eth1 -j ACCEPT
  • 現在の設定確認
    1. iptables -L
  • 現在空いているポートを調べるには
    1. nmap -sT -p 1-65535 localhost
    2. nmap localhost
  • 設定ファイルを直接編集する場合
    1. vi /etc/sysconfig/iptables
    2. ----
    3. ...編集
    4. ----
    5. service iptables reload
  • 例:LANからの接続を許可
    1. iptables -A INPUT -i eth0 -s 192.168.0.0/24 -j ACCEPT
    2. # httpを許可
    3. iptables -A INPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT  # HTTP
    4. service iptables save

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