특정 조건에서 특정 IP 주소를 금지하는 스크립트를 작성하려고 하는데, 다시 시작할 수 있도록 매 자정마다 이러한 차단을 "지우기" 위한 방법이 필요합니다. 차단 부분을 성공적으로 생성했습니다.
나는 지금 열심히 일하고 있어요모든 INPUT DROP 규칙을 즉시 삭제합니다., 그러나 다음 명령은 "잘못된 규칙" 오류를 반환합니다.
iptables -D INPUT -j DROP
답변1
문제가 전혀 존재하지 않도록 문제를 해결하는 방법은 다음과 같습니다. 필터/입력에 삭제 규칙을 추가하는 대신:
iptables -A INPUT -s 192.0.2.2 -j DROP
iptables -A INPUT -s 198.51.100.10 -i eth0 -j DROP
...
이러한 삭제 규칙을 관리하는 데 도움이 되는 전용 사용자 체인을 만듭니다. 다음을 한 번 수행하십시오.
iptables -N onlydrops
iptables -A INPUT -j onlydrops
그런 다음 필요할 때:
iptables -A onlydrops -s 192.0.2.2 -j DROP
iptables -A onlydrops -s 198.51.100.10 -i eth0 -j DROP
...
이 작업이 완료되면 INPUT의 나머지 규칙 세트에 영향을 주지 않고 단일 명령으로 모든 사용자 체인 콘텐츠를 새로 고칠 수 있습니다. 자정에 다음을 실행할 수 있습니다.
iptables -F onlydrops
늘 그렇듯이 순서가 중요합니다. 위의 내용은 사용 사례 및 기존 규칙을 기반으로 한 사용자 정의의 예일 뿐입니다.
답변2
iptables에 대해 제가 이해한 바에 따르면 "-D" 명령을 한 번에 호출하여 규칙 그룹(예: 모든 DROP 규칙)을 제거할 수는 없습니다.
플러시(-F)를 사용하여 체인의 모든 규칙을 삭제할 수 있습니다.
삭제(-D)를 사용하여 체인에서 개별 규칙을 제거할 수 있습니다.
다음 질문과 대답은 규칙 항목이 동일한 경우에도 이것이 문제가 된다는 것을 보여줍니다.
https://stackoverflow.com/questions/25055121/can-i-remove-multiple-matching-rules-with-the-iptables-delete-command
iptabels의 매뉴얼 페이지에 다음과 같이 언급되어 있는 것 같습니다.
선택한 체인에서 하나 이상의 규칙을 제거합니다.
오해의 소지가 있습니다. 한 번의 호출로 여러 규칙을 제거할 수 있는 경우는 없습니다 iptables -D
. 그러나 이것이 가능하다는 것을 모르는 상황이 있을 수도 있습니다.
업데이트: DNS가 "-D" 매개변수를 통해 여러 규칙을 제거할 수 있다는 AB의 설명을 참조하세요. 이는 DNS 이름이 여러 IP로 확인되는 상황입니다.
답변3
iptables 규칙 정의에 개행 문자가 없으면 다음을 수행할 수 있어야 합니다.
iptables-save -t filter | grep -vxe '-A INPUT .*-j DROP' | iptables-restore
-A INPUT
출력에서 시작하고 끝나는 규칙을 제거합니다 .-j DROP
iptables-save
1 하지만 이렇게 해도 출력을 iptables-restore
처리할 수 없다는 사실을 발견했는데 iptables-save
, 이는 버그라고 생각합니다.