iptables設定
ipatables設定
$ vi ~/iptables #!/bin/bash # インタフェース名定義 LAN=eth0 # 内部ネットワークとして許可する範囲 LOCALNET=192.168.1.1/16 # iptablesのパス IPTABLES=/sbin/iptables # 初期化 $IPTABLES -F # デフォルトルール(以降のルールにマッチしなかった場合に適用するルール)設定 $IPTABLES -P INPUT DROP # 受信はすべて破棄 $IPTABLES -P OUTPUT ACCEPT # 送信はすべて許可 $IPTABLES -P FORWARD DROP # 通過はすべて破棄 # 自ホストからのアクセスをすべて許可 $IPTABLES -A INPUT -i lo -j ACCEPT # 内部からのアクセスをすべて許可 #$IPTABLES -A INPUT -s $LOCALNET -j ACCEPT # 内部から行ったアクセスに対する外部からの返答アクセスを許可 $IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # SYN Cookiesを有効にする # ※TCP SYN Flood攻撃対策 sysctl -w net.ipv4.tcp_syncookies=1 > /dev/null sed -i '/net.ipv4.tcp_syncookies/d' /etc/sysctl.conf echo "net.ipv4.tcp_syncookies=1" >> /etc/sysctl.conf # ブロードキャストアドレス宛pingには応答しない # ※Smurf攻撃対策 sysctl -w net.ipv4.icmp_echo_ignore_broadcasts=1 > /dev/null sed -i '/net.ipv4.icmp_echo_ignore_broadcasts/d' /etc/sysctl.conf echo "net.ipv4.icmp_echo_ignore_broadcasts=1" >> /etc/sysctl.conf # ICMP Redirectパケットは拒否 sed -i '/net.ipv4.conf.*.accept_redirects/d' /etc/sysctl.conf for dev in `ls /proc/sys/net/ipv4/conf/` do sysctl -w net.ipv4.conf.$dev.accept_redirects=0 > /dev/null echo "net.ipv4.conf.$dev.accept_redirects=0" >> /etc/sysctl.conf done # Source Routedパケットは拒否 sed -i '/net.ipv4.conf.*.accept_source_route/d' /etc/sysctl.conf for dev in `ls /proc/sys/net/ipv4/conf/` do sysctl -w net.ipv4.conf.$dev.accept_source_route=0 > /dev/null echo "net.ipv4.conf.$dev.accept_source_route=0" >> /etc/sysctl.conf done # フラグメント化されたパケットはログを記録して破棄 $IPTABLES -A INPUT -f -j LOG --log-prefix '[IPTABLES FRAGMENT] : ' $IPTABLES -A INPUT -f -j DROP # 外部とのNetBIOS関連のアクセスはログを記録せずに破棄 # ※不要ログ記録防止 $IPTABLES -A INPUT ! -s $LOCALNET -p tcp -m multiport --dports 135,136,137,138,139,445 -j DROP $IPTABLES -A INPUT ! -s $LOCALNET -p udp -m multiport --dports 135,136,137,138,139,445 -j DROP $IPTABLES -A OUTPUT ! -d $LOCALNET -p tcp -m multiport --sports 135,136,137,138,139,445 -j DROP $IPTABLES -A OUTPUT ! -d $LOCALNET -p udp -m multiport --sports 135,136,137,138,139,445 -j DROP # 1秒間に4回を超えるpingはログを記録して破棄 # ※Ping of Death攻撃対策 $IPTABLES -N LOG_PINGDEATH $IPTABLES -A LOG_PINGDEATH -m limit --limit 1/s --limit-burst 4 -j ACCEPT $IPTABLES -A LOG_PINGDEATH -j LOG --log-prefix '[IPTABLES PINGDEATH] : ' $IPTABLES -A LOG_PINGDEATH -j DROP $IPTABLES -A INPUT -p icmp --icmp-type echo-request -j LOG_PINGDEATH # 全ホスト(ブロードキャストアドレス、マルチキャストアドレス)宛パケットはログを記録せずに破棄 # ※不要ログ記録防止 $IPTABLES -A INPUT -d 255.255.255.255 -j DROP $IPTABLES -A INPUT -d 224.0.0.1 -j DROP # 113番ポート(IDENT)へのアクセスには拒否応答 # ※メールサーバ等のレスポンス低下防止 $IPTABLES -A INPUT -p tcp --dport 113 -j REJECT --reject-with tcp-reset # (Ubuntu/Debian系のみ) # 180秒以内に10回以上のssh接続を試みたIPアドレスをシャットアウトする $IPTABLES -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name ssh_attack $IPTABLES -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 180 --hitcount 10 --rttl --name ssh_attack -j LOG --log-prefix 'SSH attack: ' $IPTABLES -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 180 --hitcount 10 --rttl --name ssh_attack -j DROP # 外部からのTCP22番ポート(SSH)へのアクセスを許可 $IPTABLES -A INPUT -p tcp --dport 22 -j ACCEPT # 外部からのTCP80番ポート(HTTP)へのアクセスを許可 $IPTABLES -A INPUT -p tcp --dport 80 -j ACCEPT # 拒否IPアドレスからのアクセスはログを記録せずに破棄 if [ -s /root/.deny_ip ]; then iptables -N DENY_HOST for ip in `cat /root/.deny_ip` do iptables -A DENY_HOST -s $ip -m limit --limit 1/s -j LOG --log-prefix '[IPTABLES DENY_HOST] : ' iptables -A DENY_HOST -s $ip -j DROP iptables -I INPUT -j DENY_HOST done fi # 上記のルールにマッチしなかったアクセスは破棄 $IPTABLES -A INPUT -j DROP $IPTABLES -A FORWARD -j DROP 設定してみる。 $ sudo cp iptables /etc/network/if-pre-up.d/ $ sudo chmod 700 /etc/network/if-pre-up.d/iptables $ sudo /etc/network/if-pre-up.d/iptables 反映されたか見てみる。書いたっぽい内容が出てくるはず。 $ sudo /sbin/iptables-save > foo.txt $ cat foo.txt ついでにnetstatで開放してるポートも見ておく。 $ netstat -l あと、denyhostsというソフトを入れておくと、一定時間内に連続アクセスしてきたIPをhosts.denyに放り込めるらしい。 $ sudo apt-get install denyhosts 詳しい設定はこのファイルに書く。 $ vi /etc/denyhosts.conf
参考m(_ _)m