さっしーブログ

埼玉県在住のシステムエンジニアです。基本的には技術的な内容を中心に発信していきます。

iptables-persistentを利用して、外部の特定ホストへのアクセス制限をしてみた

目次

 
iptable-persistentにて接続先の制御が行えることを検証したため、以下にやり方を残しておく。

1.手順

1-1. 仮想マシンを起動する。

Linuxが起動できればなんでもよい。
当ブログではHyper-vで作成した仮想環境にDebian7をインストールして行っている。
 

1-2. root権限でログインを行う。

本記事ではroot権限で操作を行っているため、sudoは省略している。
 

1-3. 以下のコマンドで「お天気Webサービス」からデータを取得できるかを確認する。

※このコマンドでデータの取得が行えるということは仮想マシンから「お天気Webサービス」へアクセスが可能ということになる
 

f:id:y_saiki:20170926094513p:plain

 

1-4. 次にiptablesの設定をしていく、下記のディレクトリに移動する。

cd /etc/iptables
 
 

1-5. 下記のファイルを開く。

vi rule.v4
 
※WinScpでサクラエディタなどで開いて編集してもよい。
 

1-6. ファイルの内容を下記のように編集する。

[ 編集前 ]
*filter
:INPUT ACCEPT [491:67367]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [481:69267]
COMMIT
 
[ 編集後 ]
*filter
:INPUT ACCEPT [491:67367]
:FORWARD ACCEPT [0:0]
# :OUTPUT ACCEPT [481:69267]
-A OUTPUT -d 125.6.149.103/32 -j REJECT --reject-with icmp-port-unreachable
COMMIT
 

1-7. 下記のコマンドで修正したファイルを再度読み込ませる。

/etc/init.d/iptables-persistent reload
  

1-8. 再度、下記のコマンドでアクセスを行う。

 

f:id:y_saiki:20170926094501p:plain

 
接続が拒否されたため、特定ホストへの内部から外部への接続を拒否できた。
 

2.iptablesのログを出力できるようにする

2-1.log出力ルールの追加

rule.v4のrejectの前に下記の1行を追加する。
-A OUTPUT -j LOG --log-prefix "iptables_reject_log "
 

2-2.log出力ディレクトリを作成

下記のコマンドを実行してlogディレクトリを作成する。
$ mkdir -p /var/log/iptables
 

2-3.rsyslog の設定ファイル作成

/etc/rsyslog.d/にiptables.conf(ファイル名は任意でよい)というファイルを作成します。
:msg,contains,"iptables_reject_log " -/var/log/iptables/iptables.log
:msg,contains,"iptables_reject_log " ~
 
※作成しないと、/var/log/message にiptablesのログが出力されます。
※iptalbes_reject_log はrule.v4で、log-prefixに設定した値です。
 また、この値の場合は、/var/log/iptables/iptables.log に出力されます
※二行目の「~」は以降の処理を行わないで、messageのほうに出力されないようにするという意味です。
 

2-4.rsyslogの設定変更を反映

下記のコマンドでサービス再起動します。
$ service rsyslog restart
 

2-5.iptablesのルール変更を反映

 下記のコマンドでサービス再起動します。
$ service iptables-persistent reload
  

3.logのローテーション設定の共有

3-1.設定ファイルの作成

/etc/logrotate.d/ にiptablesという名前の設定ファイルを以下の内容で作成
※ファイル名は任意でよい
/var/log/iptables/iptables.log {
  rotate 3
  weekly
  missingok
  notifempty
  create 640 root root
}
 

3-2.rsyslogの再起動

下記のコマンドでrsyslogを再起動する。
$ service rsyslog restart
 

3-3.設定の確認

下記のコマンドを実行する
$ logrotate -dv /etc/logrotate.d/iptables
 

3-4.参考サイト

ローテーション処理の内容は以下を参考に
 
以上