Ubuntu 16 서버에서 NAT 규칙(-t nat)과 관련된 일부 Iptables 규칙 변경 사항을 스크립트로 작성해야 합니다. -D [여기서는 규칙]을 사용하여 규칙을 제거하는 일반적인 방법은 -t 식별자에서는 작동하지 않는 것 같습니다... 체인에서 어떤 규칙을 식별해야 하는지 식별해야 하여 스크립트를 복잡하게 만들고 싶지 않습니다. 찾아서 가져오십시오. 연관된 줄 번호...어떤 아이디어가 있습니까?
도움이 된다면 다음 규칙의 목적은 (기본적으로) 로컬 MySQL 데이터베이스 충돌 또는 재시작 중에 로컬 호스트 및 외부 트래픽을 1개 서버에서 백업으로 리디렉션하는 것입니다.
내 규칙:
iptables -t nat -A POSTROUTING -j MASQUERADE
iptables -t nat -A PREROUTING -p tcp --dport 3306 -j DNAT --to-destination RMT_IP:3306
iptables -t nat -I OUTPUT -p tcp -o lo --dport 3306 -j DNAT --to-destination RMT_IP:3306
나는 포기하려고 노력했다(효과가 있었다):
iptables -t nat -D POSTROUTING -j MASQUERADE
iptables -t nat -D PREROUTING -p tcp --dport 3306 -j DNAT --to-destination RMT_IP:3306
--line-number를 사용하지 않고 이 규칙을 제거하는 방법을 알 수 없습니다.
iptables -t nat -I OUTPUT -p tcp -o lo --dport 3306 -j DNAT --to-destination RMT_IP:3306
답변1
-I
(삽입) 또는 (추가)가 포함된 규칙이 있으면 -A
규칙 정의를 반복하여 -D
제거할 수 있습니다.
특정 예의 경우 테이블 체인에서 첫 번째 OUTPUT
일치 nat
규칙이 제거됩니다.
iptables -t nat -D OUTPUT -p tcp -o lo --dport 3306 -j DNAT --to-destination RMT_IP:3306
답변2
규칙을 쉽게 켜고 끄고 싶다면 별도의 체인을 만들어 보는 것은 어떨까요?
iptables -t nat -N MySQLnat
iptables -t nat -A MySQLnat -j DNAT --to-destination RMT_IP:3306
그런 다음 약간 수정된 방식으로 규칙을 만듭니다.
iptables -t nat -A POSTROUTING -j MASQUERADE
iptables -t nat -A PREROUTING -p tcp --dport 3306 -j MySQLnat
iptables -t nat -I OUTPUT -p tcp -o lo --dport 3306 -j MySQLnat
이제 사용자 정의 체인을 삭제하여 MySQL 관련 DNAT 규칙을 쉽게 제거할 수 있습니다.
iptables -t nat -F MySQLnat
빈 체인은 방금 빈 체인에 들어간 체인과 같으 -j RETURN
므로 아무것도 하지 않고 빈 체인으로 뛰어든 체인을 계속 처리합니다.
(귀하의 입장에서는 -j MASQUERADE
POSTROUTING 체인에 다른 어떤 것도 의존하지 않는다는 확신이 없는 한 POSTROUTING 체인에서 무조건 규칙을 제거하는 것을 조심해야 합니다.)
MySQL DNAT가 다시 필요하면 체인의 내용을 다시 넣으십시오.
iptables -t nat -A MySQLnat -j DNAT --to-destination RMT_IP:3306