ということで、ルータを介して接続制限などをしていればよいですが、いきなりネットワークへ繋ぐと大変なので、ここでセキュリティの設定をしておきます。
大まかにはルータ・nft or iptables・ipsetの3つで3重にします。

tcp_wrapperはDeprecatedということで長らくあったんですが、いつの間にか削除されています。
といってもtcp_wrapperは制限できるアプリケーションが結構限定されているので、
以下のコマンドで何が制限することが出来るか確認しておくといいです。

# rpm -q --whatrequires libwrap.so.0

まずはルータでサーバマシンにアクセスされないようにしておきます。
これはセキュリティの設定をした後に、開放すると良いかも。

次にtcp_wrapperの設定をしておきます。
/etc/hosts.deny

all: all

/etc/hosts.allow

all: 127.0.0.1 sshd: 192.168.xx.0/255.255.255.0

そして次にiptablesの設定を行っておきます。
しかしiptablesもfirewalldやnftablesに置き換わっていくとのことなので、早めに移行しなきゃなんですよね。
設定変更が容易に行えるようにシェルスクリプトに記述してそれを実行する形式をとります。
うちで使ってるのは次のようなかんじです。
IPアドレスとかは適宜変更して使うといいです。
うちでは基本的に以下のポリシーで運用しています。

  1. Outputパケットは基本的に許可
  2. それ以外のパケットについては一部を除いて破棄
  3. Inputパケットは主要ポート以外は破棄
  4. Forwardパケットはルータとして利用しないので破棄
  5. Icmpパケットは1分間に10回応答したら以降は破棄
  6. 基本的にDropしたパケットはログをとる
  7. 確立されたコネクションに対してのInputは許可
  8. Synから始まらないコネクションは許可してるポートでも破棄
  9. チョンとか中国からの接続は拒否したいのでhttp://akionweb.com/myobjects/adl/apache/からCN.txt KR.txt等を毎日ダウンロードするスクリプトを作成し海外からの拒否を簡略化

akionwebさんが落ちてるっぽいので、
自作してみました。
arin.netなど5箇所から最新のファイルを持ってくるんですが、
それをIPアドレス/サブネットにするのが一部困難で、
若干その辺がおかしいですがとりあえず展開することが出来るようになったので、それを使って落としてきます。

もしこのスクリプトがほしい方が居たらコメントなりに残しておいてもらえると、公開するかもしれません。
PS: PHP5.3.0以上で大部分がハードコーティングされてるので
ある程度知識がない方じゃないと動かせないかもしれません。

シェルスクリプト

#!/bin/bash
ipt="/sbin/iptables"
eth=eth0
mynets="192.168.0.0/24"
#ポリシーの定義
$ipt -P INPUT DROP
$ipt -P OUTPUT ACCEPT
$ipt -P FORWARD ACCEPT
#ポリシーの初期化
$ipt -F
$ipt -t nat -F
$ipt -X LOG_FRAGMENT
$ipt -X LOG_PINGDEATH
$ipt -X LOG_DENYHOST
/bin/sh /etc/openvpn/openvpn-startup
$ipt -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$ipt -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
$ipt -A INPUT -i lo -j ACCEPT
$ipt -A INPUT -s $mynets -j ACCEPT
$ipt -A INPUT -i eth1 -j ACCEPT
$ipt -A INPUT -i tun0 -j ACCEPT
$ipt -A INPUT -p udp -m udp --dport 514 -s 192.168.0.1 -j ACCEPT
$ipt -A INPUT -p tcp -m tcp --dport 15091 -j ACCEPT
$ipt -N LOG_FRAGMENT $ipt -A LOG_FRAGMENT -j LOG --log-tcp-options --log-ip-options --log-prefix '[IPTABLES FRAGMENT] : '
$ipt -A LOG_FRAGMENT -j DROP
$ipt -A INPUT -f -j LOG_FRAGMENT
$ipt -N LOG_PINGDEATH $ipt -A LOG_PINGDEATH -p icmp --icmp-type echo-request -m limit --limit 1/m --limit-burst 10 -j ACCEPT
$ipt -A LOG_PINGDEATH -j LOG --log-tcp-options --log-ip-options --log-prefix '[IPTABLES PINGDEATH] : '
$ipt -A LOG_PINGDEATH -j DROP $ipt -A INPUT -p icmp --icmp-type echo-request -j LOG_PINGDEATH
$ipt -A INPUT -p icmp -s $mynets -j ACCEPT $ipt -A INPUT -d 255.255.255.255 -j DROP $ipt -A INPUT -d 224.0.0.1 -j DROP
#拒否
$ipt -N LOG_DENYHOST
$ipt -A LOG_DENYHOST -j LOG --log-tcp-options --log-ip-options --log-prefix '[IPTABLES DENY_HOST] : '
$ipt -A LOG_DENYHOST -j DROP
for i in `cat /etc/LOCAL/ip.txt`
do
$ipt -A INPUT -s $i -j LOG_DENYHOST
done
#いろいろな許可設定(全体)
# ftp-data
$ipt -A INPUT -p tcp -m tcp --dport 20 -j ACCEPT
# FTP
$ipt -A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
# SMTP
$ipt -A INPUT -p tcp -m tcp --dport 25 -j ACCEPT
# DNS
$ipt -A INPUT -p tcp -m tcp --dport 53 -j ACCEPT
$ipt -A INPUT -p udp -m udp --dport 53 -j ACCEPT
# HTTP
$ipt -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
# POP
$ipt -A INPUT -p tcp -m tcp --dport 110 -j ACCEPT
# IMAP
$ipt -A INPUT -p tcp -m tcp --dport 143 -j ACCEPT
# SSL
$ipt -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
# SMTPS
$ipt -A INPUT -p tcp -m tcp --dport 465 -j ACCEPT
# SMTP submission
$ipt -A INPUT -p tcp -m tcp --dport 587 -j ACCEPT
# IMAPS
$ipt -A INPUT -p tcp -m tcp --dport 993 -j ACCEPT
# POP3S
$ipt -A INPUT -p tcp -m tcp --dport 995 -j ACCEPT
# GIT
$ipt -A INPUT -p tcp -m tcp --dport 9418 -j ACCEPT
$ipt -A INPUT -j LOG --log-level debug --log-prefix "[IPTABLES INPUT] : " --log-tcp-options --log-ip-options
#基本的に全部シャットダウン
$ipt -P INPUT DROP
#Fedora16移行
/usr/libexec/iptables.init save
/bin/systemctl restart iptables.service
#Fedora15まで
/etc/init.d/iptables save
/etc/init.d/iptables restart

/etc/iptables/ip.txtを作成するシェルスクリプトの作成です。
上記で案内したURLのtxtファイルはApache用なので、iptablesで認識できるように修正します

#!/bin/bash
#拒否したい国をリストする
list="CN KR TW"
cd /etc/iptables/tmp/
rm -f *.txt
rm -f *.txt.1
for i in $list; do
wget http://akionweb.com/myobjects/adl/apache/$i.txt
done cat /etc/iptables/tmp/*.txt | grep -v '#' | grep -v '^$' |sed 's/deny from //g' > /tmp/ip.txt
cp /tmp/ip.txt /etc/iptalbes/ip.txt

これでとりあえずのセキュリティは保たれるとおもいます。

firewalldは結局バックエンドにnftables使ってるらしいので移行先はnftablesですかね。
一応以下のコマンドで既存のiptablesの設定をnftに食わせるためのコンバートをしてくれるようです。

iptables-restore-translate -f /etc/sysconfig/iptables > /etc/nftables/xxx.nft

ただ、ipset周りで設定したものは移行対象にならないようなので、別途設定しなおす必要がありそうです。

これもipsetのファイルを出力してnftに食わせることで対応可能なようですな。

それをどうやってiptablesのときと近づけるかはまた今度かな

ipset save > /tmp/ipset.save

ipset-translate restore < /tmp/ipset.save > /tmp/ipset.nft

ちなみに/tmp/ipset.nftで出力したファイルのadd set inet global NAME { type xxxxxx }の{}内にflags interval;がないと重複したアドレスがあるとエラーで取り込んでくれません。。。
例:192.168.0.0/16があるのに192.168.1.0/24があったり192.168.255.1/32があったりするとエラーになるっぽい。

コメントを追加

制限付き HTML

  • 使用できるHTMLタグ: <a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 行と段落は自動的に折り返されます。
  • ウェブページのアドレスとメールアドレスは自動的にリンクに変換されます。
CAPTCHA
半角で
この質問はあなたが人間の訪問者であるかどうかをテストし、自動化されたスパム送信を防ぐためのものです。
ももーい に投稿