Firewalld/iptables を使用して確立された接続をブロックする

Firewalld/iptables を使用して確立された接続をブロックする

私のサーバーでファイアウォールを実行しており、セキュリティを向上させるために(ファイアウォールを使用して)Fail2banを設定しようとしています。問題は、確立された接続を終了できないことです。

Firewalldには、いくつかのサービス(Sshなど)のみが追加されたデフォルト設定があります。

問題が何であるかがわかります。 iptables -L INPUTこれをください。

Chain INPUT (policy ACCEPT)
target     prot opt source               destination      
ACCEPT     all  --  anywhere             anywhere        ctstate RELATED,ESTABLISHED   
ACCEPT     all  --  anywhere             anywhere            
INPUT_direct  all  --  anywhere             anywhere            
INPUT_ZONES_SOURCE  all  --  anywhere             anywhere            
INPUT_ZONES  all  --  anywhere             anywhere            
ACCEPT     icmp --  anywhere             anywhere            
REJECT     all  --  anywhere             anywhere        reject-with icmp-host-prohibited

iptablesの私の理解によると、これは最初のルールなので、関連して確立された接続が何があっても許可されることを意味します(指定されたポートのみが開いている間に2番目のルールが存在する理由はわかりませんが、今は無視します)。 。

私が試したのは最初のルールを削除することでしたがiptables -D INPUT 1、これはネットワークもネットワークもまったくないシステムを残しました。だから私は再びルールを追加しましたが、最後のルールから2番目に追加しました。iptables -I INPUT 7 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

Chain INPUT (policy ACCEPT)
target     prot opt source               destination      
ACCEPT     all  --  anywhere             anywhere            
INPUT_direct  all  --  anywhere             anywhere            
INPUT_ZONES_SOURCE  all  --  anywhere             anywhere            
INPUT_ZONES  all  --  anywhere             anywhere            
ACCEPT     icmp --  anywhere             anywhere    
ACCEPT     all  --  anywhere             anywhere        ctstate RELATED,ESTABLISHED           
REJECT     all  --  anywhere             anywhere        reject-with icmp-host-prohibited

これはあなたが望む効果があるようです。これで、Fail2banエントリが作成されると、確立された接続が終了し、残りのネットワークが機能しているように見えます。

質問:これを保存するためにファイアウォールをどのように使用しますか?私はファイアウォールを恒久的に変更できることを知っており、andを介してfirewall-cmd --permanentより低いレベルの作業を実行できることを知っていますが、INPUTチェーンを深く操作する方法を見つけることができませんでした。--direct--xxx-rich-rule

編集する:私はこれを使って--passthroughINPUTチェーンを操作できることを発見しました。しかし、永久に作ろうとすると次のようになります。

firewall-cmd --direct --passthrough ipv4 -I INPUT 7 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
firewall-cmd --direct --passthrough ipv4 -D INPUT 1
systemctl restart firewalld

挿入は機能しますが、削除は機能しません。この後、以下がiptables -L INPUT生成されます。

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
ACCEPT     all  --  anywhere             anywhere            
INPUT_direct  all  --  anywhere             anywhere            
INPUT_ZONES_SOURCE  all  --  anywhere             anywhere            
INPUT_ZONES  all  --  anywhere             anywhere            
ACCEPT     icmp --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
REJECT     all  --  anywhere             anywhere             reject-with icmp-host-prohibited

編集する:

私はまだFail2banのファイアウォール作業をどのように機能させるかを見つけることができなかったので、現時点ではそれが可能だとは思わない。

代わりにFail2ban iptablesタスクを使用すると動作しますので、引き続き使用します。

ベストアンサー1

ファイアウォールがPREROUTINGへの要求をブロックしたいようです。壊す以前確認したテーブルフィルタールールを追加するテーブルです。

簡単な禁止

確立されたセッションをブロックするための簡単なオプションは、ソースルールを追加することです。減らすゾーン。

firewall-cmd --zone=drop --add-source=192.168.1.xx

PREROUTING_ZONES_SOURCE チェーンにソース IP が追加されます。壊すテーブル。

# iptables -L PREROUTING_ZONES_SOURCE -nv --line -t mangle
Chain PREROUTING_ZONES_SOURCE (1 references)
num   pkts bytes target     prot opt in     out     source               destination
1       23  1656 DROP       all  --  *      *       192.168.1.xx        0.0.0.0/0

PREROUTING_ZONES_SOURCE電話をかける事前ルーティングすべてのトラフィックを処理する前に処理するチェーン入力するリンクインフィルターまたは壊す

# iptables -L PREROUTING -nv --line -t mangle
Chain PREROUTING (policy ACCEPT 1809 packets, 90324 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1     227K   22M PREROUTING_direct  all  --  *      *       0.0.0.0/0            0.0.0.0/0
2     227K   22M PREROUTING_ZONES_SOURCE  all  --  *      *       0.0.0.0/0            0.0.0.0/0
3     226K   22M PREROUTING_ZONES  all  --  *      *       0.0.0.0/0            0.0.0.0/0

カスタム禁止ルール

より具体的なルールを追加する必要がある場合は、以下を使用してください。--直接--ルールを追加ルールの追加損傷/入力後で実行マングル/事前ルーティング。以下は、特定のIPに対してポート443をブロックする例です。

# firewall-cmd --direct --add-rule ipv4 mangle INPUT 0 -p tcp --dport 443 -s 192.168.1.xx -j DROP

形式は次のとおりです。

--direct --add-rule { ipv4 | ipv6 | eb } table chain priority args

この例では、次のようになります。

  • {IPv4 | IPv6エプ} ->IPv4:IPv4プロトコルの指定
  • テーブル - >壊す:パケットを受信した後、ルールを確認する前にすぐに実行してください。フィルターESTABLISHED 接続のパケットを許可するテーブルなどのテーブルです。
  • チェーン->入力する:このINPUTチェーンはPREROUTINGの後に確認されますが、このINPUTはPREROUTINGとは関係ありません。壊すテーブル。
  • 優先順位->0:ルール優先順位。ここで、0が最も高い優先順位です。
  • パラメータ->-p tcp --dport 443 -s 192.168.1.xx -j 削除:同じパラメータがiptablesに渡されます。

それでは、マングル/INPUT_direct良い:

# iptables -L INPUT_direct -nv --line -t mangle
Chain INPUT_direct (1 references)
num   pkts bytes target     prot opt in     out     source               destination
1       30  1888 DROP       tcp  --  *      *       192.168.1.181        0.0.0.0/0            tcp dpt:443

いくつかのメモ

最初の例は送信元 IP のすべてのパケットをブロックしますが、2 番目の例は PREROUTING ルールの後に実行されるため、INPUT に到達する前にパケットが変更された場合、またはパケットが FORWARD テーブルにルーティングされる場合、データパッケージは DROP ルールに到達しません。

以下は簡単なフローチャートです。Webフィルタ表面。 netfilter パケット処理プロセス 以下から抽出された画像http://www.iptables.info/en/struct-of-iptables.html

おすすめ記事