내 로컬 서버에는 하루에 여러 번 원격 서버에서 규칙을 생성하는 봇이 있습니다. 봇의 목적은 각 포트에서 소비되는 트래픽을 계산하는 것입니다. 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_number
500000000의 할당량이 적용되며 할당량이 허용되는 경우에만 허용됩니다.
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
귀하의 로봇이 수행하는 사이클의 목적은 무엇입니까? 모든 규칙이 다시 로드되므로 할당량 카운터가 재설정될 수 있습니다. (이것이 바로 봇이 이 작업을 수행하는 이유라고 생각합니다. 그러나 통계 등에 대한 할당량 카운터 값이 필요한 경우 이 명령을 실행하기 전에 이전 값을 읽고 어딘가에 저장했는지 확인하십시오.)