복구 중에 오류를 무시할 수 있는지 알고 싶습니다.
내 규칙에는 다음과 같은 많은 줄이 있습니다.
-A mychain -s somehost.com -j DROP
내 규칙은 동적 목록에서 왔으며 somehost.com이 일시적으로 오프라인이거나 라우팅할 수 없거나 이와 유사한 경우 iptables-restore가 규칙 복원을 거부하고 다음과 같은 오류를 발생시킬 수 있습니다.
iptables-restore v1.6.0: host/network 'somehost.com' not found
Error occurred at line: 342
Try 'iptables-restore -h' or 'iptables-restore --help' for more information.
글쎄요, 호스트에 액세스할 수 없으면 iptables
해당 줄을 무시할 수 있기를 바랐습니다.somehost.com
이를 수행하기 위해 몇 가지 플래그를 추가할 수 있습니까 iptables-restore
?
답변1
DNS 이름은 iptables 규칙에 사용될 수 있지만이는 모범 사례가 아닙니다.더 많은 이유가 있습니다. 주된 이유는 iptables가 규칙 로딩 중에 구문 분석을 수행하기 때문입니다. DNS 이름은 나중에 변경될 수 있으며 호스트는 이를 인식하지 못합니다.
아시다시피 iptables에는 다음 사항만 필요합니다.DNS 이름 확인 성공. 따라서 DNS 이름이 존재하지 않으면 규칙 로딩이 오류와 함께 종료됩니다.
스크립트를 생성하고 그 안에서 이름 확인을 확인할 수 있습니다.
#!/bin/bash
host_check=$( dig -t A somehost.com +short 2>/dev/null | wc -l )
if (( $host_check > 0 ))
then sed -i '/.*somehost\.com/s/^#//' file
else sed -i 's/.*somehost\.com/#&/' file
fi
이 스크립트는 이름 확인을 확인합니다. 이름이 확인되면(출력은 하나 이상의 행이 됨) 스크립트는 각 행에서 특정 DNS 이름이 포함된 주석을 제거합니다. 그렇지 않은 경우 scipt는 DNS 이름이 포함된 각 줄에 주석을 추가합니다.
file
- 이것은 iptables-save > file
명령의 iptables 스크립트 입니다.
확인한 후 다음을 사용하여 규칙을 로드할 수 있습니다.iptables-restore < file
이 방법을 사용하지 않는 것이 좋습니다.iptables 규칙에서 DNS 이름을 거부하는 방법을 찾아야 합니다.