SlideShare a Scribd company logo
2013/5/13 Kazunori INABA 1
2013.5.10
Garage labsサーバー部8U
(改)Linuxサーバのセキュリティ対策
~僕がいつもやっていること part1
稲葉 一紀@札幌
2013/5/13 Kazunori INABA 2
自己紹介
稲葉 一紀
 サーバインフラ専門のフリーランスエンジニア
 屋号決まっていません。
    おもにアプリ開発企業・エンジニア向けに
    セキュリティ・可用性・性能・拡張性を考慮した
    ちょっと気の利いた
    サーバインフラ構成設計・設定・支援や既存システムの性能改善調査・支援
     を行います。
2013/5/13 Kazunori INABA 3
セキュリティ対策 - 基本方針
僕がサーバの設定を行うときにいつもやっていることを発表しま
す。
・できるだけPaaS, SaaS的な外部サービスや共用レンタル
 サーバを利用して、自分で設定、運用するサービスを減らす。
  - 特にDNSとメールは自前でやらない!
  - SSHとHTTP(S)のみ外部公開するのが理想。
  - Webアプリケーションサーバ1台の運用保守を専門業者に
   任せるといくらかかる?
・どんな対策をしても、やられるときはやられる!
  それでも、できるだけ少ない手間で基本的な設定を行い、
  不正アクセスされる確率を減らす。
2013/5/13 Kazunori INABA 4
セキュリティ対策 - 項目
・SSH
・Firewall
・iptables
・TCP Wrapper
・不要なサービスの停止
・DNS bind
・Apache
・ファイル転送 FTP, SCP/SFTP, WebDAV
・メール Postfix
・アンチウイルス ClamAV
・改ざん検知 Tripwire
・SEO対策
・その他やってないこと SELinux, IPS, WAF
・技術以外の対策
以降、コマンドやConfigは、CentOSにおける例です。
2013/5/13 Kazunori INABA 5
SSH(1)
・最近構築したさくらのVPSサーバで、開通後3週間で3,300回
 の不正ログインチャレンジがあった。
  - サイトの有名無名に関わらず攻撃は無差別にやってくる。
   →→→→サーバを受け取ったらまずはサーバを受け取ったらまずはサーバを受け取ったらまずはサーバを受け取ったらまずはSSHの設定変更を!の設定変更を!の設定変更を!の設定変更を!
  - /var/log/secure で自分以外の 'Accepted password for ~' の
   ログイン成功記録がないことを確認する。
    →もしあれば何かを仕込まれているかもしれないので、初期化した
      ほうがよい。
・できれば、アクセス元IPアドレスを限定+公開鍵認証。
  - でも、固定IPアドレスを持っていない場合があるし、複数人・
   複数組織のユーザが関わる場合は鍵のやりとりが手間。。。
2013/5/13 Kazunori INABA 6
SSH(2)
・ポート番号を22から10022などに変更。
  これだけで不正ログインチャレンジがほぼなくなる。
  Port 10022
・rootユーザのログインを禁止。
  PermitRootLogin no
・MySQLユーザなど、一般的なサービス用アカウントのログイン
 を禁止。
  DenyUsers mysql
  ※これらのユーザのログインシェルを /bin/bash ではなく、
   /sbin/nologin とすべきかも。やったことないけど。
2013/5/13 Kazunori INABA 7
Firewall(1)
・Firewall機器やルータ機器、クラウドサービスのFirewall機能
 など、サーバの上位レイヤで制御する。
  →不正アクセスによるサーバ負荷を軽減できる。
・プライベートLANで他契約者のサーバと同じサブネットに属する
 場合がある。AWSなど。
  →Firewall機能(AWSのSecurity Groups)やiptablesを駆使して、
    他契約者のサーバからのアクセスは防ぐ。
2013/5/13 Kazunori INABA 8
Firewall(2)
・デフォルトはすべて禁止。必要なポートのみ許可する。
 (iptablesも同様)
・サーバへの内向きだけではなく、可能であれば外向きも制御
 する。(iptablesも同様)
  → 外向きは
    HTTP(TCP/80), HTTPS(TCP/443), DNS(UDP/53, TCP/53),
    SSH(TCP/22), FTP(TCP/20,21), SMTP(TCP/25),
    NTP(UDP/123), ICMP 程度で十分のはず。
・SSH, FTPは可能であればアクセス元IPアドレスを限定する。
 (iptablesも同様)
2013/5/13 Kazunori INABA 9
iptables(1)
・サーバより上位のFirewall機能と併用する。
  →設定ミス、漏れや不具合への対策のため、複数箇所で制限を
    行うことが望ましい。
・アクセス数がさほど多くなければ、ポート制御以外の、
 Ping of Death対策やSYN Flood対策、ログ書き出し設定も
 行うとよい。
  →アクセス数が多い場合はこれらの処理のためCPU負荷が
    増大してパフォーマンスが落ちることに注意。
・設定変更でミスると、今接続している端末も切れてしまう可能性
 があることに注意。
  →慎重を期すならば、atコマンドで10分後にiptablesをクリアする
    設定を入れてから設定変更する、などの工夫を。
2013/5/13 Kazunori INABA 10
iptables(2)
・FTPサーバを立てるなら、iptablesのFTPモジュールを読み
 込むよう設定する。
   → パッシブ用のTCP/1024-65535 のアクセス許可ルールが
     不要となる。(はずだけど、vsftpdでパッシブ用ポートの範囲を
     指定したら、この範囲を許可しないと通信できなかった。
     調査中。)
– /etc/sysconfig/iptables-config
IPTABLES_MODULES="ip_conntrack_ftp ip_nat_ftp"
--
・/etc/sysconfig/iptables ファイルを直接編集するよりは、シェル
 スクリプトを作成したほうが管理しやすい。(と思う)
2013/5/13 Kazunori INABA 11
iptables(3)
・最近、さくらのVPSサーバに適用したiptables設定スクリプト例
--
#!/bin/sh
# set_iptables.sh
# last updated on: 2013/05/10 ina128@wine.plala.or.jp
#
### 初期化
iptables -F
iptables -X
### デフォルトルール、すべて破棄
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
### IP偽装パケット(インタフェースへのプライベートIPアドレスからのアクセス)をすべて破棄
iptables -A INPUT -i eth0 -s 127.0.0.1 -j DROP
iptables -A INPUT -i eth0 -s 10.0.0.0/8 -j DROP
iptables -A INPUT -i eth0 -s 172.16.0.0/12 -j DROP
iptables -A INPUT -i eth0 -s 192.168.0.0/16 -j DROP
### ループバックインタフェースはすべて許可
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
### セッション確立後のアクセスは許可
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
2013/5/13 Kazunori INABA 12
iptables(4)
(iptables設定スクリプト続き)
### 内向きアクセスの許可
## TCP - HTTP, HTTPS, SSH(10022に変更), FTPパッシブ(10021, 10030-10049)を許可
iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT # HTTP
iptables -A INPUT -m state --state NEW -p tcp --dport 443 -j ACCEPT # HTTPS
iptables -A INPUT -m state --state NEW -p tcp --dport 10022 -j ACCEPT # SSH
iptables -A INPUT -m state --state NEW -p tcp --dport 10021 -j ACCEPT # FTP Listen
iptables -A INPUT -m state --state NEW -p tcp --dport 10030:10049 -j ACCEPT # FTP
## UDP - なし
## ICMP - pingやpingリクエストの戻りなど一部のみ許可
iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
iptables -A INPUT -p icmp --icmp-type destination-unreachable -j ACCEPT
iptables -A INPUT -p icmp --icmp-type time-exceeded -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
### 外向きアクセスの許可
## TCP - HTTP, HTTPS, DNS, SSH, FTP, SMTP, DNSを許可
iptables -A OUTPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT # HTTP
iptables -A OUTPUT -m state --state NEW -p tcp --dport 443 -j ACCEPT # HTTPS
iptables -A OUTPUT -m state --state NEW -p tcp --dport 53 -j ACCEPT # DNS
iptables -A OUTPUT -m state --state NEW -p tcp --dport 22 -j ACCEPT # SSH
iptables -A OUTPUT -m state --state NEW -p tcp --dport 20 -j ACCEPT # FTP Data
iptables -A OUTPUT -m state --state NEW -p tcp --dport 21 -j ACCEPT # FTP Control
iptables -A OUTPUT -m state --state NEW -p tcp --dport 25 -j ACCEPT # SMTP
2013/5/13 Kazunori INABA 13
iptables(5)
(iptables設定スクリプト続き)
## UDP - DNS, NTPを許可
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT # DNS
iptables -A OUTPUT -p udp --dport 123 -j ACCEPT # DNS
## ICMP - すべてを許可
iptables -A OUTPUT -p icmp -j ACCEPT
# EOF
--
2013/5/13 Kazunori INABA 14
TCP Wrapper
・/etc/hosts.deny, /etc/hosts.allow
・SSH, FTP, SNMPなどのアクセス元IPアドレスが決まっている
 のであれば、設定するとよい。
  ALL: 127.0.0.1
  sshd: xxx.xxx.xxx.xxx
  vsftpd: xxx.xxx.xxx.xxx
2013/5/13 Kazunori INABA 15
不要なサービスの停止
・chkconfigコマンドで自動起動しているサービスを確認して
 不要なサービスを停止する。
  # chkconfig –list | grep ':on'
  avahi-daemon, bluetooth, ip6tables, iscsi, NFS(netfs, nfslock,
  rpsbind, rpcgssd, rpcidmapd rpcsvcgssd)などはデフォルトで
  起動していることが多いがたいていは不要。
  (参考)http://www.obenri.com/_minset_cent6/daemon_cent6.html
  # /etc/init.d/<service> stop
  # chkconfig <service> off
2013/5/13 Kazunori INABA 16
DNS bind(1)
・DNSサーバの設定、運用は大変!
  - 頻繁に発見されるbindの脆弱性、DNSサーバを利用した攻撃
   の多さ、キャッシュにより設定ミスの時限爆弾化、仕様や設定の
   複雑さ etc.
  - DNSサーバのダウンや設定ミスはWebサーバダウンと同じこと。
・外部サービスの利用がおすすめ。
  - キャッシュサーバは、サーバサービスベンダーが用意する
   DNSサーバを利用。
  - 権威(コンテンツ)サーバは、ドメイン管理業者が用意する
   DNSサーバやAWS Route 53を利用。
  
2013/5/13 Kazunori INABA 17
DNS bind(2)
どうしてもDNSサーバの運用が必要なとき、、、
・キャッシュサーバとしてのアクセス元IPアドレスを限定して、
 オープンリゾルバーにならないようにする。
 - オープンリゾルバーを利用したDNSリフレクター攻撃
(参考)
http://internet.watch.impress.co.jp/docs/interview/20130426_597628.htm
l
  送信元IPアドレスを攻撃対象のIPアドレスに詐称した問い合わせを
  オープンリゾルバーに送信
   →オープンリゾルバーからの応答が攻撃対象に返る。
  ※実生活でいうと、「なりすまし出前注文」のようなもの。
2013/5/13 Kazunori INABA 18
DNS bind(3)
・オープンリゾルバーにならないための設定例。
(参考)
http://jprs.jp/tech/notice/2013-04-18-fixing-bind-openresolver.html
– named.conf
...
acl "TRUSTSRC" { // TRUSTSRCというacl作成の設定を追加します
192.168.0.0/24;
localhost;
};
options {
...
//query-source port 53; // 外部への問い合わせ元のポート番号をランダム化します
recursion yes; // リゾルバーとして動作します
allow-query { TRUSTSRC; }; // TRUSTSRCからのみクエリを許可します
allow-recursion { TRUSTSRC; }; // TRUSTSRCからのみリゾルバーとして動作します
allow-query-cache { TRUSTSRC; }; // TRUSTSRCからのみキャッシュの内容を返します
...
};
  
2013/5/13 Kazunori INABA 19
つづく
Part2以降に続く...
・Apache
・ファイル転送 FTP, SCP/SFTP, WebDAV
・メール Postfix
・アンチウイルス ClamAV
・改ざん検知 Tripwire
・SEO対策
・その他やってないこと SELinux, IPS, WAF
・技術以外の対策

More Related Content

PDF
Linuxサーバのセキュリティ対策 part2 - Apache編
PDF
Linuxサーバのセキュリティ対策 part3 - ファイル転送編
PDF
サーバー設定のお話
PDF
Linuxサーバーのセキュリティ対策 part4
PDF
Docker ホスティングサービス 'Arukas' での Mesos + Marathon の活用について(Mesos勉強会)
PPTX
手軽にできる外部公開サーバ観測の効用と活用法 @ Internet Week 2016
PDF
OSC 2014 Tokyo/Spring 「Zabbix 2.2を使ってみよう」
PPTX
Azure サポート エンジニア直伝 ~ PowerShell 実践活用術 ~
Linuxサーバのセキュリティ対策 part2 - Apache編
Linuxサーバのセキュリティ対策 part3 - ファイル転送編
サーバー設定のお話
Linuxサーバーのセキュリティ対策 part4
Docker ホスティングサービス 'Arukas' での Mesos + Marathon の活用について(Mesos勉強会)
手軽にできる外部公開サーバ観測の効用と活用法 @ Internet Week 2016
OSC 2014 Tokyo/Spring 「Zabbix 2.2を使ってみよう」
Azure サポート エンジニア直伝 ~ PowerShell 実践活用術 ~

What's hot (20)

PDF
INF-018_OS の中で SDN 抗争勃発!? ~主役を争う VXLAN vs NVGRE~
PPTX
自宅ラック勉強会 2.2 夏のZabbix特別教室 ~構築編~
PDF
OWASP WordPressセキュリティ実装ガイドライン (セキュアなWordPressの構築)
PDF
OWASP WordPressセキュリティ実装ガイドライン (セキュアなWordPressの構築ハンズオン手順書)
PPTX
Zabbixの分散構築~ConoHa VPSでのzabbix server構築~
PDF
Zabbix超入門
PDF
OWASP Nagoya_WordPress_Handson_3
PDF
WPSCanによるWordPressの脆弱性スキャン
PDF
Vagrant on SoftLayer
PPTX
KUSANAGIユーザグループ東京 第1回勉強会 資料
PDF
Zabbixのパフォーマンスチューニング & インストール時の注意点
PPTX
5分でインストール!awsでzabbix3.0
PDF
nginx + lua + ObjectStorage ファイルアップロード/ダウンロードの高速化
PDF
Azure &lt;3 Openness
PPTX
明日から始める Chef 入門 #bpstudy
PPTX
NginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くした
PDF
OWASP Nagoya_WordPress_Handson_2
PPTX
NW-DIY ネットワーク機能の分類
PPTX
徳丸本VMに脆弱なWordPressを導入する
PDF
Zabbix-jp study #4 20111020 session2
INF-018_OS の中で SDN 抗争勃発!? ~主役を争う VXLAN vs NVGRE~
自宅ラック勉強会 2.2 夏のZabbix特別教室 ~構築編~
OWASP WordPressセキュリティ実装ガイドライン (セキュアなWordPressの構築)
OWASP WordPressセキュリティ実装ガイドライン (セキュアなWordPressの構築ハンズオン手順書)
Zabbixの分散構築~ConoHa VPSでのzabbix server構築~
Zabbix超入門
OWASP Nagoya_WordPress_Handson_3
WPSCanによるWordPressの脆弱性スキャン
Vagrant on SoftLayer
KUSANAGIユーザグループ東京 第1回勉強会 資料
Zabbixのパフォーマンスチューニング & インストール時の注意点
5分でインストール!awsでzabbix3.0
nginx + lua + ObjectStorage ファイルアップロード/ダウンロードの高速化
Azure &lt;3 Openness
明日から始める Chef 入門 #bpstudy
NginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くした
OWASP Nagoya_WordPress_Handson_2
NW-DIY ネットワーク機能の分類
徳丸本VMに脆弱なWordPressを導入する
Zabbix-jp study #4 20111020 session2
Ad

Viewers also liked (16)

PDF
Windows Server + VPNのAWS移行事例
PDF
IaaSクラウド比較
PDF
IaaSクラウド比較'14
KEY
ざっくり分かるDNSの基礎
PPTX
OSの歴史
PDF
SDNなう – OpenStack最新情報セミナー 2015年7月
PDF
PowerDNSのご紹介
PDF
【SSS】クラウド型セキュリティ・サービス
PPTX
OSの歴史 完成版
PPTX
Barracuda NextG Firewall Fシリーズ製品のご紹介
PPTX
クラウドビジネスをドライブする最後のピース「クラウドマイグレーション」! – OpenStack最新情報セミナー 2015年7月
PDF
Mobageの技術を体験(MyDNS編)
PDF
1時間でざっくり教えるサーバ運営超入門
PDF
AWS Shieldのご紹介 Managed DDoS Protection
PDF
AWS Black Belt Online Seminar 2017 Auto Scaling
PDF
Linux女子部 systemd徹底入門
Windows Server + VPNのAWS移行事例
IaaSクラウド比較
IaaSクラウド比較'14
ざっくり分かるDNSの基礎
OSの歴史
SDNなう – OpenStack最新情報セミナー 2015年7月
PowerDNSのご紹介
【SSS】クラウド型セキュリティ・サービス
OSの歴史 完成版
Barracuda NextG Firewall Fシリーズ製品のご紹介
クラウドビジネスをドライブする最後のピース「クラウドマイグレーション」! – OpenStack最新情報セミナー 2015年7月
Mobageの技術を体験(MyDNS編)
1時間でざっくり教えるサーバ運営超入門
AWS Shieldのご紹介 Managed DDoS Protection
AWS Black Belt Online Seminar 2017 Auto Scaling
Linux女子部 systemd徹底入門
Ad

Similar to Linuxサーバのセキュリティ対策 part1 (20)

PDF
「さくらのクラウド」スタートアップスクリプトを作ってみよう! - concrete5を題材に -(オープンソースカンファレンス2014 Shimane)
PDF
OpenWrtによるサイト間IPsec接続
PDF
RasPiからSEILにL2TP/IPSec接続
ODP
Raspberry Pi 2 誤自宅サーバー移行日記
PPTX
Pulsar Handson 20180226
PDF
Polidog に RPM の作り方を教える
PDF
Apacheの展望とmod_perlの超絶技巧 #yapcasia
PDF
Redunduncy of NAT instance on AWS/VPC
PPTX
自宅ラック勉強会 4.0/2014 LT資料
PDF
Lagopusで試すL3ルーティング + α (Lagopusの設定方法いろいろ)
PDF
【アシアル塾】Linux超入門編・第二回 仮想サーバー上にLAMP環境を構築してみよう
PPTX
FD.io VPP事始め
PDF
Xeon dとlagopusと、pktgen dpdk
PDF
InfiniBand on Debian
PDF
Bird in show_net
PDF
20171206 d3 health_tech発表資料
PDF
Sacss sp5
PDF
Niigata.pm #1
PDF
Hadoop on LXC
PDF
Word press on conoha このべん #3
「さくらのクラウド」スタートアップスクリプトを作ってみよう! - concrete5を題材に -(オープンソースカンファレンス2014 Shimane)
OpenWrtによるサイト間IPsec接続
RasPiからSEILにL2TP/IPSec接続
Raspberry Pi 2 誤自宅サーバー移行日記
Pulsar Handson 20180226
Polidog に RPM の作り方を教える
Apacheの展望とmod_perlの超絶技巧 #yapcasia
Redunduncy of NAT instance on AWS/VPC
自宅ラック勉強会 4.0/2014 LT資料
Lagopusで試すL3ルーティング + α (Lagopusの設定方法いろいろ)
【アシアル塾】Linux超入門編・第二回 仮想サーバー上にLAMP環境を構築してみよう
FD.io VPP事始め
Xeon dとlagopusと、pktgen dpdk
InfiniBand on Debian
Bird in show_net
20171206 d3 health_tech発表資料
Sacss sp5
Niigata.pm #1
Hadoop on LXC
Word press on conoha このべん #3

Linuxサーバのセキュリティ対策 part1

  • 1. 2013/5/13 Kazunori INABA 1 2013.5.10 Garage labsサーバー部8U (改)Linuxサーバのセキュリティ対策 ~僕がいつもやっていること part1 稲葉 一紀@札幌
  • 2. 2013/5/13 Kazunori INABA 2 自己紹介 稲葉 一紀  サーバインフラ専門のフリーランスエンジニア  屋号決まっていません。     おもにアプリ開発企業・エンジニア向けに     セキュリティ・可用性・性能・拡張性を考慮した     ちょっと気の利いた     サーバインフラ構成設計・設定・支援や既存システムの性能改善調査・支援      を行います。
  • 3. 2013/5/13 Kazunori INABA 3 セキュリティ対策 - 基本方針 僕がサーバの設定を行うときにいつもやっていることを発表しま す。 ・できるだけPaaS, SaaS的な外部サービスや共用レンタル  サーバを利用して、自分で設定、運用するサービスを減らす。   - 特にDNSとメールは自前でやらない!   - SSHとHTTP(S)のみ外部公開するのが理想。   - Webアプリケーションサーバ1台の運用保守を専門業者に    任せるといくらかかる? ・どんな対策をしても、やられるときはやられる!   それでも、できるだけ少ない手間で基本的な設定を行い、   不正アクセスされる確率を減らす。
  • 4. 2013/5/13 Kazunori INABA 4 セキュリティ対策 - 項目 ・SSH ・Firewall ・iptables ・TCP Wrapper ・不要なサービスの停止 ・DNS bind ・Apache ・ファイル転送 FTP, SCP/SFTP, WebDAV ・メール Postfix ・アンチウイルス ClamAV ・改ざん検知 Tripwire ・SEO対策 ・その他やってないこと SELinux, IPS, WAF ・技術以外の対策 以降、コマンドやConfigは、CentOSにおける例です。
  • 5. 2013/5/13 Kazunori INABA 5 SSH(1) ・最近構築したさくらのVPSサーバで、開通後3週間で3,300回  の不正ログインチャレンジがあった。   - サイトの有名無名に関わらず攻撃は無差別にやってくる。    →→→→サーバを受け取ったらまずはサーバを受け取ったらまずはサーバを受け取ったらまずはサーバを受け取ったらまずはSSHの設定変更を!の設定変更を!の設定変更を!の設定変更を!   - /var/log/secure で自分以外の 'Accepted password for ~' の    ログイン成功記録がないことを確認する。     →もしあれば何かを仕込まれているかもしれないので、初期化した       ほうがよい。 ・できれば、アクセス元IPアドレスを限定+公開鍵認証。   - でも、固定IPアドレスを持っていない場合があるし、複数人・    複数組織のユーザが関わる場合は鍵のやりとりが手間。。。
  • 6. 2013/5/13 Kazunori INABA 6 SSH(2) ・ポート番号を22から10022などに変更。   これだけで不正ログインチャレンジがほぼなくなる。   Port 10022 ・rootユーザのログインを禁止。   PermitRootLogin no ・MySQLユーザなど、一般的なサービス用アカウントのログイン  を禁止。   DenyUsers mysql   ※これらのユーザのログインシェルを /bin/bash ではなく、    /sbin/nologin とすべきかも。やったことないけど。
  • 7. 2013/5/13 Kazunori INABA 7 Firewall(1) ・Firewall機器やルータ機器、クラウドサービスのFirewall機能  など、サーバの上位レイヤで制御する。   →不正アクセスによるサーバ負荷を軽減できる。 ・プライベートLANで他契約者のサーバと同じサブネットに属する  場合がある。AWSなど。   →Firewall機能(AWSのSecurity Groups)やiptablesを駆使して、     他契約者のサーバからのアクセスは防ぐ。
  • 8. 2013/5/13 Kazunori INABA 8 Firewall(2) ・デフォルトはすべて禁止。必要なポートのみ許可する。  (iptablesも同様) ・サーバへの内向きだけではなく、可能であれば外向きも制御  する。(iptablesも同様)   → 外向きは     HTTP(TCP/80), HTTPS(TCP/443), DNS(UDP/53, TCP/53),     SSH(TCP/22), FTP(TCP/20,21), SMTP(TCP/25),     NTP(UDP/123), ICMP 程度で十分のはず。 ・SSH, FTPは可能であればアクセス元IPアドレスを限定する。  (iptablesも同様)
  • 9. 2013/5/13 Kazunori INABA 9 iptables(1) ・サーバより上位のFirewall機能と併用する。   →設定ミス、漏れや不具合への対策のため、複数箇所で制限を     行うことが望ましい。 ・アクセス数がさほど多くなければ、ポート制御以外の、  Ping of Death対策やSYN Flood対策、ログ書き出し設定も  行うとよい。   →アクセス数が多い場合はこれらの処理のためCPU負荷が     増大してパフォーマンスが落ちることに注意。 ・設定変更でミスると、今接続している端末も切れてしまう可能性  があることに注意。   →慎重を期すならば、atコマンドで10分後にiptablesをクリアする     設定を入れてから設定変更する、などの工夫を。
  • 10. 2013/5/13 Kazunori INABA 10 iptables(2) ・FTPサーバを立てるなら、iptablesのFTPモジュールを読み  込むよう設定する。    → パッシブ用のTCP/1024-65535 のアクセス許可ルールが      不要となる。(はずだけど、vsftpdでパッシブ用ポートの範囲を      指定したら、この範囲を許可しないと通信できなかった。      調査中。) – /etc/sysconfig/iptables-config IPTABLES_MODULES="ip_conntrack_ftp ip_nat_ftp" -- ・/etc/sysconfig/iptables ファイルを直接編集するよりは、シェル  スクリプトを作成したほうが管理しやすい。(と思う)
  • 11. 2013/5/13 Kazunori INABA 11 iptables(3) ・最近、さくらのVPSサーバに適用したiptables設定スクリプト例 -- #!/bin/sh # set_iptables.sh # last updated on: 2013/05/10 ina128@wine.plala.or.jp # ### 初期化 iptables -F iptables -X ### デフォルトルール、すべて破棄 iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP ### IP偽装パケット(インタフェースへのプライベートIPアドレスからのアクセス)をすべて破棄 iptables -A INPUT -i eth0 -s 127.0.0.1 -j DROP iptables -A INPUT -i eth0 -s 10.0.0.0/8 -j DROP iptables -A INPUT -i eth0 -s 172.16.0.0/12 -j DROP iptables -A INPUT -i eth0 -s 192.168.0.0/16 -j DROP ### ループバックインタフェースはすべて許可 iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT ### セッション確立後のアクセスは許可 iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
  • 12. 2013/5/13 Kazunori INABA 12 iptables(4) (iptables設定スクリプト続き) ### 内向きアクセスの許可 ## TCP - HTTP, HTTPS, SSH(10022に変更), FTPパッシブ(10021, 10030-10049)を許可 iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT # HTTP iptables -A INPUT -m state --state NEW -p tcp --dport 443 -j ACCEPT # HTTPS iptables -A INPUT -m state --state NEW -p tcp --dport 10022 -j ACCEPT # SSH iptables -A INPUT -m state --state NEW -p tcp --dport 10021 -j ACCEPT # FTP Listen iptables -A INPUT -m state --state NEW -p tcp --dport 10030:10049 -j ACCEPT # FTP ## UDP - なし ## ICMP - pingやpingリクエストの戻りなど一部のみ許可 iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT iptables -A INPUT -p icmp --icmp-type destination-unreachable -j ACCEPT iptables -A INPUT -p icmp --icmp-type time-exceeded -j ACCEPT iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT ### 外向きアクセスの許可 ## TCP - HTTP, HTTPS, DNS, SSH, FTP, SMTP, DNSを許可 iptables -A OUTPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT # HTTP iptables -A OUTPUT -m state --state NEW -p tcp --dport 443 -j ACCEPT # HTTPS iptables -A OUTPUT -m state --state NEW -p tcp --dport 53 -j ACCEPT # DNS iptables -A OUTPUT -m state --state NEW -p tcp --dport 22 -j ACCEPT # SSH iptables -A OUTPUT -m state --state NEW -p tcp --dport 20 -j ACCEPT # FTP Data iptables -A OUTPUT -m state --state NEW -p tcp --dport 21 -j ACCEPT # FTP Control iptables -A OUTPUT -m state --state NEW -p tcp --dport 25 -j ACCEPT # SMTP
  • 13. 2013/5/13 Kazunori INABA 13 iptables(5) (iptables設定スクリプト続き) ## UDP - DNS, NTPを許可 iptables -A OUTPUT -p udp --dport 53 -j ACCEPT # DNS iptables -A OUTPUT -p udp --dport 123 -j ACCEPT # DNS ## ICMP - すべてを許可 iptables -A OUTPUT -p icmp -j ACCEPT # EOF --
  • 14. 2013/5/13 Kazunori INABA 14 TCP Wrapper ・/etc/hosts.deny, /etc/hosts.allow ・SSH, FTP, SNMPなどのアクセス元IPアドレスが決まっている  のであれば、設定するとよい。   ALL: 127.0.0.1   sshd: xxx.xxx.xxx.xxx   vsftpd: xxx.xxx.xxx.xxx
  • 15. 2013/5/13 Kazunori INABA 15 不要なサービスの停止 ・chkconfigコマンドで自動起動しているサービスを確認して  不要なサービスを停止する。   # chkconfig –list | grep ':on'   avahi-daemon, bluetooth, ip6tables, iscsi, NFS(netfs, nfslock,   rpsbind, rpcgssd, rpcidmapd rpcsvcgssd)などはデフォルトで   起動していることが多いがたいていは不要。   (参考)http://www.obenri.com/_minset_cent6/daemon_cent6.html   # /etc/init.d/<service> stop   # chkconfig <service> off
  • 16. 2013/5/13 Kazunori INABA 16 DNS bind(1) ・DNSサーバの設定、運用は大変!   - 頻繁に発見されるbindの脆弱性、DNSサーバを利用した攻撃    の多さ、キャッシュにより設定ミスの時限爆弾化、仕様や設定の    複雑さ etc.   - DNSサーバのダウンや設定ミスはWebサーバダウンと同じこと。 ・外部サービスの利用がおすすめ。   - キャッシュサーバは、サーバサービスベンダーが用意する    DNSサーバを利用。   - 権威(コンテンツ)サーバは、ドメイン管理業者が用意する    DNSサーバやAWS Route 53を利用。   
  • 17. 2013/5/13 Kazunori INABA 17 DNS bind(2) どうしてもDNSサーバの運用が必要なとき、、、 ・キャッシュサーバとしてのアクセス元IPアドレスを限定して、  オープンリゾルバーにならないようにする。  - オープンリゾルバーを利用したDNSリフレクター攻撃 (参考) http://internet.watch.impress.co.jp/docs/interview/20130426_597628.htm l   送信元IPアドレスを攻撃対象のIPアドレスに詐称した問い合わせを   オープンリゾルバーに送信    →オープンリゾルバーからの応答が攻撃対象に返る。   ※実生活でいうと、「なりすまし出前注文」のようなもの。
  • 18. 2013/5/13 Kazunori INABA 18 DNS bind(3) ・オープンリゾルバーにならないための設定例。 (参考) http://jprs.jp/tech/notice/2013-04-18-fixing-bind-openresolver.html – named.conf ... acl "TRUSTSRC" { // TRUSTSRCというacl作成の設定を追加します 192.168.0.0/24; localhost; }; options { ... //query-source port 53; // 外部への問い合わせ元のポート番号をランダム化します recursion yes; // リゾルバーとして動作します allow-query { TRUSTSRC; }; // TRUSTSRCからのみクエリを許可します allow-recursion { TRUSTSRC; }; // TRUSTSRCからのみリゾルバーとして動作します allow-query-cache { TRUSTSRC; }; // TRUSTSRCからのみキャッシュの内容を返します ... };   
  • 19. 2013/5/13 Kazunori INABA 19 つづく Part2以降に続く... ・Apache ・ファイル転送 FTP, SCP/SFTP, WebDAV ・メール Postfix ・アンチウイルス ClamAV ・改ざん検知 Tripwire ・SEO対策 ・その他やってないこと SELinux, IPS, WAF ・技術以外の対策