/etc/sysconfig/iptablesにワークステーションIPを追加/削除し、service iptables reloadを実行します。

/etc/sysconfig/iptablesにワークステーションIPを追加/削除し、service iptables reloadを実行します。

/etc/sysconfig/iptablesユーザーワークステーションIPを追加してからiptablesを実行するにはスクリプトが必要ですservice iptables reload。 iptablesからこのルールを削除するには、同じタイプのスクリプトが必要です。

別のフォーラムで以下のコードを見つけました。
これはある程度私がしなければならないことです。これには以下が含まれます次へ追加そして削除するオプションですが、adduseriptableルールを反映する必要があります(例
iptables -I INPUT 1 -p tcp -s xxx.xxx.xx.xxx --dport 22 -m comment --**comment "testing for user1" -j ACCEPT:。

実行できるように、IPアドレス自体をパラメータとして渡す必要があります。
./script 155.154.15.00

RHEL 6.4バージョンを使用しています。
どんな意見でも大変感謝いたします。

#!/bin/bash

clear
  echo "########## MENU ############\n"
  options=("add_user" "delete_user" "exit")
  select opt in "${options[@]}"
  do
    case $opt in
    "add_user")
      clear
      while [ 1 ]
      do
        clear
        echo "1. Add user manually"
        echo "2. Add user via TXT file"
        read -p "Enter your choice" ch
        case $ch in 
          1)
            read -p "Enter user name : " useradd
            read -p "Enter user password:" passwd
            echo -e "Successfully added the user"
          ;;
          2)
          if [ $(id -u) -eq 0 ]; then
            for row in `more $1`
            do
              username=${row%:*}
              password=${row#*:}    
              egrep "^$username" /etc/passwd >/dev/null
              if [ $? -eq 0 ]; then
                echo "$username exists!"
                exit 1
              else
                pass=$(perl -e 'print crypt($ARGV[0], "password")' $password)
                useradd -m -p $pass $username
                [ $? -eq 0 ] && echo "User has been added to system!" || echo "Failed to add a user!"    
              fi
            done
          else
            echo "Only root may add a user to the system"
            exit 2
          fi    
        esac  
      done
    ;;
    "delete_user")
      read -p "Enter a User name to delete "UNAME
      passwd
      userdel $UNAME
      echo "User $UNAME has been deleted"            
    ;;
    "exit")
      break
    ;;
    esac
  done

答え1

私はこれに少し異なってアプローチします。私は特別な(最初は空の)チェーンにジャンプする静的iptables構成を維持します。

その後、cron操作でこれらの特殊チェーンを非同期に更新します。 IPアドレス/ホスト名のみを使用してセカンダリデータソースを繰り返し、N分ごとにチェーンを更新および更新できます(または古いルールを更新または削除しないことをお勧めします...)。

自動化された編集を絞り込むと、システムのiptablesを少し分離できます。

注:次の2つの方法のいずれかでイベントルールを編集できます。

-D, --delete チェーンルール仕様
 -D, --チェーンルール番号の削除
              選択したチェーンから1つ以上のルールを削除します。このコマンドには2つのバージョンがあります。ルールは数字で指定できます。
              チェーンのバー(最初のルールの場合は1から始まる)または一致させるルール。

ルール番号を使用している場合は、ルールをダンプし、その番号に基づいてルール番号を選択します。ノート!これには独自の競争条件があります!ルール仕様を指定する場合は、ルールに含まれるパラメータと同じパラメータをすべて指定するだけで、ルールが削除対象として選択されます。

答え2

iptablesルールセットから個々のルールを追加または削除するためのまったく同様のツールはありません。

iptables-save個人的には、現在のルールセットを一時ファイルに送信することを使用します。その後、awkまたは同じツールを使用して変更することができますgrep(たとえば、grep -v "$WORKSTATION_IP"すでに存在する潜在的な重複エントリを削除してからcat "$NEWRULE" >> $TMPFILE新しいルールを追加するため)。iptables-restore更新されたルールセットをプッシュします。

service iptables restart回復後に必要かどうかはわかりません。そうしないことを願っていますが、マニュアルページがはっきりしないので実験してみましょう。

目的の機能をシミュレートする関数を作成できます。たぶん、次のようなものがあります。

function add_iptables_rule {
    cat <(iptables-save) <(echo "$@") | iptables-restore
}

function del_iptables_rule {
    iptables-save | grep -v "$@" | iptables-restore
}

ただし、このプロセスを自動化することは非常に危険です。徹底的にテストするには非常に注意する必要があります。このように始めるから、iptables-save > /etc/iptables.backupいつでも初めて戻れるように。

@rrauenzaが別の回答で提案したように、別のルールチェーンを使用して自動化範囲を制限することによってこのアプローチを強化するというアイデアが気に入ります。間違いを減らしてください。

引用する
http://linux.die.net/man/8/iptables-save
http://linux.die.net/man/8/iptables-restore

答え3

ここコンテナ簡単な方法で...必要なコードを入力するだけです。

#!/bin/bash 
#
# ----------------------------------------------------------------------- #
#   Here below it prints the help function                                #
#   Each time in printf                                                   #
#     (-) "\n" is a newline                                               #
#     (-) "\t" is tab (some spaces)                                       #
#   $0 is the the name that you give to the script                        #
#   $1 is the 1st parameter passed to script or function. In this case:   #
#     (+) Out of any function $1 is the 1st parameter given to the script #
#     (+) Inside a function $1 is the 1st given to the function           #
#                                                                         #
# ------------------------- # ------------------------------------------- #
                            #                                             #
Print_Help(){               #  Here it starts the function Print_Help()   #
    printf  "\n$1\n\n"      #  Here you are inside a function and $1 is   #
    printf  "SYNOPSIS \n"   #   the 1st parameter given to the function   #
                            #------------------------#                    #
    printf  "\t $0 [OPTION] [IP]\n\n"                # ------------------ #
    printf  "\t $0 -a 127.0.0.1   # to add     \n"   # <- hash(#) chars   #
    printf  "\t $0 -r 127.0.0.1   # to remove\n\n"   # <-   out of the    #
}                           #     ^                  #    "double quote"  #
                            # --- | ---------------- #  ----------------- #
                            #     +-- those hash(#) chars are inside the   #
                            #         "double quote" and they will be      #
                            #          printed as normal letters.          #
                            # ------------------------------------------- # 

Add_Function(){
  echo $IP #  Put here the code to add rule
  #  iptables -I INPUT 1 -p tcp -s $IP --dport 22 -m comment --**comment "testing for user1" -j ACCEPT.
  service iptables reload  # you need to run as root (or with sudo) 
  exit 0
}

Remove_Function(){
  echo $IP  #  Put here the code to remove rule
  service iptables reload  # you need to run as root (or with sudo)
  exit 0 
}

if [[  $# != 2 ]] ;then #if the number of parameter is not 2
   #  Here we call the help function with 
   #+ "a single parameter in double quote" in this case:
   #+ "Error wrong number of parameters for $0"  
    Print_Help "Error wrong number of parameters for $0"
    exit 1
fi

IP=$2
if [[ "$1" == "-a" ]] ; then  Add_Function  ; fi
if [[ "$1" == "-r" ]] ; then  Remove_Function  ; fi
# Here below we call again the help function with 
# "another single parameter in double quote" in this case
# "Error Unknown option $1 for $0 "  
# In the "main" $1 is the 1st parameter that you pass to the script
 Print_Help "Error Unknown option $1 for $0 "  
exit 2    

これはシェルスクリプトとオプションに慣れるための一例です。sudo /bin/bash script.sh -a nnn.mmm.ooo.pppコマンドラインを使用して実行できます-r。ここで、nnn.mmm.ooo.pppは使用したいIPです。権限を変更する場合(たとえばchmod u+x script.sh)を使用できますsudo ./script.sh -a nnn.mmm.ooo.ppp

必要なコードで関数を入力する必要があります。
他のオプションに関連する追加機能を追加できます。この場合、case ... esacChristopherが提案したコードなど、テスト手順を完了した後に役立つ可能性のある機能を含む、よりきちんとした設定を使用する方がきちんとできます。スクリプトがルートによって実行されていることを確認することからインタラクティブシェルで実行され、メッセージをリダイレクトする場所を決定することから現在の日付定義まで...まず、必要なものを確認してすべてを追加します。任意に選択できる段階的に。

修正する
あなたはそれからman bash多くの興味深い情報を得ることができます。
コメントセクションで:


非対話型シェルまたはshopt組み込みコマンドのInteractive_commentsオプションが有効になっている対話型シェル(以下のSHELL BUILTINコマンドを参照)、#で始まる単語は、その単語と行の残りのすべての文字を無視します。 Interactive_commentsオプションが有効になっていない対話型シェルはコメントを受け入れません。 Interactive_commentsオプションデフォルトで有効インタラクティブシェルから

見積もりセクションで:

...
$ 'string'形式の単語は特別に扱われます。ワードは、ANSI C規格で指定されているように置き換えられたバックスラッシュエスケープ文字を使用して文字列に展開されます。バックスラッシュエスケープシーケンスがある場合は、次のようにデコードされます。

         ...
         **\n     new line**  
         **\t     horizontal tab**  
         \v     vertical tab  
         \\     backslash  
         \'     single quote  
         \"     double quote  
         ...

関連情報