CentOSでiptables用スクリプト作成してログも出力する。
iptables設定用スクリプトを作成し、iptablesのログも出力するようにする。
環境
CentOS6
手順
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でユーザー作成とパスワード設定
今更だけど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設定を行う
環境
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追加したい仮想マシンの設定を開く。
元のネットワークアダプタの設定は「ブリッジ(自動)」。
追加をクリック
ネットワークアダプタを選択し「次へ」
ネットワーク接続でブリッジを選択し完了。
こんな感じになる。
新しいネットワークインターフェイス「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を設定する
現在の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ではアクセスできない、何でだろう。要調査