iptables OUTPUT 체인에서 생성한 규칙이 잠시 후 삭제되는 이유는 무엇입니까?

iptables OUTPUT 체인에서 생성한 규칙이 잠시 후 삭제되는 이유는 무엇입니까?

내 로컬 서버에는 하루에 여러 번 원격 서버에서 규칙을 생성하는 봇이 있습니다. 봇의 목적은 각 포트에서 소비되는 트래픽을 계산하는 것입니다. SSH를 통해 원격 서버에 액세스하기 위해 봇은 Python으로 작성되었습니다. 두 서버의 운영 체제는 Ubuntu입니다. 봇 생성 규칙:

sudo iptables -I OUTPUT -p tcp --sport port_number -j DROP
sudo iptables -I OUTPUT -p tcp --sport port_number -m quota --quota 500000000 -j ACCEPT
iptables -nvL OUTPUT --line-numbers|grep "\<tcp spt:port\>"

그 순간 원격 서버를 확인해보니

iptables -nvL OUTPUT --line-numbers

알겠습니다. 규칙이 생성되었습니다. 그러나 일정 시간(2~3시간)이 지나면 규칙이 삭제됩니다. 위에 나열된 것은 봇이 만들 수 있는 모든 규칙입니다.

OUTPUT 체인을 지우거나 플러시할 수 없는 규칙은 없습니다. 규칙을 지우면 스크립트가 제대로 실행되지 않고 개별 포트의 대역폭을 제어할 수 없게 됩니다.

이제 봇이 몇 시간마다 다음 명령을 실행한다는 것을 깨달았습니다.

firewall-cmd --reload

이 명령은 규칙을 삭제합니다. 방화벽을 다시 로드하고 규칙이 삭제되는 것을 방지하는 방법은 무엇입니까?

답변1

firewall-cmd --reload실행하면 수동으로 추가된 규칙이 제거된다는 사실은 시스템이 작동하고 있다는 신호입니다 firewalld. 이는 IPTables 방화벽(및 향후 대체품)의 관리 시스템입니다 nftables.

firewalld봇이 원하는 작업을 알려주는 대신 IPTables를 직접 조작하므로 firewalld직접 추가된 설정이 재정의되고 firewalld모든 IPtables 설정이 구성 지침에 따라 재설정됩니다.

당신은 교체해야iptables방화벽 설정을 변경하는 모든 명령동등한 firewall-cmd명령을 사용하십시오. iptables -nvL그대로 둘 수 있는 기존 방화벽 설정을 검토합니다 .

iptables -nvL OUTPUT --line-numbers|grep "\<tcp spt:port\>"

규칙은 생성되지 않으며 행 번호가 포함된 OUTPUT 테이블의 내용만 표시하고 "" 문자열이 포함되지 않은 행은 필터링됩니다.

sudo iptables -I OUTPUT -p tcp --sport port_number -j DROP
sudo iptables -I OUTPUT -p tcp --sport port_number -m quota --quota 500000000 -j ACCEPT

이 두 명령 때문에접두사기존 규칙에 새 규칙을 추가합니다. 이 두 명령의 결과는 다음 순서로 두 개의 규칙이 됩니다.

1.) 출력 시 시작되는 모든 IPv4 TCP 트래픽에는 port_number500000000의 할당량이 적용되며 할당량이 허용되는 경우에만 허용됩니다.

2.) 할당량으로 인해 앞서 언급한 트래픽이 허용되지 않으면 해당 트래픽이 삭제됩니다.

이것의 정확한 복사본을 사용하려면 firewall-cmd직접적인 규칙을 사용해야 하는 것 같습니다:

firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 0 -p tcp --sport port_number -m quota --quota 500000000 -j ACCEPT
firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 1 -p tcp --sport port_number -j DROP
firewall-cmd --reload

처음 두 명령은 새 규칙을 영구 firewalld구성에 기록하고 세 번째 명령은 새 구성을 적용합니다.

직접 규칙의 예상 순서를 지정하려면 우선순위 번호를 사용해야 합니다. 그렇지 않으면 올바른 순서가 보장되지 않습니다. 게다가 봇은 체인의 시작 부분에 새로운 규칙 쌍을 계속 삽입하여 체인을 점점 더 길게 만들 수는 없습니다.

저는 묻고 싶습니다. firewall-cmd --reload귀하의 로봇이 수행하는 사이클의 목적은 무엇입니까? 모든 규칙이 다시 로드되므로 할당량 카운터가 재설정될 수 있습니다. (이것이 바로 봇이 이 작업을 수행하는 이유라고 생각합니다. 그러나 통계 등에 대한 할당량 카운터 값이 필요한 경우 이 명령을 실행하기 전에 이전 값을 읽고 어딘가에 저장했는지 확인하십시오.)

관련 정보