# cd /etc/init.d # vi iptables.sh (内容は別途) ちなみに /etc/init.d/iptables というのが既に存在するが使い方良くわかってないので無視(^^;) # chmod 755 iptables.sh # ./iptables.sh 設定が間違っていたりすると、ここで通信不能になる場合がある。 # iptables -L 内容を確認する。 /var/log/syslogの内容を確認しながら、設定に問題ないかを検証する。
起動時に自動で動くようにする。 ここはiptables.shで問題ないという確認が十分にできてから行うこと。 # cd /etc/rcS.d # ln -s ../init.d/iptables.sh S99iptables.sh これで自動起動するようになる。ちなみに辞めたいときは頭S以外で始まるファイル名にするか削除する。拡張子.bakとかじゃだめ。 また、今後設定を変えるときには、iptables.shを直接書き換えると危険なので別ファイルで確認してから更新すること。
/etc/init.d/iptables.sh 作りかけの例
#!/bin/sh # (参考)http://www.atmarkit.co.jp/flinux/rensai/iptables01/iptables01f.html # # ・外部からの接続パケットは基本的にすべて破棄 # ただし接続済み通信のパケットは許可 # ・内部からの接続パケットは基本的にすべて許可 # ・ループバックアドレスに関してはすべて許可 # ・一部のホストからのping, ssh, telnet, www, samba を許可 # ただし接続の最初時にSYNで始まらない接続パケットは破棄 KUROBOX='192.168.0.100' HOST1='192.168.0.101' HOST2='192.168.0.102' HOST3='192.168.0.103' HOST4='192.168.2.1' HOST5='192.168.2.2' ANY='0.0.0.0/0' ACCEPT_ICMP=" $KUROBOX $HOST1 $HOST2 $HOST3" ACCEPT_SSH=" $KUROBOX $HOST1 $HOST2 $HOST3" ACCEPT_TELNET=" $KUROBOX $HOST1" ACCEPT_WWW=" $KUROBOX $HOST1" ACCEPT_SAMBA=" $KUROBOX $HOST1 $HOST2 $HOST3" # # Flush & Reset # iptables -F iptables -X # # Deafult Rule # iptables -P INPUT DROP iptables -P OUTPUT ACCEPT iptables -P FORWARD ACCEPT #iptables -P OUTPUT DROP #iptables -P FORWARD DROP iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP # # loopback # iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT # # ICMP # for HOST in $ACCEPT_ICMP do iptables -A INPUT -p icmp --icmp-type echo-request -s $HOST -d $KUROBOX -j ACCEPT iptables -A OUTPUT -p icmp --icmp-type echo-reply -s $KUROBOX -d $HOST -j ACCEPT iptables -A OUTPUT -p icmp --icmp-type echo-request -s $KUROBOX -d $HOST -j ACCEPT iptables -A INPUT -p icmp --icmp-type echo-reply -s $HOST -d $KUROBOX -j ACCEPT done # # ssh # for HOST in $ACCEPT_SSH do iptables -A INPUT -p tcp -m state --state NEW,ESTABLISHED,RELATED -s $HOST -d $KUROBOX --dport 22 -j ACCEPT iptables -A OUTPUT -p tcp -s $KUROBOX --sport 22 -d $HOST -j ACCEPT done # # telnet # for HOST in $ACCEPT_TELNET do iptables -A INPUT -p tcp -m state --state NEW,ESTABLISHED,RELATED -s $HOST -d $KUROBOX --dport 23 -j ACCEPT iptables -A OUTPUT -p tcp -s $KUROBOX --sport 23 -d $HOST -j ACCEPT done # # www # for HOST in $ACCEPT_WWW do iptables -A INPUT -p tcp -m state --state NEW,ESTABLISHED,RELATED -s $HOST -d $KUROBOX --dport 80 -j ACCEPT iptables -A OUTPUT -p tcp -s $KUROBOX --sport 80 -d $HOST -j ACCEPT done # # samba # for HOST in $ACCEPT_SAMBA do iptables -A INPUT -p tcp -s $HOST -d $KUROBOX --dport 137:139 -j ACCEPT iptables -A INPUT -p tcp -s $HOST -d $KUROBOX --dport 445 -j ACCEPT iptables -A INPUT -p udp -s $HOST --dport 137:139 -j ACCEPT iptables -A INPUT -p udp -s $HOST --dport 445 -j ACCEPT iptables -A OUTPUT -p tcp -s $KUROBOX --sport 137:139 -d $HOST -j ACCEPT iptables -A OUTPUT -p tcp -s $KUROBOX --sport 445 -d $HOST -j ACCEPT iptables -A OUTPUT -p udp -s $KUROBOX --sport 137:139 -j ACCEPT iptables -A OUTPUT -p udp -s $KUROBOX --sport 445 -j ACCEPT done # # logging # iptables -N LOGGING iptables -A LOGGING -j LOG --log-level warning --log-prefix "DROP:" -m limit iptables -A LOGGING -j DROP iptables -A INPUT -j LOGGING iptables -A OUTPUT -j LOGGING