6
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

個人的iptables設定メモ

Last updated at Posted at 2016-04-23

後々スクリプトにしたりするためのメモ

参考

ArchWiki
Man page of iptables
Man page of iptables-extension

rootかチェック

iptables.sh
if [ `whoami` != 'root' ]; then
    echo 'plz execute as root user'
fi

初期化

iptables.sh
iptables -F
iptables -X
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP

iptables -N TCP
iptables -N UDP

接続確立済み

iptables.sh
iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

ループバック

iptables.sh
iptables -A INPUT -i lo -j ACCEPT

INVALID状態の接続

iptables.sh
iptables -A INPUT -m conntrack --ctstate INVALID -j DROP

ICMPエコー

参考ページではACCEPTだけど、個人的にDROPがいいので変更。
つまり書かなくてもいい気が。

iptables.sh
iptables -A INPUT -p icmp --icmp-type 8 -m conntrack --ctstate NEW -j DROP

TCP・UDPの新規接続要求

それぞれ、TCPテーブル、UDPテーブルに渡す。
SYNフラグがないTCP新規接続はないらしい。

iptables.sh
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.sh
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.sh
iptables -A INPUT -j DROP

TCPテーブル

SSH

ブルートフォース対策があるので、そちらのテーブルにとばす。そのテーブルの中身は別途記載。
また、SSHのポートは変更してるので気を付ける。

iptables.sh
iptables -N IN_SSH
iptables -A TCP -p tcp --dport 22 -m conntrack --ctstate NEW -j IN_SSH

HTTP(S)

iptables.sh
iptables -A TCP -p tcp --dport 80 -j ACCEPT
iptables -A TCP -p tcp --dport 443 -j ACCEPT

攻撃対策

ポートスキャン

例ではTCPRESET、ICMPでREJECTしているがDROPにした。

iptables.sh
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.sh
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.sh
iptables-save > /etc/iptables/iptables.rules

とりあえず参考サイト分終わり。
DDoSへの対策をそのうち調べて更新する。

おしまい。

6
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?