GNU/Linux >> Linux の 問題 >  >> Debian

IPTABLES/Netfilterファイアウォールを使用したUbuntu/DebianベースのVPSの保護

次の記事では、ファイアウォールを使用してUbuntuまたはDebianベースの仮想サーバーを保護および保護する方法を紹介します。 iptablesと呼ばれるアプリケーション。

iptablesとは何ですか?

これは、システム管理者がLinuxカーネルファイアウォール(さまざまなNetfilterモジュールとして実装)によって提供されるテーブルを構成できるようにするユーザースペースアプリケーションプログラムです。 )およびそれが格納するチェーンとルール。

侵入の試行回数を抑え、仮想サーバーで開いているポートをフィルタリングするには、ファイアウォールを適切に構成する必要があります。 。

サーバーのファイアウォールルールの管理を容易にするために、ファイアウォールルールの管理に役立つ簡単なシェルスクリプトを提供します。基本的に、ファイアウォールルールを変更する必要があるときはいつでも、このスクリプトを使用して目的のルールを追加/削除します。

ファイアウォールルールの設定

ルールをスクリプトでラップする前に、ファイアウォールの設計とどのルールが適用されるかを理解できるように、ルールをセクションに分割しましょう。

フラッシュの古いルール

ファイアウォールルールは、次のコマンドを使用してフラッシュできます。

## iptables --flush
## iptables --delete-chain
## iptables --table nat --flush
## iptables --table nat --delete-chain

サービスポートを決定する

適切なルールを設定できるように、公開しているサービスを知る必要があります。どのサービスがどのポートでリッスンしているかを確認する1つの方法は、netstatを使用することです。 またはss 次のようなコマンド:

## netstat -tunlp

or

## ss -tunlp

たとえば、Ubuntu 12.04 LTS仮想サーバーの1つを使用しており、次はnetstatの出力です。 コマンド:

## netstat -tunlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      296/mysqld
tcp        0      0 0.0.0.0:587             0.0.0.0:*               LISTEN      449/sendmail: MTA:
tcp        0      0 0.0.0.0:110             0.0.0.0:*               LISTEN      261/dovecot
tcp        0      0 0.0.0.0:143             0.0.0.0:*               LISTEN      261/dovecot
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      590/apache2
tcp        0      0 209.135.140.77:53       0.0.0.0:*               LISTEN      353/named
tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN      353/named
tcp        0      0 0.0.0.0:21              0.0.0.0:*               LISTEN      173/vsftpd
tcp        0      0 0.0.0.0:5622            0.0.0.0:*               LISTEN      630/sshd
tcp        0      0 0.0.0.0:25              0.0.0.0:*               LISTEN      449/sendmail: MTA:
tcp        0      0 127.0.0.1:953           0.0.0.0:*               LISTEN      353/named
tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      590/apache2
tcp        0      0 0.0.0.0:993             0.0.0.0:*               LISTEN      261/dovecot
tcp        0      0 0.0.0.0:995             0.0.0.0:*               LISTEN      261/dovecot
udp        0      0 209.135.140.77:53       0.0.0.0:*                           353/named
udp        0      0 127.0.0.1:53            0.0.0.0:*                           353/named

つまり、次のポートが一般に公開されているということです。

  • 25(smtp)
  • 587(SMTP送信)
  • 110(pop3)
  • 143(imap)
  • 993(imap ssl)
  • 995(pop3 ssl)
  • 80(http)
  • 443(https)
  • 53(dns)
  • 21(ftp)
  • 5622(ssh)

デフォルトポリシーの設定

これで、ファイアウォールのポリシーを DROPに設定できます。 入力のすべて および転送 チェーンし、出力でトラフィックを許可します チェーン。

デフォルトのテーブルfilter 3つの組み込みチェーンが含まれています:

  1. マシン自体にアドレス指定されたインバウンドトラフィックがINPUTチェーンにヒットします。
  2. ローカルで生成されたアウトバウンドトラフィックがOUTPUTチェーンにヒットします。
  3. ローカルに配信されるべきではないルーティングされたトラフィックはFORWARDチェーンにヒットします。

man 8 iptablesを確認してください 詳細については

デフォルトのポリシーは、次のコマンドを使用して適用できます。

## iptables -P INPUT DROP # <- do not run this over ssh as it will lock you out
## iptables -P FORWARD DROP
## iptables -P OUTPUT ACCEPT

ファイアウォールルールの設定

次に行うことは、サービスのファイアウォールルールを実際に設定することです。 INPUTチェーンが削除されているため、パブリックポートでリッスンしているサービスをホワイトリストに登録する必要があります。

まず、loopback interfacesを無料で使用できるようにすることです。 、すべてのTCPセッションがSYNで始まることを確認し、確立された関連パケットを許可するには:

## iptables -A INPUT -i lo -j ACCEPT
## iptables -A OUTPUT -o lo -j ACCEPT
## iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
## iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

次に、次のようなファイアウォールルールを使用してサービスポートを開きます。

### SSH
## iptables -A INPUT -p tcp --dport 5622  -m state --state NEW -j ACCEPT

### HTTP
## iptables -A INPUT -p tcp --dport 80  -m state --state NEW -j ACCEPT

### SMTP
## iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 25 -j ACCEPT

等々。すべてのサービスがホワイトリストに登録されたら、ICMPパケットを許可し、INPUTチェーン内の他のすべてをログに記録してドロップすることをお勧めします。

## iptables -A INPUT -p ICMP --icmp-type 8 -j ACCEPT
## iptables -A INPUT -j LOG
## iptables -A INPUT -j DROP

ファイアウォールルールの保存/復元

ファイアウォールルールはデフォルトでは永続的ではありません。つまり、たとえば仮想サーバーを再起動すると、ファイアウォールルールは失われます。現在のファイアウォールを/etc/fwall.rulesに保存するには 次のようなものを使用します:

## iptables-save > /etc/fwall.rules

保存したルールを復元するには、次のようなものを使用します。

## iptables-restore -c /etc/fwall.rules

システムの起動時にルールを自動的に復元するには、iptables-persistentという名前のパッケージを使用する必要があります。 または、/etc/network/if-pre-up.dにスクリプトを作成することもできます。 /etc/fwall.rulesに保存されているルールをロードします 、例:

## vim /etc/network/if-pre-up.d/iptables

#!/bin/bash
test -e /etc/fwall.rules && iptables-restore -c /etc/fwall.rules

## chmod +x /etc/network/if-pre-up.d/iptables

ファイアウォールスクリプト

スクリプトを/usr/local/bin/fwall-rulesに保存します 実行可能にする

#!/bin/bash

IPTABLES=/sbin/iptables

echo " * flushing old rules"
${IPTABLES} --flush
${IPTABLES} --delete-chain
${IPTABLES} --table nat --flush
${IPTABLES} --table nat --delete-chain

echo " * setting default policies"
${IPTABLES} -P INPUT DROP
${IPTABLES} -P FORWARD DROP
${IPTABLES} -P OUTPUT ACCEPT

echo " * allowing loopback devices"
${IPTABLES} -A INPUT -i lo -j ACCEPT
${IPTABLES} -A OUTPUT -o lo -j ACCEPT

${IPTABLES} -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
${IPTABLES} -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

## BLOCK ABUSING IPs HERE ##
#echo " * BLACKLIST"
#${IPTABLES} -A INPUT -s _ABUSIVE_IP_ -j DROP
#${IPTABLES} -A INPUT -s _ABUSIVE_IP2_ -j DROP

echo " * allowing ssh on port 5622"
${IPTABLES} -A INPUT -p tcp --dport 5622  -m state --state NEW -j ACCEPT

echo " * allowing ftp on port 21"
${IPTABLES} -A INPUT -p tcp --dport 21  -m state --state NEW -j ACCEPT

echo " * allowing dns on port 53 udp"
${IPTABLES} -A INPUT -p udp -m udp --dport 53 -j ACCEPT

echo " * allowing dns on port 53 tcp"
${IPTABLES} -A INPUT -p tcp -m tcp --dport 53 -j ACCEPT

echo " * allowing http on port 80"
${IPTABLES} -A INPUT -p tcp --dport 80  -m state --state NEW -j ACCEPT

echo " * allowing https on port 443"
${IPTABLES} -A INPUT -p tcp --dport 443 -m state --state NEW -j ACCEPT

echo " * allowing smtp on port 25"
${IPTABLES} -A INPUT -p tcp -m state --state NEW -m tcp --dport 25 -j ACCEPT

echo " * allowing submission on port 587"
${IPTABLES} -A INPUT -p tcp -m state --state NEW -m tcp --dport 587 -j ACCEPT

echo " * allowing imaps on port 993"
${IPTABLES} -A INPUT -p tcp -m state --state NEW -m tcp --dport 993 -j ACCEPT

echo " * allowing pop3s on port 995"
${IPTABLES} -A INPUT -p tcp -m state --state NEW -m tcp --dport 995 -j ACCEPT

echo " * allowing imap on port 143"
${IPTABLES} -A INPUT -p tcp -m state --state NEW -m tcp --dport 143 -j ACCEPT

echo " * allowing pop3 on port 110"
${IPTABLES} -A INPUT -p tcp -m state --state NEW -m tcp --dport 110 -j ACCEPT

echo " * allowing ping responses"
${IPTABLES} -A INPUT -p ICMP --icmp-type 8 -j ACCEPT

# DROP everything else and Log it
${IPTABLES} -A INPUT -j LOG
${IPTABLES} -A INPUT -j DROP

#
# Save settings
#
echo " * SAVING RULES"

if [[ -d /etc/network/if-pre-up.d ]]; then
    if [[ ! -f /etc/network/if-pre-up.d/iptables ]]; then
        echo -e "#!/bin/bash" > /etc/network/if-pre-up.d/iptables
        echo -e "test -e /etc/iptables.rules && iptables-restore -c /etc/iptables.rules" >> /etc/network/if-pre-up.d/iptables
        chmod +x /etc/network/if-pre-up.d/iptables
    fi
fi

iptables-save > /etc/fwall.rules
iptables-restore -c /etc/fwall.rules
## chmod +x /usr/local/bin/fwall-rules

スクリプトで準備したルールをアクティブにするには、実行するだけです

## fwall-rules

コマンドラインから。ルールを追加または削除するには、スクリプトを開き、目的のルールを追加または削除し、保存して再度実行する必要があります。例:

## fwall-rules
 * flushing old rules
 * setting default policies
 * allowing loopback devices
 * allowing ssh on port 5622
 * allowing ftp on port 21
 * allowing dns on port 53 udp
 * allowing dns on port 53 tcp
 * allowing http on port 80
 * allowing https on port 443
 * allowing smtp on port 25
 * allowing submission on port 587
 * allowing imaps on port 993
 * allowing pop3s on port 995
 * allowing imap on port 143
 * allowing pop3 on port 110
 * allowing ping responses
 * SAVING RULES

もちろん、Linux VPSホスティングサービスのいずれかを使用している場合は、これを行う必要はありません。その場合は、専門のLinux管理者に依頼するだけで済みます。 24時間年中無休でご利用いただけます。リクエストはすぐに処理されます。

PS。 この投稿が気に入った場合は、左側のボタンを使用してソーシャルネットワーク上の友達と共有するか、下に返信を残してください。ありがとう。


Debian
  1. iptablesファイアウォールルールをDebian/Ubuntuで永続化する方法

  2. Debian – Debianで2つのディスプレイを使用していますか?

  3. CentOS6VPSでZendOptimizerを使用してPHPベースのWebサイトを高速化する

  1. Debian/UbuntuでUFWファイアウォールを使用する例

  2. スクリプト:Debian /UbuntuVPSにWordPressをインストールする

  3. Debian7VPSにMODXをインストールする

  1. UbuntuとDebianへのDockerのインストールと使用

  2. UbuntuVPSにSSHGuardをインストールする方法

  3. DenyHostsとLogwatchを使用してDebianVPSのセキュリティを向上させる方法