実践Linux
CentOS7        CentOS7 目次へ  TOP(HOME)へ


ダイレクトルールを使ったFirewallの強化     2016年6月

●ダイレクトルール     CentOS7の新機能/firewalled参照
ダイレクトルールの書式
# firewall-cmd [--permanent] --direct --add-rule {ipv4|ipv6|eb} <テーブル> <チェイン> <優先順位> <引数>
 テーブル filter、nat、mangle
 チェイン INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING
 引数部分
  stateモジュール
   -m state --state NEW
   INVALID  既存のコネクションとは関係のないパケット
   NEW    新しいコネクションの接続に関するパケット
   ESTABLISHD  接続済みのコネクションのパケット
   RELATED  接続済みのコネクションに関連して発生した新たなコネクションのパケット
  オプション
   -s <address>
   -d <address>
   --sport <port>
   --dport <port>
   -i <interface>
   -o <interface>
   -j <target>
   -m <module>
 プロトコル tcp、udp、icpm(ipv6のときはicmpv6)、all
 ターゲット ACCEPT、DROP、RETURN、REJECT、REDIRECT、SNAT、DNAT、MASQUERADE、LOG

削除は、--add-ruleを--remove-ruleに。

ダイレクトルールの表示
# firewall-cmd --direct --get-all-rules

●チェインの作成
# firewall-cmd --direct --add-chain ipv4 filter <チェイン名>

●チェイン
# iptables -L -n --line-number で見てみると、チェインの最後に作成したチェインが表示される。
チェインは以下のとおり
 INPUT
 FORWARD
 OUTPUT
 FORWARD_IN_ZONES、FORWARD_IN_ZONES_SOURCE、FORWARD_OUT_ZONES、FORWARD_OUT_ZONES_SOURCE
 FORWARD_direct
 FWDI_external 〜 FWDO_trusted_log
 INPUT_ZONES、INPUT_ZONES_SOURCE
 INPUT_direct
 IN_external 〜 IN_trusted_log
 OUTPUT_direct
 最後に作成したチェイン

このFORWARD_direct、INPUT_direct、OUTPUT_directチェインにダイレクトルールが記入されていく。
OUTPUTに関しては、ゾーンの設定部分がないことに注意。

●start-my-firewalldスクリプトの作成
以前のipteables(コメントアウトした黒文字部分=CentOS5/6.5参照)をダイレクトルール(緑文字)に置き換える。

#! /bin/sh

######syn-flood:DROP######
#/sbin/iptables -N syn-flood
#/sbin/iptables -A INPUT -i eth0 -p tcp --syn -j syn-flood
#/sbin/iptables -A syn-flood -m limit --limit 1/s --limit-burst 4 -j RETURN
#/sbin/iptables -A syn-flood -j LOG --log-prefix "IPTABLES SYN-FLOOD:"
#/sbin/iptables -A syn-flood -j DROP

firewall-cmd --permanent --direct --add-chain ipv4 filter syn-flood
firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 100 -i enp0 -p icmp --icmp-type echo-request -j syn-flood
firewall-cmd --permanent --direct --add-rule ipv4 filter syn-flood 150 -m limit --limit 1/s --limit-burst 4 -j RETURN
firewall-cmd --permanent --direct --add-rule ipv4 filter syn-flood 151 -j LOG --log-prefix "IPTABLES SYN-FLOOD:"
firewall-cmd --permanent --direct --add-rule ipv4 filter syn-flood 152 -j DROP

######Make sure NEW tcp connections are SYN packets:DROP######
#/sbin/iptables -A INPUT -i eth0 -p tcp ! --syn -m state --state NEW -j LOG --log-prefix "IPTABLES SYN-FLOOD:"
#/sbin/iptables -A INPUT -i eth0 -p tcp ! --syn -m state --state NEW -j DROP

firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 200 -i enp0 -p tcp ! --syn -m state --state NEW -j LOG --log-prefix "IPTABLES SYN-FLOOD:"
firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 201 -p tcp ! --syn -m state --state NEW -j DROP

######ping of death:DROP######
#/sbin/iptables -N ping-death
#/sbin/iptables -A INPUT -i eth0 -p icmp --icmp-type echo-request -j ping-death
#/sbin/iptables -A ping-death -m limit --limit 1/s --limit-burst 4 -j RETURN
#/sbin/iptables -A ping-death -j LOG --log-prefix "IPTABLES PING-DEATH:"
#/sbin/iptables -A ping-death -j DROP

firewall-cmd --permanent --direct --add-chain ipv4 filter ping-death
firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 300 -i enp0 -p icmp --icmp-type echo-request -j ping-death
firewall-cmd --permanent --direct --add-rule ipv4 filter ping-death 350 -m limit --limit 1/s --limit-burst 4 -j RETURN
firewall-cmd --permanent --direct --add-rule ipv4 filter ping-death 351 -j LOG --log-prefix "IPTABLES PING-DEATH:"
firewall-cmd --permanent --direct --add-rule ipv4 filter ping-death 352 -j DROP

######port-scan:DROP######
#/sbin/iptables -N port-scan
#/sbin/iptables -A INPUT -i eth0 -p tcp --tcp-flags SYN,ACK,FIN,RST RST -j port-scan
#/sbin/iptables -A port-scan -m limit --limit 1/s --limit-burst 4 -j RETURN
#/sbin/iptables -A port-scan -j LOG --log-prefix "IPTABLES PORT-SCAN:"
#/sbin/iptables -A port-scan -j DROP

firewall-cmd --permanent --direct --add-chain ipv4 filter port-scan
firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 400 -i enp0 -p tcp --tcp-flags SYN,ACK,FIN,RST RST -j port-scan
firewall-cmd --permanent --direct --add-rule ipv4 filter port-scan 450 -m limit --limit 1/s --limit-burst 4 -j RETURN
firewall-cmd --permanent --direct --add-rule ipv4 filter port-scan 451 -j LOG --log-prefix "IPTABLES PORT-SCAN:"
firewall-cmd --permanent --direct --add-rule ipv4 filter port-scan 452 -j DROP

######spoofing:DROP######
#/sbin/iptables -N spoofing
#/sbin/iptables -A INPUT -i eth0 -s 127.0.0.0/8 -j spoofing
#/sbin/iptables -A INPUT -i eth0 -d 127.0.0.0/8 -j spoofing
#/sbin/iptables -A INPUT -i eth0 -s 10.0.0.0/8 -j spoofing
#/sbin/iptables -A INPUT -i eth0 -s 172.16.0.0/12 -j spoofing
#/sbin/iptables -A INPUT -i eth0 -s 192.168.0.0/16 -j spoofing
#/sbin/iptables -A INPUT -i eth0 -s 192.0.2.0/24 -j spoofing
#/sbin/iptables -A INPUT -i eth0 -s 169.254.0.0/16 -j spoofing
#/sbin/iptables -A INPUT -i eth0 -s 224.0.0.0/4 -j spoofing
#/sbin/iptables -A INPUT -i eth0 -s 240.0.0.0/5 -j spoofing
#/sbin/iptables -A INPUT -i eth0 -s 0.0.0.0/8 -j spoofing
#/sbin/iptables -A INPUT -i eth0 -s 255.255.255.255 -j spoofing
#/sbin/iptables -A INPUT -i eth0 -s $MYHOST -j spoofing
#/sbin/iptables -A spoofing -j LOG --log-prefix "IPTABLES SPOOFING:"
#/sbin/iptables -A spoofing -j DROP

firewall-cmd --permanent --direct --add-chain ipv4 filter spoofing
firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 500 -i enp0 -s 127.0.0.0/8 -j spoofing
firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 501 -i enp0 -d 127.0.0.0/8 -j spoofing
firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 502 -i enp0 -s 10.0.0.0/8 -j spoofing
firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 503 -i enp0 -s 172.16.0.0/12 -j spoofing
firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 504 -i enp0 -s 192.168.0.0/16 -j spoofing
firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 505 -i enp0 -s 192.0.2.0/24 -j spoofing
firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 506 -i enp0 -s 169.254.0.0/16 -j spoofing
firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 507 -i enp0 -s 224.0.0.0/4 -j spoofing
firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 508 -i enp0 -s 240.0.0.0/5 -j spoofing
firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 509 -i enp0 -s 0.0.0.0/8 -j spoofing
firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 510 -i enp0 -s 255.255.255.255 -j spoofing
firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 511 -i enp0 -s 333.333.333.210 -j spoofing
firewall-cmd --permanent --direct --add-rule ipv4 filter spoofing 550 -j LOG --log-prefix "IPTABLES SPOOFING:"
firewall-cmd --permanent --direct --add-rule ipv4 filter spoofing 551 -j DROP

######win FORWARDING:DROP######
#/sbin/iptables -N win
#/sbin/iptables -A FORWARD -p tcp -m multiport --sport 135,137,138,139,445 -j win
#/sbin/iptables -A FORWARD -p udp -m multiport --sport 135,137,138,139,445 -j win
#/sbin/iptables -A FORWARD -p tcp -m multiport --dport 135,137,138,139,445 -j win
#/sbin/iptables -A FORWARD -p udp -m multiport --dport 135,137,138,139,445 -j win
#/sbin/iptables -A win -j LOG --log-prefix "USING WIN PORT:"
#/sbin/iptables -A win -j DROP

firewall-cmd --permanent --direct --add-chain ipv4 filter win
firewall-cmd --permanent --direct --add-rule ipv4 filter FORWARD 600 -p tcp -m multiport --sport 135,137,138,139,445 -j win
firewall-cmd --permanent --direct --add-rule ipv4 filter FORWARD 601 -p udp -m multiport --sport 135,137,138,139,445 -j win
firewall-cmd --permanent --direct --add-rule ipv4 filter FORWARD 602 -p tcp -m multiport --dport 135,137,138,139,445 -j win
firewall-cmd --permanent --direct --add-rule ipv4 filter FORWARD 603 -p udp -m multiport --dport 135,137,138,139,445 -j win
firewall-cmd --permanent --direct --add-rule ipv4 filter win 650 -j LOG --log-prefix "USING WIN PORT:"
firewall-cmd --permanent --direct --add-rule ipv4 filter win 651 -j DROP

firewall-cmd --reload

●停止スクリプトstop-my-firewalld
停止は逆から行えばOK

#! /bin/sh

firewall-cmd --permanent --direct --remove-rule ipv4 filter win 651 -j DROP
firewall-cmd --permanent --direct --remove-rule ipv4 filter win 650 -j LOG --log-prefix "USING WIN PORT:"
firewall-cmd --permanent --direct --remove-rule ipv4 filter FORWARD 603 -p udp -m multiport --dport 135,137,138,139,445 -j win
firewall-cmd --permanent --direct --remove-rule ipv4 filter FORWARD 602 -p tcp -m multiport --dport 135,137,138,139,445 -j win
firewall-cmd --permanent --direct --remove-rule ipv4 filter FORWARD 601 -p udp -m multiport --sport 135,137,138,139,445 -j win
firewall-cmd --permanent --direct --remove-rule ipv4 filter FORWARD 600 -p tcp -m multiport --sport 135,137,138,139,445 -j win
firewall-cmd --permanent --direct --remove-chain ipv4 filter win

firewall-cmd --permanent --direct --remove-rule ipv4 filter spoofing 551 -j DROP
firewall-cmd --permanent --direct --remove-rule ipv4 filter spoofing 550 -j LOG --log-prefix "IPTABLES SPOOFING:"
firewall-cmd --permanent --direct --remove-rule ipv4 filter INPUT 511 -i enp0 -s 333.333.333.210 -j spoofing
firewall-cmd --permanent --direct --remove-rule ipv4 filter INPUT 510 -i enp0 -s 255.255.255.255 -j spoofing
firewall-cmd --permanent --direct --remove-rule ipv4 filter INPUT 509 -i enp0 -s 0.0.0.0/8 -j spoofing
firewall-cmd --permanent --direct --remove-rule ipv4 filter INPUT 508 -i enp0 -s 240.0.0.0/5 -j spoofing
firewall-cmd --permanent --direct --remove-rule ipv4 filter INPUT 507 -i enp0 -s 224.0.0.0/4 -j spoofing
firewall-cmd --permanent --direct --remove-rule ipv4 filter INPUT 506 -i enp0 -s 169.254.0.0/16 -j spoofing
firewall-cmd --permanent --direct --remove-rule ipv4 filter INPUT 505 -i enp0 -s 192.0.2.0/24 -j spoofing
firewall-cmd --permanent --direct --remove-rule ipv4 filter INPUT 504 -i enp0 -s 192.168.0.0/16 -j spoofing
firewall-cmd --permanent --direct --remove-rule ipv4 filter INPUT 503 -i enp0 -s 172.16.0.0/12 -j spoofing
firewall-cmd --permanent --direct --remove-rule ipv4 filter INPUT 502 -i enp0 -s 10.0.0.0/8 -j spoofing
firewall-cmd --permanent --direct --remove-rule ipv4 filter INPUT 501 -i enp0 -d 127.0.0.0/8 -j spoofing
firewall-cmd --permanent --direct --remove-rule ipv4 filter INPUT 500 -i enp0 -s 127.0.0.0/8 -j spoofing
firewall-cmd --permanent --direct --remove-chain ipv4 filter spoofing

firewall-cmd --permanent --direct --remove-rule ipv4 filter port-scan 452 -j DROP
firewall-cmd --permanent --direct --remove-rule ipv4 filter port-scan 451 -j LOG --log-prefix "IPTABLES PORT-SCAN:"
firewall-cmd --permanent --direct --remove-rule ipv4 filter port-scan 450 -m limit --limit 1/s --limit-burst 4 -j RETURN
firewall-cmd --permanent --direct --remove-rule ipv4 filter INPUT 400 -i enp0 -p tcp --tcp-flags SYN,ACK,FIN,RST RST -j port-scan
firewall-cmd --permanent --direct --remove-chain ipv4 filter port-scan

firewall-cmd --permanent --direct --remove-rule ipv4 filter ping-death 352 -j DROP
firewall-cmd --permanent --direct --remove-rule ipv4 filter ping-death 351 -j LOG --log-prefix "IPTABLES PING-DEATH:"
firewall-cmd --permanent --direct --remove-rule ipv4 filter ping-death 350 -m limit --limit 1/s --limit-burst 4 -j RETURN
firewall-cmd --permanent --direct --remove-rule ipv4 filter INPUT 300 -i enp0 -p icmp --icmp-type echo-request -j ping-death
firewall-cmd --permanent --direct --remove-chain ipv4 filter ping-death

firewall-cmd --permanent --direct --remove-rule ipv4 filter INPUT 201 -p tcp ! --syn -m state --state NEW -j DROP
firewall-cmd --permanent --direct --remove-rule ipv4 filter INPUT 200 -i enp0 -p tcp ! --syn -m state --state NEW -j LOG --log-prefix "IPTABLES SYN-FLOOD:"

firewall-cmd --permanent --direct --remove-rule ipv4 filter syn-flood 152 -j DROP
firewall-cmd --permanent --direct --remove-rule ipv4 filter syn-flood 151 -j LOG --log-prefix "IPTABLES SYN-FLOOD:"
firewall-cmd --permanent --direct --remove-rule ipv4 filter syn-flood 150 -m limit --limit 1/s --limit-burst 4 -j RETURN
firewall-cmd --permanent --direct --remove-rule ipv4 filter INPUT 100 -i enp0 -p icmp --icmp-type echo-request -j syn-flood
firewall-cmd --permanent --direct --remove-chain ipv4 filter syn-flood

firewall-cmd --reload


TOP(HOME)へ

目 次

特別企画
Raspberry Piで遊ぶ

HOME(全体のシステム構成&目次)

CentOS7
CentOS7のインストール〜ネットワークの設定ほか
CentOS7の新機能(systemdとfirewalld)
ダイレクトルールを使ったfirewallの強化
DNS(BIND)サーバー
Webサーバー
  Webでファイルの受け渡し
  アクセス解析ツールAwstats
  Wordpressでブログ構築
  EC-CUBEショッピングサイト構築
FTPサーバー
FTPS(FTP over SSL/TLS)
Mail(Dovecot&Postfix)サーバー
Sambaサーバー
MariaDB(MySQL)サーバー
DHCPサーバー
SSHサーバー
VNCサーバー
ストリーミングサーバーRed5
ドメインの追加

CentOS5〜6
ネットワーク&ファイアウォール(iptables)
DNS(BIND)サーバー
DHCPサーバー
メールサーバー(基本)
メールサーバー/実際の運用
Webサーバー
  WebDAVによるファイル共有
  Webでファイルのやり取り
  アクセス解析ツールawstats
  namazuで全文検索
  WordPressブログサイト構築
  EC-CUBEショッピングサイト構築
FTPサーバー
ファイルサーバー・Samba
データベースpostgreSQL
  ExcelからpostgreSQLを操作
データベースMySQL
SSHサーバー
VNC
SSL/TLSを利用した暗号化通信
openVPN
ストリーミングサーバー
    C++ RTMP Server
    Helix server Basic
ドメインの追加
Xen・仮想化
特定ディレクトリに容量制限

SELinux
SELinux基本設定
audit2allowを使い問題の解決
新しいタイプとポリシー・モジュールを作成してみる
マクロを利用したteファイルの記述
新しいドメインを導入してみる

coLinux
Fedora11で試す

Cプログラミング目次
X11プログラム
サイエンス・プログラム

計測・プログラム
秋月電子のデーターロガーpico ADC-16
「今すぐ使えるパソコン計測USBマイコン基板」に付属のTRZ1102
センサーの使用例

Glade2/GTK+を使ってみる
テキスト・ビューで簡易エディター
ドローイングエリアで自動描画
放物線運動(pango、cairoも試してみる)
これらを、GTK+のみで書き出す

フォントについて
ネットワーク・プログラミング
postgreSQL接続
CGI
ファイル操作

●その他
印刷機関連開発 刷版絵柄面積率測定
数独をExcelで解く