Ubuntu 16.04でのIPTablesの簡単な設定と例

前書き

iptablesLinuxカーネルの統合ファイアウォールを構成するために使用される強力なツールです。ほとんどのUbuntuディストリビューションにプリインストールされていますが、カスタマイズされたUbuntuバージョンを使用している場合、またはコンテナ内で実行している場合は、手動でインストールする必要があります。

sudo apt-get install iptables iptables-persistent

インストール後、現在のルールを保存するかどうかを尋ねられた場合、後で削除または新しいルールを作成するため、現時点では問題ありません。

チップ

netcat(サーバーとは別のコンピューターで)コマンドを使用して、どのポートが開いているか閉じているかをテストできます。

nc -z -w5 -v SERVER_IP PORT
  • nc netcatコマンドです。
  • -z ペイロードなしでパケットを送信するだけです。
  • -w5 応答を最大5秒待ちます。
  • -v 冗長モード。
  • SERVER_IPサーバーのアドレスに置き換えます。
  • PORT開いているかどうかをテストするポートに置き換えます(例:)22

サーバーでnetstatコマンドを使用して、現在接続を待機しているポートを確認できます。

sudo netstat -tulpn

注:netstatは、操作したいポートを見つけるのに便利ですが、サーバーに現在インストールされているアプリケーションとリッスンしているポートを知っておく必要がありますnetstat出力で見つけたすべてのポートを許可する必要はありません

構文

sudo iptables -A INPUT -p tcp -m tcp --dport 22 --m geoip --src-cc PE -j ACCEPT
  • -A INPUTINPUTチェーンにルールを追加します。チェーンはルールのグループです。このガイドで最もよく使用されるのはINPUTOUTPUTPREROUTINGです。
  • -p tcptcpこのルールが適用されるプロトコルとして設定します。またはudp、などの他のプロトコルを使用することもできます。icmpall
  • -m tcptcpモジュールを使用します。iptablesモジュールを介して追加機能をサポートします。その一部はすでにプリインストールされてiptablesおり、その他はgeoipモジュールなどです。
  • --dport 22で始まるコマンド--は、以前に使用されたモジュールの追加オプションを示します。この場合、tcpモジュールにポートにのみ適用するように指示します22
  • -m geoipgeoipモジュールを使用します。国ごとにパケットを制限します(ステップ5で詳細)。
  • --src-cc PEgeoip着信パケットをペルーからのパケットに制限するようにモジュールに指示します。その他の国コードについてISO 3166 country codesは、インターネットで検索してください。
  • -j ACCEPT-j引数が伝えiptablesたパケットが、前の引数で指定された制約と一致した場合にどうしますか。この場合、ACCEPTそれらのパケット、その他のオプションはREJECTDROPなります。iptables jump targetsインターネットで検索すると、さらに多くのオプションを見つけることができます。

1.基本

すべてのルールをリストします。

sudo iptables -L

現在使用されているルールの作成に使用されたすべてのコマンドをリストします。ルールの編集または削除に役立ちます。

sudo iptables -S

特定のルールを削除するには、からルールを選択しsudo iptables -Sて交換-Aして-D

# -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT

sudo iptables -D INPUT -p tcp -m tcp --dport 22 -j ACCEPT

INPUTチェーン内のすべての番号付きルールをリストします。

sudo iptables -L INPUT --line-numbers

番号付きルールを削除します。

sudo iptables -D INPUT 2

すべてのルールをクリアします。

sudo iptables -F

警告:SSHで接続すると、接続が失われる可能性があります

OUTPUTチェーン内のルールのみをクリアします。

sudo iptables -F OUTPUT

2.初期ルールを作成する

許可SSHeth0インタフェース

sudo iptables -A INPUT -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT
  • -i eth0 特定のインターフェイスにルールを適用して、任意のインターフェイスからこのコマンドを削除できるようにします。

着信パケットを特定のIP(つまり10.0.3.1/32)に制限します。

sudo iptables -A INPUT -i eth0 -s 10.0.3.1/32 -p tcp -m tcp --dport 22 -j ACCEPT
  • -s 10.0.3.1/32 接続を許可するIP /サブネットを指定します。

デフォルトのチェーンルールを設定します。

警告:リモートサーバーで作業する場合は、続行する前に正しいSSHルールを適用していることを確認してください

sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP 
sudo iptables -P OUTPUT ACCEPT 
  • -P INPUT DROP すべての着信パケットを拒否します(つまり、Apache、SQLなどの実行中のサーバーに誰も接続できなくなります)。
  • -P FORWARD DROP 転送されたすべてのパケットを拒否します(つまり、システムをルーターとして使用している場合)。
  • -P OUTPUT ACCEPTすべての発信パケットを許可します(つまり、HTTPリクエストを実行するとき)。

ループバックインターフェイス上のすべてのトラフィックを許可します(推奨)。

sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A OUTPUT -o lo -j ACCEPT

3.ルールを永続化する

現在のiptablesルールを保存します。

sudo netfilter-persistent save
sudo netfilter-persistent reload

コンテナー内で実行している場合、netfilter-persistentコマンドは機能しない可能性が高いため、iptables-persistentパッケージを再構成する必要があります。

sudo dpkg-reconfigure iptables-persistent

4.発信接続を許可する

DNSクエリを許可します。

sudo iptables -A OUTPUT -p tcp --dport 53 -m state --state NEW -j ACCEPT
sudo iptables -A OUTPUT -p udp --dport 53 -m state --state NEW -j ACCEPT

stateモジュールを使用して、パケットの送信RELATEDESTABLISHED送信を許可します。

sudo iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

必要なポートを許可します。この場合、HTTPポート。

sudo iptables -A OUTPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT

使用する可能性のあるその他のポート。

  • FTP:ポート21のTCP
  • HTTPS:ポート443のTCP
  • DHCP:ポート67のudp
  • NTP:ポート123のudp

注:許可するapt-get場合は、FTPおよびを許可する必要がある場合がありHTTPSます。

返されたトラフィックをRELATED、すでにESTABLISHED接続されている場合にのみ許可します(場合によっては双方向通信が必要になるため推奨されます)。

sudo iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
その他の便利なルール

外部からのping要求を許可します。

sudo iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
sudo iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT

上のトラフィックを転送eth0ポート220010.0.3.21:22(あなたは、コンテナ内で実行されているSSHサーバーを公開する場合に便利)。

sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 2200 -j DNAT --to-destination 10.0.3.21:22

SSHを使用してサーバーに正常にログインすると、永続的な接続が作成されます(つまり、1時間以上接続しても新しい接続はありません)。失敗して再度ログインしようとすると、新しい接続が作成されます。これは、1時間あたりの新しい接続を制限することにより、継続的なSSHログイン試行をブロックします。

sudo iptables -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --set
sudo iptables -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 3600 --hitcount 4 -j DROP

ポート上のすべての要求をポート443にリダイレクトします4430443なしでポートにバインドする場合に便利ですroot)。

sudo iptables -t nat -A PREROUTING -i ens3 -p tcp --dport 443 -j REDIRECT --to-port 4430
sudo iptables -A INPUT -p tcp -m tcp --dport 4430 -m geoip --src-cc PE -j ACCEPT
  • ens3 ネットワークインターフェース。
  • -m geoip 国ブロックモジュール(ステップ5を参照)。

警告:を使用しないでくださいlo。OSは、ループバックインターフェイスにリダイレクトされたすべてのパケットを破棄します

5.国全体を許可またはブロックする

5.1インストール xtables-addons

xtables-addonsさまざまな方法でモジュールをインストールできます。最適なインストール方法を自由に使用してください。

  • を使用してインストールしapt-getます。

    sudo apt-get install xtables-addons-common
    
  • を使用してインストールしmodule-assistantます。

    sudo apt-get install module-assistant xtables-addons-source
    sudo module-assistant --verbose --text-mode auto-install xtables-addons
    
  • ソースからインストールします。

    sudo apt-get install git bc libncurses5-dev libtext-csv-xs-perl autoconf automake libtool xutils-dev iptables-dev
    git clone git://git.code.sf.net/p/xtables-addons/xtables-addons
    cd xtables-addons
    ./autogen.sh
    ./configure
    make
    sudo make install
    

「国」データベースを構築します。

sudo apt-get install libtext-csv-xs-perl unzip
sudo mkdir /usr/share/xt_geoip
sudo /usr/lib/xtables-addons/xt_geoip_dl
sudo /usr/lib/xtables-addons/xt_geoip_build -D /usr/share/xt_geoip *.csv
sudo rm GeoIPCountryCSV.zip GeoIPCountryWhois.csv GeoIPv6.csv

システムを再起動します。

sudo reboot

後はxtables-addons正常にインストールされている、最初の再起動後、実行してdepmodそれ以外の国のブロッキングは、(これは初回のみ必要です)正常に動作しません。

sudo depmod 

でデータベースを毎月/etc/cron.monthly/geoip-updater更新するスクリプトを作成しますgeoip

#!/usr/bin/env bash
# this script is intended to run with sudo privileges

echo 'Removing old database---------------------------------------------------'
rm -rf /usr/share/xt_geoip/*
mkdir -p /usr/share/xt_geoip

echo 'Downloading country databases-------------------------------------------'
mkdir /tmp/geoip-updater
cd /tmp/geoip-updater
/usr/lib/xtables-addons/xt_geoip_dl

echo 'Building geoip database-------------------------------------------------'
/usr/lib/xtables-addons/xt_geoip_build -D /usr/share/xt_geoip *.csv

echo 'Removing temporary files------------------------------------------------'
cd /tmp
rm -rf /tmp/geoip-updater

確認し/etc/cron.monthly/geoip-updater、実行可能。

sudo chmod +x /etc/cron.monthly/geoip-updater

5.2ルールの例

_注:ルールiptables: No chain/target/match by that nameを適用しようとしたときにエラーが発生した場合はgeoipxtables-addons正しくインストールされていない可能性があります。別のインストール方法を試してください。

中国、香港、ロシア、韓国からのすべての着信パケットをブロックします。

sudo iptables -A INPUT -m geoip --src-cc CN,HK,RU,KR -j DROP

80上記の国を除くすべての場所からのポートでの着信パケットを許可します。

sudo iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT

ペルーからのens3ポートのインターフェースで22のみ着信パケットを許可します(たとえば、US米国からのパケットを受け入れる国コードを自由に選択してください)。

sudo iptables -A INPUT -i ens3 -p tcp -m tcp --dport 22 -m geoip --src-cc PE -j ACCEPT

443ペルーからのポートでのみ着信パケットを許可します。

sudo iptables -A INPUT -p tcp -m tcp --dport 443 -m geoip --src-cc PE -j ACCEPT


Leave a Comment

CentOS 7にApacheをインストールする方法

CentOS 7にApacheをインストールする方法

CentOS 7サーバーにApache 2.4をインストールする方法を説明します。安定したウェブサーバーを構築するための前提条件と手順を解説します。

FreeBSD 11.1にBlacklistdをインストールする方法

FreeBSD 11.1にBlacklistdをインストールする方法

FreeBSD 11.1におけるBlacklistdのインストール方法について詳しく解説します。この方法を通じて、強力なセキュリティ対策を実装できます。

Windows Serverのサーバーマネージャーを使用した複数サーバーの管理

Windows Serverのサーバーマネージャーを使用した複数サーバーの管理

サーバーマネージャーを使用して、Windows Serverの管理が向上します。セキュリティリスクを軽減し、効率的な管理を実現します。

CentOS 7にSeafileサーバーをインストールする方法

CentOS 7にSeafileサーバーをインストールする方法

CentOS 7にSeafileサーバーをインストールする方法。Seafile(コミュニティバージョン)は、ownCloudに似た無料のオープンソースファイル同期および共有ソリューションです。

DebianでSnortを設定する方法

DebianでSnortを設定する方法

Snortは無料のネットワーク侵入検知システムです。最新の方法で、SnortをDebianにインストールし、設定する手順を紹介します。ネットワークのセキュリティを強化しましょう。

CentOS 7にGraylogサーバーをインストールする方法

CentOS 7にGraylogサーバーをインストールする方法

CentOS 7にGraylogサーバーをインストールし、ログ管理を行う方法を学びます。

WindowsでhMailServerを使用してメールサーバーを構築する

WindowsでhMailServerを使用してメールサーバーを構築する

WindowsサーバーでWebサイトを実行している場合、電子メールも受信できるようにするためにhMailServerを使用する方法を解説します。

Ubuntu 19.04にFiveMサーバーをインストールする方法

Ubuntu 19.04にFiveMサーバーをインストールする方法

FiveMサーバーをUbuntu 19.04にインストールするための詳細なガイド。必要条件からインストール、起動、トラブルシューティングまで、すべてのステップを含みます。

WsgiDAVを使用してDebian 10にWebDAVをデプロイする

WsgiDAVを使用してDebian 10にWebDAVをデプロイする

Debian 10にWebDAVをデプロイする方法を学び、WsgiDAVとSSL証明書で安全な接続を実現しましょう。

ヘルスケア2021における人工知能の影響

ヘルスケア2021における人工知能の影響

ヘルスケアにおけるAIは、過去数十年から大きな飛躍を遂げました。したがって、ヘルスケアにおけるAIの未来は、日々成長を続けています。