플러시 및 재작성 없이 iptables 규칙을 업데이트하는 방법

플러시 및 재작성 없이 iptables 규칙을 업데이트하는 방법

현재 저는 iptables규칙을 업데이트하기 위해 bash 스크립트를 사용하고 있습니다. 여기에서 다음 명령을 호출합니다.

iptables -F

그런 다음 규칙을 적용합니다.

문제는 포트 80에 액세스하기 위해 규칙을 업데이트해야 하고 10분마다 cron 작업의 모든 항목을 삭제해야 한다는 것입니다. 그래서 10분마다 iptables -F전화를 걸어 이전 규칙을 삭제하고 (원하지 않는) 모든 포트를 엽니다.

10분마다 규칙을 새로 고치고 싶지 않고 기존 규칙을 편집하거나 업데이트하기만 하면 됩니다.

답변1

정기적으로 업데이트해야 하는 특정 규칙이 있는 경우 이를 별도의 체인에 넣고 INPUT적절한 슬롯에서 해당 체인을 호출합니다.

iptables -N mychain                # Create new chain "mychain"
iptables -A INPUT mychain          # Insert it into INPUT
iptables -A INPUT …other rules…    # Append other rules as before

mychain이제 다음의 규칙에 영향을 주지 않고 자주 변경되는 규칙을 새로 고치고 추가할 수 있습니다 INPUT.

iptables -F mychain
iptables -A mychain …rule…
iptables -A mychain …rule…

트랜잭션과 같이 이를 단일 엔터티로 추가하려면 체인을 생성하고 체인에 규칙을 추가한 다음 체인을 여기에 삽입 INPUT하고 이전 인스턴스를 즉시 삭제하면 됩니다. 이를 위해서는 동적 체인 이름이 필요할 수 있습니다. 예를 들어,

chain="mychain_$(date +%s)"    # One second granularity
iptables -N "$chain"           # Create the chain
iptables -A "$chain" …rule…    # and its rules
iptables -A "$chain" …rule…
iptables -A "$chain" …rule…

그 다음에

old=$(iptables -L INPUT | awk '$1 ~ /^mychain_[0-9]+$/ {print $1; exit}')
iptables -I INPUT 1 -j "$chain"    # Add new chain in correct position
if [ -n "$old" ]
then
    iptables -D INPUT -j "$old"    # Remove old chain
    iptables -X "$old"             # Delete it
fi

반면, 많은 수의 IP 주소를 차단하거나 허용해야 하는 경우에는 다음을 고려하는 것이 좋습니다.IP 설정.

답변2

규칙 변경이 가능합니다.

예는 다음과 같습니다.

먼저 다음을 사용하여 상단(첫 번째) 위치에 규칙을 생성할 수 있습니다.

iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT

체인의 기존 규칙을 대체하도록 규칙을 지정할 수 있습니다.

위치 1에 주어진 첫 번째 규칙은 어디에서나 http 포트(포트 80)에 대한 연결을 허용하는 것입니다.

다음 iptables 명령은 네트워크 주소 범위 192.168.0.0/24에서만 표준 http 포트(포트 80)에 대한 연결을 제한하는 규칙을 대체합니다.

iptables -R INPUT 1 -p tcp -s 192.168.0.0/24 --dport 80 -j ACCEPT

따라서 모든 규칙을 삭제할 필요는 없으며 규칙을 대체해야 하는 위치만 알면 됩니다.

이것이 완전한 코스 방법이다원천

관련 정보