smallpalace's blog

鯖缶主婦の日々の記録です

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のドキュメント

 セキュリティガイドは日本語版があります!よみましょう

http://docs.redhat.com/

rhel6はどのドキュメントが日本語になってないとまずいとかのアレがあって日本語になってる

サブスクリプションなくてもダウンロードできる

 fedorawikiもあるよ

 ・脆弱性のタイプとRHELで扱う領域

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

何をデリミタにしたらパースできるのかよくわかんない感じらしい

これとるといろいろできるらしい

レポジトリ

yumレポジトリが色々あるけど。。

本番サーバに出所の分からないRPMはダメ、絶対

まずはRHEL公式

 親チャネルだけでなくOptionalやSupplementaryなども探す

無ければEPEL(Fedoraに入ってるけどRHELには入ってない、将来含めることをターゲットとしてるパッケージを置いてるリポジトリ

安全かどうかでいうとEPELよりは自分でビルドしたほうがいい。

ソースコードに悪意のあるコードがあるか確認できるならいいと。

・不要なサービス

全部とめてから必要なのだけ動かす

chkconfig --list|awk '{print "service "$1" off}' > stop_all.sh

chkconfig hoged on

そもそも不要なパッケージはインストールしない

危険なサービス(telnet,ftpなど)は利用しない

何かポート開いてない?

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で。。

VPN

ipsec/xl2tpdで

SELinux

 RHはEnforcingでしかテストしてません

RHELに同困されてるソフトがEnforcingで動かなければバグジラに報告してね

ISVが提供するソフトはしらない

自分達の書いてるソフトがどのリソースをどのように利用(アクセスベクター)するか把握してないISVのソフトって大丈夫なの?という疑問

最近官公庁とか防衛とか金融とかで増えてきた

サポートベンダも富士通とかふえてきた

chcon/restreconする

 デフォルトのファイルのラベルをみてラベルはる

 ポリシーにしたがってラベルをはりなおす

setseboolを活用する

一覧はgetsebool -a

setseboolとかも。

getsebool -a|grep httpd

とかするとでてくる

昔みたいにポリシーファイルをどうこうしなくてもon/offきりかえるだけでいけるらしい

・評価

もちろん外部に頼むのがいい

簡易的には以下の方法も。

Nessus:脆弱性スキャナー(かってにやるとアタックになるので注意

nmap:ポートスキャナー

 OSの種類とかもわかる

・宣伝

GPS:グローバルプロフェッショナルサービス、コードレベルでの調査とか実装の手伝いとか(有償見積もりベース)

GLS:グローバルラーニングサービス、ちゃんとした先生が教えてくれるトレーニング

 セキュリティはREHCE+RHCSS

---------

勉強会は以上、どうもありがとうございました。

 

このはちゃんタイムというGMOさんのはなし

5分でわかるRHEL7とこのはちゃんのはなし

ConoHaというのはVPS

7は新機能がいっぱい、導入テストにはConoHaが最適だそうです

ISOイメージからお好みのOSをインストール可能

スナップショットでシステムの状態を保存可能

VPSではわりとサポートしてない機能。いつでもロールバックできる。

OS入れ替えることも対応可能。

元に戻せるから導入テストなんかにはいいんじゃないかと。

高いかどうか?1GBメモリで940円からだそうです。

本日3000円分のConoHaクーポンが配られているそうでありがとうございます。

以上。

 

きょうは楽しく勉強になりました。

見ていただいたかたはありがとうございました。誤字脱字があったらすみません。またそのうちに。

あと娘さんみてくれたばあちゃんに感謝!