ボールを蹴りたいシステムエンジニア

ボール蹴りが大好きなシステムエンジニア、ボールを蹴る時間確保の為に時間がある時には勉強する。

CentOSでiptables用スクリプト作成してログも出力する。

iptables設定用スクリプトを作成し、iptablesのログも出力するようにする。

環境

CentOS6

手順

iptablesスクリプト作成

iptablesスクリプト作成

vi /etc/iptables.sh

スクリプトにはiptablesのコマンドをずらーっと書くだけ。
最初に初期化、最後に保存してiptablesを実行してる。

「-j LOG」の指定でログ出力をしています。
iptablesのルールは記述順(実行順)に適用されますが、「-j LOG」の行の前にREJECTやDROPされたパケットはログ出力されないようです。

–log-prefix “[iptables firewall]”
でログ出力時の識別子を指定。

–log-level=info
でログ出力のレベルを設定。通常はwarning

下記スクリプト、参考サイトの丸パクリ・・
環境に応じて適宜変更する。
下記だと、warningログだけ出力してる。

#!/bin/sh
#
# パス
PATH=/sbin:/usr/sbin:/bin:/usr/bin

# 内部ネットワークとして許可する範囲
LOCALNET0=192.168.10.0/24
LOCALNET1=10.0.10.0/24


#自サーバーIP
MYIP=10.0.10.30

###########################################################
# ポリシーの初期化
###########################################################
# すべてのルールを削除
iptables -F
iptables -t nat -F
iptables -X

# パケットカウンタをクリア
iptables -Z

# デフォルトのポリシーを設定する
# INPUTはリモートでの設定を考慮する
iptables -P INPUT ACCEPT
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

###########################################################
# ループバックインターフェイスの開放
###########################################################
# ローカルアドレスへの許可
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

iptables -A INPUT -p tcp -s $LOCALNET0 -j ACCEPT
iptables -A INPUT -p tcp -s $LOCALNET1 -j ACCEPT
iptables -A OUTPUT -p tcp -d $LOCALNET0 -j ACCEPT
iptables -A OUTPUT -p tcp -d $LOCALNET1 -j ACCEPT

###########################################################
# 内部から行ったアクセスに対する外部からの返答アクセスを許可
###########################################################
iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT

###########################################################
# ステルススキャンに対抗
###########################################################
# すべてのTCPセッションがSYNで始まらないものをログに記録し、拒否する
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j LOG --log-prefix "Dropped by Stealth Scan: "
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP

###########################################################
# Ping of Death対策
###########################################################
# 1秒間に10回を超えるpingはログを記録して破棄
#iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s --limit-burst 10 -j LOG --log-prefix "Dropped by Ping of Death: "
#iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s --limit-burst 10 -j DROP

###########################################################
# ICMP制御
###########################################################
# ICMPの入力について設定
iptables -A INPUT -p icmp -j ACCEPT

# ICMPの出力について設定
iptables -A OUTPUT -p icmp -j ACCEPT


###########################################################
# 内向きポリシー
###########################################################
# LOCALNETからのTCP22番ポート(SSH)へのアクセスを許可
iptables -A INPUT -p tcp -s $LOCALNET0 --dport 22 -j ACCEPT
iptables -A INPUT -p tcp -s $LOCALNET1 --dport 22 -j ACCEPT

# LOCALNETからのTCP20,21番ポート(FTP)へのアクセスを許可
iptables -A INPUT -p tcp -s $LOCALNET0 -m multiport --dport 20,21 -j ACCEPT
iptables -A INPUT -p tcp -s $LOCALNET1 -m multiport --dport 20,21 -j ACCEPT

# 外部からのTCP80番ポート(HTTP)へのアクセスを許可
iptables -A INPUT -p tcp -d $MYIP --dport 80 -j ACCEPT


###########################################################
# 外向きポリシー
###########################################################
# 既に認証されたパケットを受理
iptables -I OUTPUT 1 -p tcp -s $MYIP -m state --state ESTABLISHED,RELATED -j ACCEPT

# LOCALNETからのTCP22番ポート(SSH)へのアクセスを許可
iptables -A OUTPUT -p tcp -d $LOCALNET0 --sport 22 -j ACCEPT
iptables -A OUTPUT -p tcp -d $LOCALNET1 --sport 22 -j ACCEPT

# LOCALNETへのTCP20,21番ポート(FTP)へのアクセスを許可
iptables -A OUTPUT -p tcp -d $LOCALNET0 -m multiport --sport 20,21 -j ACCEPT
iptables -A OUTPUT -p tcp -d $LOCALNET1 -m multiport --sport 20,21 -j ACCEPT

# HTTPセッションを開始するパケットを受理
iptables -A OUTPUT -p tcp -s $MYIP --dport 80 -j ACCEPT

# SSLセッションを開始するパケットを受理
iptables -A OUTPUT -p tcp -s $MYIP --dport 443 -j ACCEPT

# DNSセッションを開始するパケットを受理
iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT

# SMTPセッションを開始するパケットを受理
iptables -A OUTPUT -p tcp -s $MYIP --dport 25 -j ACCEPT
iptables -A OUTPUT -p tcp -s $MYIP --dport 465 -j ACCEPT
iptables -A OUTPUT -p tcp -s $MYIP --dport 587 -j ACCEPT

# NTPを許可
iptables -A OUTPUT -p udp -d 133.243.238.243 --dport 123 --sport 123 -j ACCEPT          # ntp-a2.nict.go.jp
iptables -A OUTPUT -p udp -d 133.243.238.244 --dport 123 --sport 123 -j ACCEPT          # ntp-a3.nict.go.jp
iptables -A OUTPUT -p udp -d 133.243.238.163 --dport 123 --sport 123 -j ACCEPT          # ntp-b2.nict.go.jp
iptables -A OUTPUT -p udp -d 133.243.238.164 --dport 123 --sport 123 -j ACCEPT          # ntp-b3.nict.go.jp
iptables -A OUTPUT -p udp -d 210.171.226.40 --dport 123 --sport 123 -j ACCEPT


###########################################################
# INPUTロギング
###########################################################
iptables -N IN_LOGGING
iptables -A IN_LOGGING -j LOG --log-level warning --log-prefix "Dropped by INPUT: "
iptables -A IN_LOGGING -j DROP
iptables -A INPUT -j IN_LOGGING

###########################################################
# OUTPUTロギング
###########################################################
iptables -N OUT_LOGGING
iptables -A OUT_LOGGING -j LOG --log-level warning --log-prefix "Dropped by OUTPUT: "
iptables -A OUT_LOGGING -j DROP
iptables -A OUTPUT -j OUT_LOGGING

###########################################################
# ポリシーの初期化
###########################################################
# デフォルトのポリシーを設定する
# INPUTのみリモートでの設定を考慮する
iptables -P INPUT DROP

###########################################################
# 設定の保存と反映
###########################################################
/etc/init.d/iptables save
/etc/init.d/iptables restart

実行権限付与

chmod +x /etc/iptables.sh

スクリプト実行

sh /etc/iptables.sh

この時点ではまだログは出力されない

ロガー設定

ログ出力先ディレクトリ作成

mkdir /var/log/iptables/

rsyslogの設定
rsyslogがlinux標準のロギングシステムらしい。

vi /etc/rsyslog.conf

追記

kern.info                                               /var/log/iptables/iptables.log

messageログへの出力しないよう設定

.info;mail.none;news.none;authpriv.none;cron.none /var/log/messages

↓変更↓

.info;mail.none;news.none;authpriv.none;cron.none;kern.none /var/log/messages

rsyslogを再起動

service rsyslog restart

ログローテート

上記のままだと1ファイルにログが溜まってしまうのでデイリーでローテートを行う。

linux標準のlogrotateを使用する。
logrotate.d配下に設定ファイルを作成すると自動的に実行される。

vi /etc/logrotate.d/iptables

設定

/var/log/iptables/iptables.log {
  rotate 10
  daily
  compress
  missingok
  notifempty
  create 0644 root root
}

rotete ... n回分ローテート保持
daily ... 毎日ローテート
compress ... 圧縮する
missingok ... ログファイルが見つからなかった場合、エラーメッセージを出力せずに次のログファイルの処理に移行する。
notifempty ... ログファイルが空ならローテートしない
create {パーミッション} {ユーザー名} {グループ名} ...
新規ログファイルをローテーションした直後に作成する。


翌日、ログローテートを確認する。

CetnOSサーバー初期環境構築と設定まとめ。

CentOSサーバー構築時の設定項目まとめ。
都度アップデートします。

CentOSでユーザー作成とパスワード設定

今更だけどLinuxでのユーザー作成をおさらい。

環境

CentoS6

手順

普通に作成するなら。

ユーザー作成

ユーザー作成

useradd hoge

home直下にホームディレクトリが作成される

ls -lhtd /home/hoge/
drwx------. 4 hoge hoge 4.0K Jan 19 14:30 /home/hoge/


既に存在してるディレクトリをホームディレクトリに指定してユーザー作成をするなら。
※存在しないディレクトリを指定

useradd test2 -d /tmp/test2/

存在してるディレクトリを指定すると警告が出る。

useradd: warning: the home directory already exists.
Not copying any file from skel directory into it.

useradd実行するとホームディレクトリも作成される

ls -d /tmp/test2/
/tmp/test2/

パスワード設定

passwd ユーザー名

短かったり簡単なパスワードだと警告が出る

BAD PASSWORD: it is too short
BAD PASSWORD: is too simple

VMwareのCentOS6でNICを追加して固定IP設定を行う

VMwareCentOS環境に新しくNICを追加する。

環境

VMware
CertOS6

手順

元々のネットワーク

[root@lb01 ~]# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0C:29:B2:B1:23  
          inet addr:192.168.10.10  Bcast:192.168.10.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:feb2:b123/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:57 errors:0 dropped:0 overruns:0 frame:0
          TX packets:63 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:7486 (7.3 KiB)  TX bytes:6412 (6.2 KiB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:96 errors:0 dropped:0 overruns:0 frame:0
          TX packets:96 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:6080 (5.9 KiB)  TX bytes:6080 (5.9 KiB)

NIC追加したい仮想マシンの設定を開く。
元のネットワークアダプタの設定は「ブリッジ(自動)」。
f:id:blackna7:20170116230458j:plain

追加をクリック

ネットワークアダプタを選択し「次へ」
f:id:blackna7:20170116230519j:plain

ネットワーク接続でブリッジを選択し完了。
f:id:blackna7:20170116230532j:plain

こんな感じになる。
f:id:blackna7:20170116230539j:plain

新しいネットワークインターフェイス「eth1」が追加されている事を確認。

[root@lb01 ~]# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0C:29:B2:B1:23  
          inet addr:192.168.10.10  Bcast:192.168.10.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:feb2:b123/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:57 errors:0 dropped:0 overruns:0 frame:0
          TX packets:63 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:7486 (7.3 KiB)  TX bytes:6412 (6.2 KiB)

eth1      Link encap:Ethernet  HWaddr 00:0C:29:B2:B1:2D  
          inet addr:192.168.10.120  Bcast:192.168.10.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:feb2:b12d/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:12 errors:0 dropped:0 overruns:0 frame:0
          TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:2310 (2.2 KiB)  TX bytes:1152 (1.1 KiB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:96 errors:0 dropped:0 overruns:0 frame:0
          TX packets:96 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:6080 (5.9 KiB)  TX bytes:6080 (5.9 KiB)

続いてeth1のIPなどを設定します。
追加後、eth1のネットワーク設定ファイルは無いので作成します。

その前にNICの情報を確認します。

UUIDを確認。
※System行

[root@lb01 Desktop]# nmcli con list
名前                      UUID                                   タイプ            範囲     タイムスタンプ-リアル             
System eth0               dbfb5e23-424f-42ea-ade1-de65051ddb4b   802-3-ethernet    システム 2017年01月16日 22時09分04秒       
Auto eth1                 865abd20-9812-49f8-9071-27fb7882c3ae   802-3-ethernet    システム 2017年01月16日 22時09分04秒       
System eth1               dbfb5e23-424f-42ea-ade1-de65051ddb4b   802-3-ethernet    システム しない                            
名前                      UUID                                   タイプ            範囲     タイムスタンプ-リアル             

UUIDはNetworkManagerでの識別用らしく、NetworkManagerを使用しない場合は設定不要らしい。

続いてMacアドレスを確認

cat /etc/udev/rules.d/70-persistent-net.rules

# PCI device 0x8086:0x100f (e1000)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:b2:b1:23", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

# PCI device 0x8086:0x100f (e1000)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:b2:b1:2d", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"

eth1用の設定ファイル新規作成

vi /etc/sysconfig/network-scripts/ifcfg-eth1

設定例

DEVICE="eth1"
BOOTPROTO="none"
HWADDR="00:0C:29:B2:B1:2D"
IPV6INIT="yes"
NM_CONTROLLED="yes"
ONBOOT="yes"
TYPE="Ethernet"
UUID="dbfb5e23-424f-42ea-ade1-de65051ddb4b"
IPADDR=10.0.10.10
#PREFIX=24
GATEWAY=10.0.10.1
NETMASK=255.255.255.0
DNS1=10.0.10.1
DNS2=10.0.10.2

参考までにeth0の設定

[root@lb01 Desktop]# cat /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE="eth0"
BOOTPROTO="none"
HWADDR="00:0C:29:B2:B1:23"
IPV6INIT="yes"
NM_CONTROLLED="yes"
ONBOOT="yes"
TYPE="Ethernet"
UUID="dbfb5e23-424f-42ea-ade1-de65051ddb4b"
IPADDR=192.168.10.10
#PREFIX=24
GATEWAY=192.168.10.1
NETMASK=255.255.255.0
DNS1=192.168.10.1
DNS2=192.168.10.2

ネットワーク再起動

/etc/rc.d/init.d/network restart

OS再起動

reboot

以下のように反映されました

[root@lb01 Desktop]# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0C:29:B2:B1:23  
          inet addr:192.168.10.10  Bcast:192.168.10.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:feb2:b123/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:60 errors:0 dropped:0 overruns:0 frame:0
          TX packets:24 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:4386 (4.2 KiB)  TX bytes:1554 (1.5 KiB)

eth1      Link encap:Ethernet  HWaddr 00:0C:29:B2:B1:2D  
          inet addr:10.0.10.10  Bcast:10.0.10.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:feb2:b12d/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:22 errors:0 dropped:0 overruns:0 frame:0
          TX packets:52 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:1886 (1.8 KiB)  TX bytes:2664 (2.6 KiB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:30 errors:0 dropped:0 overruns:0 frame:0
          TX packets:30 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:2052 (2.0 KiB)  TX bytes:2052 (2.0 KiB)

他サーバーからPINGが通る事を確認

[root@localhost ~]# ping 192.168.10.10
PING 192.168.10.10 (192.168.10.10) 56(84) bytes of data.
64 bytes from 192.168.10.10: icmp_seq=1 ttl=64 time=1.47 ms
64 bytes from 192.168.10.10: icmp_seq=2 ttl=64 time=0.208 ms
[root@localhost ~]# ping 10.0.10.10
PING 10.0.10.10 (10.0.10.10) 56(84) bytes of data.
64 bytes from 10.0.10.10: icmp_seq=1 ttl=64 time=0.416 ms
64 bytes from 10.0.10.10: icmp_seq=2 ttl=64 time=0.197 ms
64 bytes from 10.0.10.10: icmp_seq=3 ttl=64 time=0.169 ms
64 bytes from 10.0.10.10: icmp_seq=4 ttl=64 time=0.173 ms

CentOSでエイリアスIPを設定する

CentOSエイリアスIPを設定する

現在のIPは
192.168.10.10

これに加え
10.0.10.10
で接続できるように設定する。

現在の設定を確認

[root@lb01 ~]# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0C:29:B2:B1:23  
          inet addr:192.168.10.10  Bcast:192.168.10.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:feb2:b123/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:8908 errors:0 dropped:0 overruns:0 frame:0
          TX packets:4014 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:1600962 (1.5 MiB)  TX bytes:427732 (417.7 KiB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:77 errors:0 dropped:0 overruns:0 frame:0
          TX packets:77 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:4604 (4.4 KiB)  TX bytes:4604 (4.4 KiB)
[root@lb01 ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0 

以下を追記

IPADDR2=10.0.10.10
NETMASK2=255.255.255.0

ネットワークを再起動

[root@lb01 ~]# /etc/rc.d/init.d/network restart 

反映を確認
※ifconfigには出ないらしい

[root@lb01 ~]# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:b2:b1:23 brd ff:ff:ff:ff:ff:ff
    inet 192.168.10.10/24 brd 192.168.10.255 scope global eth0
    inet 10.0.10.10/24 brd 10.0.10.255 scope global eth0
    inet6 fe80::20c:29ff:feb2:b123/64 scope link 
       valid_lft forever preferred_lft forever

他のサーバーから接続する為には、クライアント側でも同じセグメントのIPエイリアスを設定する必要があるので注意。

他サーバーからもIPエイリアスで接続できる事を確認

[root@localhost ~]# ping 10.0.10.10

curlではアクセスできない、何でだろう。要調査