/etc/sysconfig/iptablesの設定は次のとおりです。
#start of my iptables
# Generated by iptables-save v1.2.11 on Wed May 27 00:31:22 2015
*mangle
:PREROUTING ACCEPT [130933577:29488298585]
:INPUT ACCEPT [130933577:29488298585]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [171790648:176814024859]
:POSTROUTING ACCEPT [171789023:176813945079]
COMMIT
# Completed on Wed May 27 00:31:22 2015
# Generated by iptables-save v1.2.11 on Wed May 27 00:31:22 2015
*filter
:INPUT ACCEPT [130907005:29486700773]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [171789023:176813945079]
-A INPUT -s 117.21.191.0/255.255.255.0 -j DROP
-A INPUT -s 106.0.210.78 -j DROP
-A INPUT -s 58.218.0.0/255.255.0.0 -j DROP
-A INPUT -s 117.3.215.251 -j DROP
-A INPUT -s 119.97.146.0/255.255.255.0 -j DROP
-A INPUT -s 203.185.69.45 -j DROP
-A INPUT -s 58.18.172.0/255.255.255.0 -j DROP
-A OUTPUT -p tcp -m tcp --dport 6660:6669 -j DROP
-A INPUT -p tcp -s my_static_ip --dport 22 -j ACCEPT
-A INPUT -p tcp -s my_static_ip --dport 21 -j ACCEPT
-A INPUT -p tcp -s my_static_ip --dport 110 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -p tcp ! -s my_static_ip -j DROP
COMMIT
# Completed on Wed May 27 00:31:22 2015
# Generated by iptables-save v1.2.11 on Wed May 27 00:31:22 2015
*nat
:PREROUTING ACCEPT [8063847:452240147]
:POSTROUTING ACCEPT [3324733:239203840]
:OUTPUT ACCEPT [3324733:239203840]
COMMIT
# Completed on Wed May 27 00:31:22 2015
# end of my iptables
my_static_ipは、Linuxサーバーへの接続に使用するIPアドレスです(例:100.10.10.10)。
デフォルトでは、ssh、ftp、popなどにアクセスしようとする悪意のあるIPとボットが多いので、ssh、ftpを使用して電子メールを送信して送信するために、私のIPの1つだけが私のサーバーに接続することを許可したいと思います。私のサーバーの誰もがHTTPとSSLを使用できる必要があります。
上記の設定を使用すると、電子メールを受信または送信できないことを除いて、すべてが正常です。何が間違っているのか教えてもらえますか?
助けてくれてありがとう。
答え1
電子メール送信は通常、ポート25(SMTP)、465(SSL経由のSMTP)、および/または587(送信)を使用します。あなたの設定で見ることができる唯一の「Eメール」ポートは110(POP3)です。これは、お気に入りのメールクライアントから電子メールを読むためのクライアント - メールサーバープロトコルですが、サーバーから電子メールを受信または送信するためには使用されません。 。
サーバーに電子メールを受信するには外部から上記のポートを許可する必要があり、サーバーを介してクライアントからメールを送信できるようにするには、固定アドレスでこれらのポートを許可する必要があります。
答え2
まず、ベストプラクティスに関する一般的なコメントは次のとおりです。
より良いアプローチは、IP用の他のチェーンとリダイレクトフィルタを作成することです。
-A INPUT -p tcp -s my_static_ip -j MYIP
次に、他のすべてのフィルタをMYIP
チェーンに入れます。否定的な規定も必要ありません! -s my_static_ip
。 IPを別のチェーンにリダイレクトしたら、次の行から他のすべてを削除できます。
-A INPUT -p tcp -j DROP
sshguard
あるいは、1つのアドレスを除くすべてのアドレスへのアクセスを完全に制限することなく虐待をブロックする同様のフィルタも良い考えですssh
。
あなたが信頼するならばmy_static_ip
、あなたはそれを完全に渡すことができます。
電子メールの場合は、どのプロトコルを使用しているかを知る必要があります。ポート110が開いているが(暗号化されていないPOP)、SMTPおよび/またはIMAPが必要な場合があります。
これは次の説明につながります。とにかくすべての確立された接続(http(s)だけでなく)を受け入れても問題は発生しません。メールサーバーへの接続を開始する人(新しいメールの確認またはメールの送信)はあなたであるため、メールサーバーは自分自身に連絡することなく、要求したサービスのみを提供します。したがって、すべてのESTABLISHEDを許可しても大丈夫です。多くのアプリケーション(メールクライアントだけでなく)はさまざまなプロトコルを使用してコンテンツを取得し、すべての現在の構成を破壊します。ただ使用
-A INPUT -p tcp -m tcp -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
そして、セキュリティを損なうことなく、すべてのシナリオに対処できます。新しく着信接続は切断されますが、ユーザー側からのトラフィックは通過を許可されます。
編集する:
私の提案ですが、テストしませんでした。
*filter
:INPUT DROP [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:TCP - [0:0]
:UDP - [0:0]
:MYIP - [0:0]
##:sshguard - [0:0]
#accept established connections immediately
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
#drop all invalid packets
-A INPUT -m conntrack --ctstate INVALID -j DROP
#accept localhost (web interfaces and such)
-A INPUT -i lo -j ACCEPT
#pings and such
-A INPUT -p icmp -j ACCEPT
#special treatment of your ip
#whatever MYIP chain doesn't accept is still subjected to all the following
#rules - because of the dash in the :MYIP - line above.
#if you really trust MYIP, you can just use ACCEPT
-A INPUT -s my_static_ip -j MYIP
#split into individual chains for TCP and UDP packets, handle them separately
#in case you want to add specific rules for UDP and TCP things (like the http(s) acceptance below)
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j TCP
-A INPUT -p udp -m conntrack --ctstate NEW -j UDP
#reasonable defaults for dropping things
-A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable
-A INPUT -p tcp -j REJECT --reject-with tcp-reset
-A INPUT -j REJECT --reject-with icmp-proto-unreachable
#if you have a web server, allow http(s):
-A TCP -p tcp -m tcp --dport 80 -j ACCEPT
-A TCP -p tcp -m tcp --dport 443 -j ACCEPT
#dropping these outbound ports?
-A OUTPUT -p tcp -m tcp --dport 6660:6669 -j DROP
#it's nice to let DNS through
-A UDP -p udp -m udp --dport 53 -j ACCEPT
#what to accept in your ip chain
#you don't even need mail ports here, because their requests don't come from outside
-A MYIP -p tcp --dport 22 -j ACCEPT
-A MYIP -p tcp --dport 21 -j ACCEPT
#alternative: install sshguard and uncomment these lines (and the chain definition in the header)
##-A TCP -p tcp -m tcp --dport 22 -j sshguard
##-A TCP -p tcp -m tcp --dport 22 -j ACCEPT
COMMIT