포트 8006 및 8007에서 각각 특수 HTTP 및 HTTPS 서비스를 호스팅하고 있습니다. iptables를 사용하여 서버를 “활성화”합니다. 즉, 들어오는 HTTP 및 HTTPS 포트를 라우팅하려면 :
iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 8006 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 8007 -j ACCEPT
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8006
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 443 -j REDIRECT --to-port 8007
iptables -A OUTPUT -t nat -d 127.0.0.1 -p tcp --dport 80 -j REDIRECT --to-ports 8006
iptables -A OUTPUT -t nat -d 127.0.0.1 -p tcp --dport 443 -j REDIRECT --to-ports 8007
이것은 매력처럼 작동합니다. 그러나 서버를 다시 비활성화하는 다른 스크립트를 만들고 싶습니다. 즉, iptables를 위의 행을 실행하기 전의 상태로 복원하십시오. 그러나이 규칙을 제거하는 구문을 파악하는 데 어려움을 겪고 있습니다. 작동하는 유일한 것은 완전한 플러시입니다.
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
그러나 이것은 원하지 않는 다른 iptables 규칙도 삭제합니다.
답변
동일한 명령을 실행하지만 “-A”를 “-D”로 바꿉니다. 예를 들면 다음과 같습니다.
iptables -A ...
된다
iptables -D ...
답변
규칙 번호 ( –line-numbers )를 사용할 수도 있습니다 .
iptables -L INPUT --line-numbers
출력 예 :
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT udp -- anywhere anywhere udp dpt:domain
2 ACCEPT tcp -- anywhere anywhere tcp dpt:domain
3 ACCEPT udp -- anywhere anywhere udp dpt:bootps
4 ACCEPT tcp -- anywhere anywhere tcp dpt:bootps
따라서 두 번째 규칙을 삭제하려면 다음을 수행하십시오.
iptables -D INPUT 2
최신 정보
특정 테이블 (예 : nat)을 사용하는 경우 삭제 명령에 주석을 추가해야합니다 (주석은 @ThorSummoner).
sudo iptables -t nat -D PREROUTING 1
답변
아무 문제없이 저에게 가장 적합한 솔루션은 다음
과 같습니다.
comment=$(cat /proc/sys/kernel/random/uuid | sed 's/\-//g')
iptables -A ..... -m comment --comment "${comment}" -j REQUIRED_ACTION
2. 규칙이 추가되고 규칙 (또는이 설명이있는 모든 항목)을 제거하려는 경우
iptables-save | grep -v "${comment}" | iptables-restore
따라서 $ comment와 일치하는 모든 규칙을 100 % 삭제하고 다른 줄은 그대로 둡니다. 이 솔루션은 하루에 약 100 개의 규칙을 변경하여 지난 2 개월 동안 문제없이 작동합니다.
답변
먼저이 명령으로 모든 iptables 규칙을 나열하십시오.
iptables -S
다음과 같이 나열됩니다.
-A XYZ -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
그런 다음 원하는 줄을 복사하고 바꾸기 -A
로 바꾸십시오 -D
.
iptables -D XYZ -p ...
답변
-D
명령을 사용하면 man
페이지에서 설명하는 방식입니다.
-D, --delete chain rule-specification
-D, --delete chain rulenum
Delete one or more rules from the selected chain.
There are two versions of this command:
the rule can be specified as a number in the chain (starting at 1 for the first rule) or a rule to match.
다른 모든 command ( -A
, -I
)가 특정 테이블에서 작동하는 것처럼이 명령을 인식 하십시오. 기본 테이블 ( filter
table)에서 작업하지 않는 경우 -t TABLENAME
해당 대상 테이블을 지정하는 데 사용하십시오.
일치하는 규칙 삭제
iptables -D INPUT -i eth0 -p tcp --dport 443 -j ACCEPT
참고 : 일치하는 첫 번째 규칙 만 삭제합니다. 일치하는 규칙이 많은 경우 (iptables에서 발생할 수 있음)이를 여러 번 실행하십시오.
숫자로 지정된 규칙 삭제
iptables -D INPUT 2
숫자를 세는 것 외에도 --line-number
매개 변수를 사용 하여 행 번호를 나열 할 수 있습니다 . 예를 들면 다음과 같습니다.
iptables -t nat -nL --line-number
답변
NAT 규칙을 제거하려는 경우,
아래 명령을 사용하여 추가 된 IPtable을 나열하십시오.
# sudo iptables -L -t nat -v
Chain PREROUTING (policy ACCEPT 18 packets, 1382 bytes)
pkts bytes target prot opt in out source destination
7 420 DNAT tcp -- any any anywhere saltmaster tcp dpt:http to:172.31.5.207:80
0 0 DNAT tcp -- eth0 any anywhere anywhere tcp dpt:http to:172.31.5.207:8080
IPtables에서 nat 규칙을 제거하려면 다음 명령을 실행하십시오.
# sudo iptables -F -t nat -v
Flushing chain `PREROUTING'
Flushing chain `INPUT'
Flushing chain `OUTPUT'
Flushing chain `POSTROUTING'
그런 다음 확인할 수 있습니다.
# sudo iptables -L -t nat -v