後々スクリプトにしたりするためのメモ
#参考
ArchWiki
Man page of iptables
Man page of iptables-extension
###rootかチェック
if [ `whoami` != 'root' ]; then
echo 'plz execute as root user'
fi
###初期化
iptables -F
iptables -X
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
iptables -N TCP
iptables -N UDP
###接続確立済み
iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
###ループバック
iptables -A INPUT -i lo -j ACCEPT
###INVALID状態の接続
iptables -A INPUT -m conntrack --ctstate INVALID -j DROP
###ICMPエコー
参考ページではACCEPTだけど、個人的にDROPがいいので変更。
つまり書かなくてもいい気が。
iptables -A INPUT -p icmp --icmp-type 8 -m conntrack --ctstate NEW -j DROP
###TCP・UDPの新規接続要求
それぞれ、TCPテーブル、UDPテーブルに渡す。
SYNフラグがないTCP新規接続はないらしい。
iptables -A INPUT -p udp -m conntrack --ctstate NEW -j UDP
iptables -A INPUT -p tcp --syn -m conntrack --ctstate NEW -j TCP
###接続拒否するTCP、UDPパケットへの対応
ポートが開いてなかったTCPパケットにはTCPRESETを返す。
UDPはICMP port unreachableメッセージを返す。
のが、LinuxでRFCに従った動きと記載されているが、DROPでいい気もする。
拒否するようなパケットを送ってきた奴なので、アドレスを保存しておく。
iptables -A INPUT -p udp -m recent --set --name UDP-PORTSCAN -j DROP
iptables -A INPUT -p tcp -m recent --set --name TCP-PORTSCAN -j DROP
###TCP・UDP以外のパケットへの対応
上と同様にREJECTがRFCに従った動きみたいだが、DROPでいい気がする。
iptables -A INPUT -j DROP
##TCPテーブル
###SSH
ブルートフォース対策があるので、そちらのテーブルにとばす。そのテーブルの中身は別途記載。
また、SSHのポートは変更してるので気を付ける。
iptables -N IN_SSH
iptables -A TCP -p tcp --dport 22 -m conntrack --ctstate NEW -j IN_SSH
###HTTP(S)
iptables -A TCP -p tcp --dport 80 -j ACCEPT
iptables -A TCP -p tcp --dport 443 -j ACCEPT
##攻撃対策
###ポートスキャン
例ではTCPRESET、ICMPでREJECTしているがDROPにした。
iptables -I TCP -p tcp -m recent --update --seconds 60 --name TCP-PORTSCAN -j DROP
iptables -I UDP -p udp -m recent --update --seconds 60 --name UDP-PORTSCAN -j DROP
###SSHブルートフォース
接続の記録名が統一されてなかったので修正した以外は例そのまま。
10秒以内に3回、1800秒以内に4回以上接続を試みた場合DROPする。
rttlオプションをつけることで、送信元アドレスを偽装してもTTLで判断するらしい誤検知こわいがアリか。
iptables -A IN_SSH -m recent --name SSH-BF --rttl --rcheck --hitcount 3 --seconds 10 -j DROP
iptables -A IN_SSH -m recent --name SSH-BF --rttl --rcheck --hitcount 4 --seconds 1800 -j DROP
iptables -A IN_SSH -m recent --name SSH-BF --set -j ACCEPT
##保存する
iptables-save > /etc/iptables/iptables.rules
とりあえず参考サイト分終わり。
DDoSへの対策をそのうち調べて更新する。
おしまい。