/etc/sysconfig/iptables
사용자 워크스테이션 IP를 추가 한 다음 iptables를 실행하려면 스크립트가 필요합니다 service iptables reload
. iptables에서 이 규칙을 제거하려면 동일한 유형의 스크립트가 필요합니다.
다른 포럼에서 아래 코드를 찾았습니다.
이것은 어느 정도 내가 해야 할 일이다. 여기에는 다음이 포함됩니다다음에 추가그리고제거하다옵션이지만 adduser
iptable 규칙을 반영해야 합니다(예
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를 약간 격리할 수 있습니다.
참고: 다음 두 가지 방법 중 하나로 이벤트 규칙을 편집할 수 있습니다.
-D, --delete 체인 규칙 사양 -D, --체인 규칙 번호 삭제 선택한 체인에서 하나 이상의 규칙을 제거합니다. 이 명령에는 두 가지 버전이 있습니다. 규칙은 숫자로 지정할 수 있습니다. 체인의 ber(첫 번째 규칙의 경우 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 ... esac
Christopher가 제안한 코드와 같이 테스트 단계를 완료한 후 유용할 수 있는 일부 기능을 포함하는 보다 깔끔한 구성을 사용하는 것이 더 깔끔할 수 있습니다. 스크립트가 루트에 의해 실행되는지 확인하는 것부터 대화형 셸에서 실행되어 메시지를 리디렉션할 위치를 결정하는 것부터 현재 날짜 정의까지... 먼저 필요한 것을 확인하고 모두 추가하세요.임의로 선택할 수 있는단계별로.
고쳐 쓰다
당신은 그것으로부터 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 ...