ljstudy_20140319_firewalldの回
こんにちは。smallpalaceです。勉強会の備忘録になります。
ハッシュタグは #ljstudy。
呟きまとめ:http://togetter.com/li/644324
イベントページ:http://connpass.com/event/5259/
他のブログ:http://kometchtech.blog45.fc2.com/blog-entry-1405.html
最初は中井さんのiptablesとfirewalldのおはなしです。
----------
iptablesの機能
http://www.slideshare.net/enakai/iptables-study-v10
iptablesの機能は大きくわけると「パケットフィルタリング」と「NAT」にわかれます
という基本的なところから
NATは正確に半、DNAT、SNAT、マスカレード(SNATの特別版)の3種がある
iptablesの設定方法
service iptables startすると/etc/sysconfig/iptablesをよんでアクティブ化
iptablesを直接たたいてservice iptables saveで設定保存
の2通り
iptablesにおける処理の流れ
そとからうけるパケット、そとにでるパケット、転送の3種類がある
送信パケット制限したければOUTPUTチェーンのfilterテーブル、
受信パケット制限したければINPUTチェーンのfilterテーブルに設定する
NATはDNAT処理はPREROUTINGのnatテーブル、
SNAT処理はPOSTROUTINGのnatテーブルに設定する
何からの条件でフィルタリングして-jオプションでターゲットを指定
デフォルトターゲットは-Pで定義
テーブルを明示するときは-t、省略した場合はfilterテーブルが選ばれる
DROPとREJECTの違い
DROPは捨てるだけ、REJECTはICMPunreachableを返す
REJECTはサーバが存在することが判明してしまう
NATの設定例
SNATは1:1、マスカレードは1:n
DNATは1:1しかできない(LAN内のサーバに転送するとか)
実際には1:1というかポート番号を指定することも可能
ユーザがユーザ定義チェーンを追加することもできる
サブルーティン的なつかいかたをするものらしい
評価の途中でマッチしたらユーザ定義チェーンにはまわらないらしい
コネクショントラッキング
ちょっとアドバンスドな話
cat /proc/net/nf_conntrack
コネクションのストリームが表示される
watchでみてみる
5番目の数値がタイムアウト値、とぎれるとカウントダウンしていき0になるとストリームの表示が消える
udpはログインしたときの名前解決のパケットとかだったりする
tcpはタイムアウト値が長い。exitするとtcp/ipのステートがTIMEWAITとかにかわる
パケットステータスによるフィルタリング
--stateオプションというのがあるパケットのステートがREATEDかESTABLISHEDならうけいれるみたいな
それでフィルタリングできる。既存のストリームに関するものはそのまま受け入れるというような。
このサーバから外にセッションを張りにいったときのぱけっとを評価するという効果がある
返答パケットはINPUTチェーンにくるが既存のストリームとして受け入れられる
RELATEDというステータスは、ユーザがコントロールすることもできる
追加のヘルパーモジュールでたとえば「nf_conntrack_ftp」モジュールを使用すると
「RELATED」の条件でデータセッションのパケットを許可することが可能になる
ftpのコントロールセッションに関係するデータセッション(あて先ポートがランダム)として受信が許可される
iptablesの細かいことが知りたいかたは「プロのためのLinux~~~」を買ってね
------
firewalldのはなし
http://www.slideshare.net/enakai/firewalld-study-v10
RHEL7のBetaはリクエスト出すと使える
Fedoraは19くらいからfirewalldになってるらしい
firewalldとは何者か
Linux上のfirewallの機能を提供するもの。
バックエンドの仕組みはiptablesを実行している。
ラッパーコマンド。考え方としては、マルチなそれぞれのNICに対してそれぞれ別のfirewallを提供してる
みたいなの
zoneというのがあってデフォルトでいくつかのzoneが用意されている
zoneはpublicとかinternalとか役割定義する感じのものっぽい、それをNICに紐付けていくかんじ
dropとblockとtrustedは設定変更できない
独自のオレオレzoneをつくれる、なにをするかというと、、
設定ファイルは/usr/lib/firewalldの下にある
zoneは/usr/lib/firewalld/zonesのしたに設定ファイルつくってfirewalld-cmdでリロードすると認識される
xml形式
/etc/firewalldのほうに管理者が用意した設定ファイルを置くものらしい
yum install firewalldでいれることができる
systemctl enable warewalld.service
systemctl start firewalld.service
とかで起動
iptablesサービスとは併用できないのでとめておく必要がある
firewall-cmd--list-all-zonesとかでzoneと属するIFなどがみえるけどポート番号はみえない
/usr/lib/firewalld/servicesでcat ssh.xmlとかでみえる
デフォルトのxmlで足らない人は、/etc/firewalld/services/xxx.xmlとかつくる
/usr/lib/firewalld/icmptypes/echo-request.xmlとか開くと
typeとかかいてなくてただのですくりぷションしかかいてないけど
ファイル名自体がicmpのtypeになってるらしい裏でiptablesつかってて
iptables -p typeなんとかとかたたくとユーザフレンドリなタイプ名がでてくるらしい
icmpはデフォルトは有効で禁止したいのはicmp-blocksに追加してくださいということらしい
zoneがいくつかあり明示しないとデフォルトゾーンが適用される
firewall-cmdで--get-default-zoneとかsetとかできる
一回つっこむと他のに入れようとするとエラーになる
なので一回removeするかchangeする必要がある
firewall-cmdはアクティブなもののみ変更する。
--permanentオプションをつけると設定ファイルに書いてくれる。
しかしアクティブなのは変更されないので2回実行する必要がある。
送信元IPのサブネットに対するzoneの適用、
まず最初にこれが評価されマッチしなければ各IFのzoneが評価される
ゾーンの設定変更
19まいめ
ポートは許可を設定、ICMPは拒否を設定するという感じ
NATの設定もいちおうできる
普通のDNA(P)Tもできる
そのほかにRichLanguageというのもあり、これをつかうとほぼ昔のiptablesのような設定も可能
man 5 firewalldとかみてね
なぜこんなものができたかの経緯
最近アプリケーションがダイナミックにiptablesの設定かえるという状況がふえてきた
openstackとかlibvirtがバリバリルールをかえていく
将来いろんなアプリが勝手にルールを変えることでコンフリクトが起きてデバッグが困難になる
という可能性を考慮してfirewaldでしかルールを変えられなくして
シンプルなのでコンフリクトがおきにくくなるという
D-BUSのインタフェースで将来はアプリケーションが設定できるようになる
firewalldの裏側のiptablesの紹介
ネイティブには3つだけでないいろんなテーブルとチェーンがいっぱいある
iptables-save というコマンドで全テーブルの全チェーンの設定をdumpしてくれる
がんばってみてみたところ
ユーザ定義のサブルーティンがいっぱいある
PRE⇒送信元zoneのチェーン⇒PREゾーン⇒ログと拒否と許可のサブチェーン⇒もどってきて次のチェーン
dropゾーンは通信できないかんじだけど
blockゾーンは外からきたのはダメだけど返信は許可される
trustedは全部許可なかんじ
参考、
RHEL7のセキュリティガイドも結構くわしいらしい
「プロのためのLinuxシステム・ネットワーク管理技術」
QA:
Q。sshのポート番号のかえかた?
A.cp -p /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/
でこの中身の番号をかえるといけるはず
Q.設定のしかた、FIREWALLDのメリットとしてNICの瞬断がおこるかどうか
firewalldサービスを再起動するとおちるかどうか
A.サービス再起動はおちる。--reloadつかうと落ちないと思われる。
おそらく設定の再ロードという動きになる
ダイナミックに設定替えるとき--timeout=秒数を指定すると一定時間だけ設定がかわるのでテストにいい
Q.リッチランゲージじゃないとratelimitできない?
A.リッチランゲージでバリバリやりたい場合はfirewalldとめてiptablesつかうほうが今の段階ではいいかも
--------
藤田さんのサーバセキュリティの話
http://www.slideshare.net/RyoFujita1/20140319-linux-joshisecuritypublic
あんまりディープな話ではなく、すくなくとも最低限のところを抑えるそうです。
SELINUXの話をしだすと3日くらいかかるけど
SETENFORCE1とかかかれたTシャツが買えるらしい。
・RedHatのドキュメント
セキュリティガイドは日本語版があります!よみましょう
rhel6はどのドキュメントが日本語になってないとまずいとかのアレがあって日本語になってる
サブスクリプションなくてもダウンロードできる
JVNiPedisaが使用する脆弱性タイプの表の紹介
このなかからRHELに関係するところについて話そうかなというかんじ
・エラータ
そもそもエラータってなに?
ソースコードのパッチなのかバイナリパッチなのか
RHはいずれもパッチは有料でも提供していない。
ソースコードに対するパッチを誰かが出す
SPECファイルを用意してrpmbuildがコンパイルしてくれて、バイナリができ
パッケージになる。依存関係のある他のパッケージもリビルドされたり。
RHはエラータというドキュメントを出す。そのエラータに依存する形でRPMパッケージを出してる。(パッチではなく)
・エラータの種類
RHSA:RedHatSecurityAdvisory こんかいせつめいするやつ
RHBA:RedHatBugAsvisory ばぐ、不具合の修正
RHEA:RedHatEnhancementAdvizory 機能強化
シビリティが高いやつは1~3日で修正される
大きな地震があると地球の自転がちょっと遅くなるらしい。そんなときTZDataがエンハンスメントして出てくる。
・重大度
Severityが4段階ある
Critical、Important、Moderate、Low
Criticalはfirefoxとかのがでる。
世の中に公開されると同時くらいには出せるようにがんばってるらしい
yum-plugin-securityを入れてあげると以下のコマンドでcveの番号で表示できる?
yum list-sec cves
サーバ運用してるときにバージョンあげたくない。
そんなときはセキュリティアップデートだけ気にすればいい
セキュリティアドバイザりだけアップデートすることができる
詳しくはman 8 yum-securityをするといい
rpm -q --changelog kernelとかすると
チェンジログがでてくる
右側にでてくる数字はバグじらのid。
http://bugzilla.redhat.com/xxxxxx
鍵つきなので認証が要る。テクニカルアカウントマネージャの契約が必要らしい。
・蛇足、
エラータの情報をxmlrpcで得られる.
アカウント持ってればとれる
https://rhn.redhat.com/rpc/api
何をデリミタにしたらパースできるのかよくわかんない感じらしい
これとるといろいろできるらしい
本番サーバに出所の分からないRPMはダメ、絶対
まずはRHEL公式
親チャネルだけでなくOptionalやSupplementaryなども探す
無ければEPEL(Fedoraに入ってるけどRHELには入ってない、将来含めることをターゲットとしてるパッケージを置いてるリポジトリ)
安全かどうかでいうとEPELよりは自分でビルドしたほうがいい。
ソースコードに悪意のあるコードがあるか確認できるならいいと。
・不要なサービス
全部とめてから必要なのだけ動かす
chkconfig --list|awk '{print "service "$1" off}' > stop_all.sh
chkconfig hoged on
そもそも不要なパッケージはインストールしない
何かポート開いてない?
netstat -tanp|grep LISTEN で確認しましょう
要らないの入れるとエラータの管理がめんどいと思うよ
WEB系のやつ入れて800個くらいのパッケージ。全部いれると5000個くらい。
ミニマムで入れてyumできる状態にするとか
・iptables/firewalld
CNはDropとか
レスポンスヘッダに天安門とか入れておくとこなくなるらしいライフハック。。
次はnftablesの時代がくるらしい日系Linuxの2月号にちょっとかいたので興味あれば
・TCPWrapper
libwrap.soにリンクされているバイナリで利用可能
lddで確認する
ldd /usr/sbin//sshd|grep libwrap
/etc/hosts.deny,allowで拒否・許可
・xinetd
スーパーサービス
systemdが代替可能
/etc/xinet.d/以下で個別サービスの設定
ConnectionPerSecondで制御可能
・認証
パスワードとPAMのはなし
OpenCLを有効にしたJohntheRipperためしたところ、sha256くらいでもGPGPUつかうとサクッと。。忘れても大丈夫。
ちゃんとmkpasswdとかつかいましょう。expectパッケージで提供。
簡易のチェッカー:cracklib-checkというコマンド、cracklibパッケージで提供。
echo hoge|cracklib-checkとかすると短いとか辞書にのってるとか言われます。
辞書にのってるやつはあっという間に解析されちゃうらしい。
プレステ4が広大なメモリ空間がつかえるGPGPUとかなんとか。
PAMの話は時間が無いのでできない。高度な設定が可能だけど難しいので
よくしらべるかトレーニングうけてからにしてね。
・暗号化
ディスクの暗号化はLUKS:LinuxUnifiedKeySetup-on-disk-formatとか
Anacondaでインストール時に暗号化。後からもいける。
・通信の暗号化
telnet、ダメ、絶対
ssh/scp/sftpで。。
ipsec/xl2tpdで
RHはEnforcingでしかテストしてません
RHELに同困されてるソフトがEnforcingで動かなければバグジラに報告してね
ISVが提供するソフトはしらない
自分達の書いてるソフトがどのリソースをどのように利用(アクセスベクター)するか把握してないISVのソフトって大丈夫なの?という疑問
最近官公庁とか防衛とか金融とかで増えてきた
サポートベンダも富士通とかふえてきた
chcon/restreconする
デフォルトのファイルのラベルをみてラベルはる
ポリシーにしたがってラベルをはりなおす
setseboolを活用する
一覧はgetsebool -a
setseboolとかも。
とかするとでてくる
昔みたいにポリシーファイルをどうこうしなくてもon/offきりかえるだけでいけるらしい
・評価
もちろん外部に頼むのがいい
簡易的には以下の方法も。
Nessus:脆弱性スキャナー(かってにやるとアタックになるので注意
nmap:ポートスキャナー
OSの種類とかもわかる
・宣伝
GPS:グローバルプロフェッショナルサービス、コードレベルでの調査とか実装の手伝いとか(有償見積もりベース)
GLS:グローバルラーニングサービス、ちゃんとした先生が教えてくれるトレーニング
セキュリティはREHCE+RHCSS
---------
勉強会は以上、どうもありがとうございました。
このはちゃんタイムというGMOさんのはなし
5分でわかるRHEL7とこのはちゃんのはなし
ConoHaというのはVPS
7は新機能がいっぱい、導入テストにはConoHaが最適だそうです
ISOイメージからお好みのOSをインストール可能
スナップショットでシステムの状態を保存可能
VPSではわりとサポートしてない機能。いつでもロールバックできる。
OS入れ替えることも対応可能。
元に戻せるから導入テストなんかにはいいんじゃないかと。
高いかどうか?1GBメモリで940円からだそうです。
本日3000円分のConoHaクーポンが配られているそうでありがとうございます。
以上。
きょうは楽しく勉強になりました。
見ていただいたかたはありがとうございました。誤字脱字があったらすみません。またそのうちに。
あと娘さんみてくれたばあちゃんに感謝!