iptables v1.4.12
プログラミングの質問でなくてすみません。
iptablesの設定がうまくできないようで、困っています。
http://web.archive.org/web/201103030202 ... 1201462048
を参考に設定しました。
以下のファイルを/etc/network/if-pre-up.d/iptablesというファイルに保存し、所有権root:root、パーミッション700の設定をしました。
#!/bin/bash
LAN=eth0
LOCALNET=127.0.0.1/24
IPTABLES=/sbin/iptables
$IPTABLES -F
$IPTABLES -X
$IPTABLES -Z
$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
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
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
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
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
#$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
$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
$IPTABLES -A INPUT -p tcp --dport 113 -j REJECT --reject-with tcp-reset
$IPTABLES -A INPUT -p tcp --dport ***** -m state --state NEW -m recent --set --name ssh_attack
#$IPTABLES -A INPUT -p tcp --dport ***** -m state --state NEW -m recent --update --seconds 180 --hitcount 5 --rttl --name ssh_attack -j LOG --log-prefix 'SSH attack: '
$IPTABLES -A INPUT -p tcp --dport ***** -m state --state NEW -m recent --update --seconds 180 --hitcount 5 --rttl --name ssh_attack -j DROP
# ports for services
$IPTABLES -A INPUT -p tcp --dport ***** -j ACCEPT
$IPTABLES -A INPUT -p tcp --dport 80 -j ACCEPT
# for FTP (PASV port 60000:60030)
#$IPTABLES -A INPUT -p tcp --dport 21 -j ACCEPT
#$IPTABLES -A INPUT -p tcp --dport 60000:60030 -j ACCEPT
#ports for services end
# deny IP address list "/root/.deny_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 -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
$IPTABLES -A OUTPUT -j ACCEPT
この状態で外部からのHTTPとSSHは繋がるのですが、内部から外部にアクセスすることができないようです。
具体的には「ping dixq.net」と「wget http://49.212.156.142/」を試し、ダメでした。
pingの方はしばらく待つと「ping: unknown host dixq.net」というエラーが出ました。
wgetの方は30秒くらい待ち、何も起こりませんでした。 というコマンドを実行すると、ping、wgetともに正常動作しました。
しかし、再び上記のスクリプトを実行すると、できなくなりました。 というコマンドや再起動も試しましたが、ダメでした。
どうすれば上記サイトの想定する防御を有効にし、かつ内部からインターネットにアクセスできるようになるでしょうか?
よろしくお願いします。