Created
December 17, 2012 16:31
-
-
Save falcon8823/4319634 to your computer and use it in GitHub Desktop.
CentOS用のiptables設定
さくらのVPSでの利用を想定。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
#---------------------------------------# | |
# 設定開始 # | |
#---------------------------------------# | |
# WANインタフェース名定義 | |
WAN=eth0 | |
# VPNネットワークの範囲 | |
#VPN=tap_utvpn | |
#VPN_NET=192.168.10.0/24 | |
# iptablesのパス | |
IPTABLES=/sbin/iptables | |
#---------------------------------------# | |
# 設定終了 # | |
#---------------------------------------# | |
# WANネットマスク取得 | |
WAN_BCAST=`ifconfig $WAN |sed -e 's/^.*Bcast:\([^ ]*\).*$/\1/p' -e d` | |
# パケット転送停止 | |
# ※ルール設定中のパケット通過防止 | |
sysctl -w net.ipv4.ip_forward=0 > /dev/null | |
# 初期化 | |
$IPTABLES -F | |
# パスMTU問題対処 | |
iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu | |
# デフォルトルール(以降のルールにマッチしなかった場合に適用するルール)設定 | |
$IPTABLES -P INPUT DROP # 受信はすべて破棄 | |
$IPTABLES -P OUTPUT ACCEPT # 送信はすべて許可 | |
$IPTABLES -P FORWARD DROP # 通過はすべて破棄 | |
###### 各種攻撃対策 | |
# 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 -N LOG_FRAGMENT | |
$IPTABLES -A LOG_FRAGMENT -j LOG --log-tcp-options --log-ip-options --log-prefix '[IPTABLES FRAGMENT] : ' | |
$IPTABLES -A LOG_FRAGMENT -j DROP | |
$IPTABLES -A INPUT -f -j LOG_FRAGMENT | |
$IPTABLES -A FORWARD -f -j LOG_FRAGMENT | |
# WANからの送信元がプライベートIPアドレスのパケットはログを記録して破棄 | |
# ※IP spoofing攻撃対策 | |
$IPTABLES -N LOG_SPOOFING | |
$IPTABLES -A LOG_SPOOFING -j LOG --log-tcp-options --log-ip-options --log-prefix '[IPTABLES SPOOFING] : ' | |
$IPTABLES -A LOG_SPOOFING -j DROP | |
$IPTABLES -A INPUT -i $WAN -s 127.0.0.0/8 -j LOG_SPOOFING | |
$IPTABLES -A INPUT -i $WAN -s 10.0.0.0/8 -j LOG_SPOOFING | |
$IPTABLES -A INPUT -i $WAN -s 172.16.0.0/12 -j LOG_SPOOFING | |
$IPTABLES -A INPUT -i $WAN -s 192.168.0.0/16 -j LOG_SPOOFING | |
$IPTABLES -A FORWARD -i $WAN -s 127.0.0.0/8 -j LOG_SPOOFING | |
$IPTABLES -A FORWARD -i $WAN -s 10.0.0.0/8 -j LOG_SPOOFING | |
$IPTABLES -A FORWARD -i $WAN -s 172.16.0.0/12 -j LOG_SPOOFING | |
$IPTABLES -A FORWARD -i $WAN -s 192.168.0.0/16 -j LOG_SPOOFING | |
# WANとのWindowsファイル共有関連のアクセスはログを記録せずに破棄 | |
$IPTABLES -A INPUT -i $WAN -p tcp -m multiport --dports 135,137,138,139,445 -j DROP | |
$IPTABLES -A INPUT -i $WAN -p udp -m multiport --dports 135,137,138,139,445 -j DROP | |
$IPTABLES -A OUTPUT -o $WAN -p tcp -m multiport --sports 135,137,138,139,445 -j DROP | |
$IPTABLES -A OUTPUT -o $WAN -p udp -m multiport --sports 135,137,138,139,445 -j DROP | |
$IPTABLES -A FORWARD -i $WAN -p tcp -m multiport --dports 135,137,138,139,445 -j DROP | |
$IPTABLES -A FORWARD -i $WAN -p udp -m multiport --dports 135,137,138,139,445 -j DROP | |
$IPTABLES -A FORWARD -o $WAN -p tcp -m multiport --sports 135,137,138,139,445 -j DROP | |
$IPTABLES -A FORWARD -o $WAN -p udp -m multiport --sports 135,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 FORWARD ! -o $WAN -p icmp --icmp-type echo-request -j LOG_PINGDEATH | |
# 送信元IPアドレスがVPNネットワーク範囲外のアクセスはログを記録して破棄 | |
# ※Ingress対策 | |
#iptables -N LOG_INGRESS | |
#iptables -A LOG_INGRESS -j LOG --log-tcp-options --log-ip-options --log-prefix '[IPTABLES INGRESS] : ' | |
#iptables -A LOG_INGRESS -j DROP | |
#iptables -A FORWARD -i $VPN ! -s $VPN_NET -j LOG_INGRESS | |
###### 許可設定 | |
# 自ホストからのアクセスをすべて許可 | |
$IPTABLES -A INPUT -i lo -j ACCEPT | |
# VPNネットワーク内からのアクセスをすべて許可 | |
#$IPTABLES -A INPUT -s $VPN_NET -j ACCEPT | |
#$IPTABLES -A FORWARD -s $VPN_NET -j ACCEPT | |
# 自ホストから行ったアクセスに対する外部からの返答アクセスを許可 | |
$IPTABLES -A INPUT -i $WAN -m state --state ESTABLISHED,RELATED -j ACCEPT | |
# WANからの必須ICMPパケットを許可 | |
$IPTABLES -A INPUT -p icmp --icmp-type destination-unreachable -j ACCEPT | |
$IPTABLES -A INPUT -p icmp --icmp-type source-quench -j ACCEPT | |
$IPTABLES -A INPUT -p icmp --icmp-type time-exceeded -j ACCEPT | |
$IPTABLES -A INPUT -p icmp --icmp-type parameter-problem -j ACCEPT | |
$IPTABLES -A FORWARD -p icmp --icmp-type destination-unreachable -j ACCEPT | |
$IPTABLES -A FORWARD -p icmp --icmp-type source-quench -j ACCEPT | |
$IPTABLES -A FORWARD -p icmp --icmp-type time-exceeded -j ACCEPT | |
$IPTABLES -A FORWARD -p icmp --icmp-type parameter-problem -j ACCEPT | |
###### 拒否設定 | |
# 113番ポート(IDENT)へのアクセスには拒否応答 | |
# ※メールサーバ等のレスポンス低下防止 | |
$IPTABLES -A INPUT -p tcp --dport 113 -j REJECT --reject-with tcp-reset | |
$IPTABLES -A FORWARD -p tcp --dport 113 -j REJECT --reject-with tcp-reset | |
# 全ホスト(ブロードキャストアドレス、マルチキャストアドレス)宛パケットはログを記録せずに破棄 | |
# ※不要ログ記録防止 | |
$IPTABLES -A INPUT -d 255.255.255.255 -j DROP | |
$IPTABLES -A INPUT -d 224.0.0.1 -j DROP | |
# Dropboxのブロードキャストを破棄 | |
# WAN側からのブロードキャストを破棄 | |
$IPTABLES -A INPUT -p udp --dport 17500 -d $WAN_BCAST -j DROP | |
# 自ホストからWAN側へのブロードキャストを破棄 | |
$IPTABLES -A OUTPUT -p udp --dport 17500 -d $WAN_BCAST -j DROP | |
# SSHへの自動攻撃対策 | |
# 180秒以内に20回以上の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 20 --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 20 --rttl --name ssh_attack -j DROP | |
############ ポート開放設定 ここから ######################## | |
# ※使わないポートはコメントアウトしてある | |
### SSH ### | |
iptables -A INPUT -p tcp --dport 22 -j ACCEPT | |
## Webサーバ関連 | |
### HTTP ### | |
iptables -A INPUT -p tcp --dport 80 -j ACCEPT | |
### HTTPS ### | |
#iptables -A INPUT -p tcp --dport 443 -j ACCEPT | |
### DNS ### | |
#iptables -A INPUT -p tcp --dport 53 -j ACCEPT | |
#iptables -A INPUT -p udp --dport 53 -j ACCEPT | |
## メールサーバ関連 | |
### SMTP ### | |
#iptables -A INPUT -p tcp --dport 25 -j ACCEPT | |
### SMTPS ### | |
#iptables -A INPUT -p tcp --dport 465 -j ACCEPT | |
### POP3 ### | |
#iptables -A INPUT -p tcp --dport 110 -j ACCEPT | |
### POP3S ### | |
#iptables -A INPUT -p tcp --dport 995 -j ACCEPT | |
### IMAP ### | |
#iptables -A INPUT -p tcp --dport 143 -j ACCEPT | |
### IMAPS ### | |
#iptables -A INPUT -p tcp --dport 993 -j ACCEPT | |
############ ポート開放設定終わり ######################## | |
# VPNの設定 ここから ------------------------------------- | |
# PPTP VPN | |
#$IPTABLES -A INPUT -p tcp --dport 1723 -j ACCEPT | |
#$IPTABLES -A INPUT -p gre -j ACCEPT | |
# UT-VPN | |
#$IPTABLES -A INPUT -p tcp --dport 443 -j ACCEPT | |
#$IPTABLES -A INPUT -p tcp --dport 992 -j ACCEPT | |
#$IPTABLES -A INPUT -p tcp --dport 5555 -j ACCEPT | |
# UT-VPN 速度測定ポート | |
#$IPTABLES -A INPUT -p tcp --dport 9821 -j ACCEPT | |
# NAPT for VPN Start | |
# NAPT変換 | |
#$IPTABLES -t nat -A POSTROUTING -s $VPN_NET -j MASQUERADE | |
# 外部からの返答を許可(NAT) | |
#$IPTABLES -A FORWARD -i $WAN -d $VPN_NET -m state --state ESTABLISHED,RELATED -j ACCEPT | |
# NAPT for VPN End | |
# VPNネットワークからこのマシンへのアクセスを許可 | |
#$IPTABLES -A INPUT -s $VPN_NET -j ACCEPT | |
# VPNの設定 ここまで ------------------------------------- | |
#上記のルールにマッチしなかったアクセスは破棄 | |
$IPTABLES -A INPUT -m limit --limit 1/s -j LOG --log-prefix '[IPTABLES INPUT] : ' | |
$IPTABLES -A INPUT -j DROP | |
$IPTABLES -A FORWARD -m limit --limit 1/s -j LOG --log-prefix '[IPTABLES FORWARD] : ' | |
$IPTABLES -A FORWARD -j DROP | |
# パケット転送開始 | |
# VPNを動作させるときにはコメントを外すこと | |
#sysctl -w net.ipv4.ip_forward=1 > /dev/null | |
#sed -i '/net.ipv4.ip_forward/d' /etc/sysctl.conf | |
#echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf | |
# ルールを保存してiptablesを起動 | |
/etc/rc.d/init.d/iptables save | |
/etc/rc.d/init.d/iptables start | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment