Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
iptables を使って、 2回に1回 ping が落ちる サーバを作る / Use i...
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
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
350
とある高専生の進路例/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
AIは賢い。でも実行環境は? CLIおじさんがAI時代に伝えたいこと ~ CLIおじさんがAI時代に伝えたいこと ~
curekoshimizu
1
160
Pythonの実行はどこまで賢くなったのか? CPythonとPyPyから見る最適化のしくみ
curekoshimizu
4
2.8k
Gmail/Google DriveをトリガーにAIエージェントを動かそう! / Run AI agents with Gmail/Google Drive as triggers!
har1101
3
470
Seeing Through Serverless: Observability for AWS Lambda with ADOT and CloudWatch Application Signals
seike460
PRO
1
120
週末にAI-DLCを本気で回したら$1,600溶けた
hbashimizu
0
130
AWS Step Functions 大規模並列の壁を越える / jaws-sonic-2026-niigata-step-functions
kasacchiful
PRO
0
390
20260828_品質と開発生産性を両立させる、AI時代のE2Eテストの考え方
magicpod
0
160
MIZARU@SPAJAM2026 第二回予選
1901drama
0
110
RSSとCodexを使ってX投稿自動化してみた
ochtum
0
110
DynamoDBの基礎を振り返りながらベクトル検索機能を理解する
musan
3
270
FastAPI の並行処理モデルを完全に理解する
hoto17296
9
3.8k
異なる設計思想のフレームワークを経験して得た学び
amekuhideki
2
1.5k
Featured
See All Featured
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
310
Heart Work Chapter 1 - Part 1
lfama
PRO
8
36k
Skip the Path - Find Your Career Trail
mkilby
1
220
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
190
Bootstrapping a Software Product
garrettdimon
PRO
306
120k
Optimising Largest Contentful Paint
csswizardry
37
3.9k
VelocityConf: Rendering Performance Case Studies
addyosmani
331
25k
Docker and Python
trallard
47
4.2k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
63
45k
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.5k
Testing 201, or: Great Expectations
jmmastey
46
8.3k
HDC tutorial
michielstock
2
850
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 : そんなパケットをサーバが受けたら廃棄する