備忘録:Linux Firewall(iptablesの典型的パターン集)
2018/08/04
2019/12/23
タグ: Firewall, iptables, Linux
CentOS7からiptablesからfirewalldにデフォルトfirewallが変わっていますが、実際のところFirewalldの中身はiptablesなので操作体系が変わっただけなんだけどね。個人的には長く使ってきたiptablesが好きなので相変わらずCentOS7の導入後はiptablesに切り替えています。それに今までの蓄積してきたスクリプトなども活用できるのでiptablesでいいんじゃないと思っています。ルールを記述するにも毎度忘れてしまうためメモとして残します。
Firewalldからiptablesへ切り替え
1 2 3 4 5 |
# systemctl stop firewalld # systemctl disable firewalld # yum install iptables-services # systemctl start iptables # systemctl enable iptables |
デフォルトポリシー
1 2 3 |
# iptables -P INPUT DROP # iptables -P FORWARD DROP # iptables -P OUTPUT DROP |
iptablesのルール保存
1 |
# iptables-save > /etc/sysconfig/iptables |
iptablesのルールフラッシュ
1 |
# iptables -F |
iptablesの行番号表示
1 |
# iptables -L -n --line-number |
iptablesの行番号削除
1 |
# /sbin/iptables -D INPUT 20 <--20行目削除 |
iptablesの行番号挿入
1 |
# iptables -I INPUT 13 -s 110.22.30.101 -p tcp -m tcp --dport 8080 -j ACCEPT <--13行目追加 |
特定のIPアドレス拒否
1 2 |
BLOCK_IP="202.100.43.21" iptables -A INPUT -s "$BLOCK_IP" -j DROP |
特定のネットワークブロック拒否
1 |
iptables -A OUTPUT -d 222.188.0.0/16 -o eth0 -j DROP |
特定のネットワークのみSSH許可
1 2 |
iptables -A INPUT -i eth0 -p tcp -s 202.100.43.0/24 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT |
全てのSSH許可
1 2 |
iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT |
マルチプルプロトコル許可
1 2 |
iptables -A INPUT -i eth0 -p tcp -m multiport --dports 22,80,443,143,25 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp -m multiport --sports 22,80,443,143,25 -m state --state ESTABLISHED -j ACCEPT |
単一プロトコル許可
1 2 |
iptables -A INPUT -i eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT |
ループバックアドレスの許可
1 2 |
iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT |
MySQLサーバの許可
1 2 |
iptables -A INPUT -i eth0 -p tcp -s 110.10.122.0/24 --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 3306 -m state --state ESTABLISHED -j ACCEPT |
DoS攻撃のブロック
1 |
iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT |
外部からのPing許可
1 2 |
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT |
SSL WEBサーバのロードバランシング
1 2 3 |
iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 0 -j DNAT --to-destination 201.200.33.55:443 iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 1 -j DNAT --to-destination 201.200.33.56:443 iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 2 -j DNAT --to-destination 201.200.33.57:443 |
強制的なSYNパケットチェック
1 |
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP |
XMASパケットチェック
1 |
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP |
NULLパケットのDROP
1 |
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP |
IPスプーフィングのDROP
スプーフィングを停止する雛形シェルスクリプトダウンロードカーネルのおすすめ設定変更
/etc/sysctl.confへ書き込んでsysctl -pを実行
1 2 3 4 5 6 7 |
net.ipv6.conf.all.disable_ipv6=1 <--IPv6使わないなら net.ipv6.conf.default.disable_ipv6=1 <--IPv6使わないなら net.ipv4.tcp_timestamps=0 net.ipv4.tcp_syncookiesa=1 net.ipv4.conf.all.rp_filter=1 net.ipv4.conf.all.log_martians=1 net.ipv4.conf.default.log_martians=1 |