Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
iptables を使って、 2回に1回 ping が落ちる サーバを作る / Use i...
Search
do-su-0805
September 25, 2019
Programming
1.5k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
iptables を使って、 2回に1回 ping が落ちる サーバを作る / Use iptables to create a server that pings once every two times
ref :
https://do-su-dairyquestions.hatenablog.com/entry/2018/12/18/080000
do-su-0805
September 25, 2019
More Decks by do-su-0805
See All by do-su-0805
元SREのCREが伝えたい、Mackerelをもっと活用するための実践Tips集 / Mackerel Drink Up #11 do-su-0805
dosu0805
0
360
とある高専生の進路例/Example of a certain college student
dosu0805
1
1.3k
AWS IAM で MFA 有効でないユーザを awscli + Mackerel で監視する / Monitoring users who are not MFA enabled with AWS IAM with awscli + Mackerel
dosu0805
0
340
Webアプリケーション初心者が ISUCON 4 予選を通じてパフォーマンスの測定改善をした話 / newcomers of web application improvements in performance measurement through ISUCON 4 qualifying
dosu0805
0
1.4k
Other Decks in Programming
See All in Programming
ハーネス設計入門 〜 基礎知識の整理から実務へのステップアップ 〜
kinopeee
22
22k
現場と育てるRailsモデリング 〜Spreadsheetから始めたモデル設計〜
siroemk
1
190
気持ちぃ〜角丸 Squircle
ryu1013
0
290
IBM Bob Dojo #1 仕様駆動開発入門
oniak3ibm
PRO
0
380
dotNET_vulnclicker_intro.pdf
deka_morita
0
140
RAG の “R” を Swift で覗いてみる 〜「意味から探す」検索の仕組み〜
nao_randd
0
160
KiroのSpecで「五目並べ」を作ってみる
satoshi256kbyte
1
370
phperだってパンチカードでコーディングしたい
o0h
PRO
0
310
モデルのリファクタリングが難しいと思ったら、そもそも複雑だったのはビジネス仕様だった ? / is-the-business-domain-the-real-complexity
hatsu38
0
470
R8 の設定見直しでアプリサイズ削減
andpad
0
210
TechTown - Creating Composable Callables in Contemporary C++
rollbear
0
110
Embedded Swiftで作る自作USBデバイス によるiOSデバイスの自動テスト / iOSDC Japan 2026 glassfiber
glassfiber
0
340
Featured
See All Featured
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.3k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
18k
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
700
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
850
How Software Deployment tools have changed in the past 20 years
geshan
2
35k
Being A Developer After 40
akosma
92
590k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
31k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
630
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
330
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.9k
What does AI have to do with Human Rights?
axbom
PRO
1
2.4k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
350
Transcript
で 回に 回 が落ちる サーバを作る 株式会社はてな サービスシステム開発本部 システムプラットフォーム部 SRE do-su-0805
今日話すこと • ヘッダ ヘッダと について話をします • 別例などは以下で紹介 ◦ https://do-su-dairyquestions.hatenablog.com/entry/2018/12/18/080000
アジェンダ • について • が届かない範囲 • オプションの紹介 • 実例 パケットが
回に 回落ちるルール • 実演
について 簡単に言うと、こんな感じのことができる • パケットのフィルタリング/ロギング ◦ tcp / port 80 あての通信は
192.168.0.0/16 からのみ ◦ udp / port 53 あての通信をログに残す • NAT
について iptablesは、Linuxに実装されたパケットフィルタリングおよびネット ワークアドレス変換 (NAT) 機能であるNetfilter(複数のNetfilterモ ジュールとして実装されている)の設定を操作するコマンドのこと。 Netfilterは、いわゆるファイアウォールやルータとしての役割を果 たす。 https://ja.wikipedia.org/wiki/Iptables より
で使えるルール対象 • proto ◦ tcp / udp / icmp •
src / dist IP • port ◦ 80 (http) / 22 (ssh) • etc… IP ヘッダの情報 (+ tcp / ttl などの拡張) が使える
のルール指定で届かない範囲 • レイヤーのパケットヘッダ情報(一部除く) ◦ ヘッダで言うならシーケンス番号や確認応答番号 ◦ ヘッダで言うならコードやエコー要求・応答時のシー ケンスナンバー ◦ ヘッダで言うなら
セグメント長 ◦
オプションの紹介 • 自分でルールを書いて、パケット解析を行いルール適用 ◦ iptables -m u32 --u32 "6&0xFF=0x1 &&
0>>22&0x3C@0>>24=0x08 && 0>>22&0x3C@6>>16&0x01=0x01" -A INPUT -j DROP` ▪ ”6& … =0x01” までのルールに該当する INPUT パケットを DROP • ICMP echo 要求で seq が 奇数の時だけ DROP する ▪ $ ping 192.168.1.7 PING 192.168.1.7 (192.168.1.7) 56(84) bytes of data. 64 bytes from 192.168.1.7: icmp_seq=2 ttl=64 time=0.329 ms 64 bytes from 192.168.1.7: icmp_seq=4 ttl=64 time=0.325 ms 64 bytes from 192.168.1.7: icmp_seq=6 ttl=64 time=0.311 ms 64 bytes from 192.168.1.7: icmp_seq=8 ttl=64 time=0.320 ms
実例 パケットが 回に 回落ちるルール • iptables -m u32 --u32 "6&0xFF=0x1
&& 0>>22&0x3C@0>>24=0x08 && 0>>22&0x3C@6>>16&0x01=0x01" -A INPUT -j DROP を読み解きます
実例 パケットが 回に 回落ちるルール • iptables -m u32 --u32 "6&0xFF=0x1
&& まで ◦ iptables -m u32 --u32 : u32 拡張を呼び出す ◦ 6 : IPヘッダ先頭から 7 ~ 10byte までの 4 byte を呼び出す ▪ この 4 byte 列 = 1 オクテット ▪ "0 なら 1byte 目 ~ 4 byte 目までの 1 オクテットが呼び出される ◦ &0xFF=0x1 : 呼び出した 1オクテットに対して、マスクをかけて比較 ▪ つまり最後の 1byte のみ = 10 byte 目だけにします。ここは プロトコル番号 ▪ 抜き出した結果が 0x1 (ICMP) であれば真となる比較式 ◦ && : 左辺が真であれば継続してルール解釈
実例 パケットが 回に 回落ちるルール ネットワークエンジニアとして 「TCP/IP - IPとは」https://www.infraexpert.com/study/tcpip1.html
実例 パケットが 回に 回落ちるルール • 6 : IPヘッダ先頭から 7 ~
10byte までの 4 byte を呼び出す ◦ 「フラグ」から「プロトコル」までが取得される 資料中段図 : ネットワークエンジニアとして 「TCP/IP - IPとは」https://www.infraexpert.com/study/tcpip1.html より
実例 パケットが 回に 回落ちるルール • &0xFF=0x1 : 呼び出した 1オクテットに対して、
マスクをかけて比較 ◦ 最後の 1byte のみ = 10 byte 目 = プロトコル番号 ◦ 抜き出した結果が 0x1 (ICMP) であれば真となる比較式 ▪ ここが 0d6 だと TCP. 0d41 だと UDP だとわかる。
実例 パケットが 回に 回落ちるルール • 0>>22&0x3C@0>>24=0x08 &&まで ◦ 0>>22&0x3C :
1 ~ 4byte を呼び出し、22bit シフトして AND ▪ バージョン/ヘッダ長/サービス種別の先頭 2bit が取得できる ▪ その結果に 0x3C を AND することで、「ヘッダ長の 4 倍」が手に入る • 「32bit 列がいくつ分か」が入っているので、 4 倍すると byte になる ◦ @0>>24=0x08 : 上記結果を 0 とし 4byte 取得しシフト & 比較 ▪ ヘッダ長@ すると IP ヘッダを抜け出し、 ICMP ヘッダ先頭から 4byte 取得 ▪ >>24 し、先頭 1byte だけ(ICMPヘッダのtype) にし、0x08(エコー要求)か比較
実例 パケットが 回に 回落ちるルール • 0>>22&0x3C :1 ~ 4byte を呼び出し
22bit シフト して AND 資料中段図 : ネットワークエンジニアとして 「TCP/IP - IPとは」https://www.infraexpert.com/study/tcpip1.html より
実例 パケットが 回に 回落ちるルール • 0>>22 すると • &0x3C すると、ヘッダ長
* 4 された値 (5*4 = 20)
実例 パケットが 回に 回落ちるルール • @0>>24=0x08 : 20 byte 目を
0 とし 4byte 取得 しシフト & 比較 ◦ IP ヘッダ長を抜けた = ICMP ヘッダの先頭から 4byte ◦ ◦ ◦ 24 bit シフトすると
実例 パケットが 回に 回落ちるルール • 0>>22&0x3C@6>>16&0x01=0x01まで ◦ 0>>22&0x3C までは先ほどと同様のため省略 •
@6>>16&0x01=0x01 ◦ @6 : ICMP ヘッダの 7byte ~ 10byte 目を取得 ◦ >>16 :16bit シフトしシーケンス番号を取得。最後に奇偶判定
実例 パケットが 回に 回落ちるルール • 今までの説明をまとめると、こんな感じ ◦ 6&0xFF=0x1 && :
ICMP パケットかつ ◦ 0>>22&0x3C@0>>24=0x08 && : タイプがエコー要求かつ ◦ 0>>22&0x3C@6>>16&0x01=0x01 : シーケンス番号が奇数なら • 最後に -A INPUT -j DROP ◦ 上記のようなパケットをサーバが「受けたら」、「DROP する」
まとめ • の 拡張を紹介した • 複雑に見えるルールを一つ一つ追ってみた ◦ 6&0xFF=0x1 && :
ICMP パケットかつ ◦ 0>>22&0x3C@0>>24=0x08 && : タイプがエコー要求かつ ◦ 0>>22&0x3C@6>>16&0x01=0x01 : シーケンス番号が奇数なら ◦ -A INPUT -j DROP : そんなパケットをサーバが受けたら廃棄する