모든 iptables 규칙보기


144

iptables규칙을 좀 더 자세히 볼 수있는 방법이 있습니까?

최근에 다양한 IP에 가장 무도회를 추가했습니다.

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
service iptables save
service iptables restart

내가 원하는 것을했지만, 내가 사용할 때 :

iptables -L

나는 일반적으로 얻는 것과 같은 결과를 얻습니다.

Chain INPUT (policy ACCEPT)
target    prot opt source        destination

Chain FORWARD (policy ACCEPT)
target    prot opt source        destination

Chain OUTPUT (policy ACCEPT)
target    prot opt source        destination

추가 한 규칙을 포함하여 규칙을 어떻게 볼 수 있습니까? (시스템은 CentOS 6입니다)

답변:


116

사용하는 경우 -L, --list현재 방화벽 규칙을 나열하는 옵션을, 당신은 또한 적절한 넷 필터 테이블을 지정해야합니다 (중 하나를 filter, nat, mangle, raw또는 security). 따라서 nat테이블 에 대한 규칙을 추가 한 경우 -t, --table옵션을 사용하여이 테이블을 명시 적으로 지정해야합니다 .

iptables --table nat --list

또는 옵션 짧은 형식을 사용하십시오.

iptables -t nat -L

특정 테이블을 지정하지 않으면 filter테이블이 기본값으로 사용됩니다.


더 빠른 결과를 얻으려면 호스트 이름 대신 숫자 IP 주소를 인쇄 하는 -n, --numeric옵션 도 포함하여 DNS 역방향 조회를 기다릴 필요가 없도록하는 것이 좋습니다.

-v, --verbose옵션 을 포함하여 더 많은 정보를 얻을 수 있습니다 .


113

iptables: 다섯 개 가지 다른 테이블 제어 filter, nat, mangle, rawsecurity. 주어진 호출 iptables에서 옵션에 대한 인수로 지정된 이러한 테이블 중 하나만 표시하거나 수정합니다 -t(기본값은 filter). 방화벽의 완전한 상태를 보려면 iptables각 테이블을 연속적 으로 호출해야합니다 .

또한 규칙을 정확하게 표현하려면 옵션을 전달해야합니다 -v. 그렇지 않으면 필터 규칙의 인터페이스와 같은 일부 중요한 기준이 생략됩니다 (예 :“모두 수락”이라고하는 규칙 및“루프백 인터페이스에서 모든 것을 수락”하는 규칙은로만 구분할 수 있음 -v).

따라서 넷 필터 규칙을 완전히 표현하려면 다음이 필요합니다.

iptables -vL -t filter
iptables -vL -t nat
iptables -vL -t mangle
iptables -vL -t raw
iptables -vL -t security

또는 iptables-save모든 테이블의 모든 규칙을 파싱 할 수있는 형식으로 표시 하는 프로그램을 호출 할 수 있습니다 iptables-restore. 이 형식은 또한 사람이 읽을 수있는 합리적입니다 ( iptables테이블 작성 명령에 대한 일련의 호출과 매우 유사 합니다).


56

iptables -S나를 위해 트릭을 수행합니다. 서비스가 꺼져있는 경우에도 모든 활성 규칙을 나열하는 것 같습니다.

매뉴얼 페이지에서 :

-S, --list-rules [chain] 선택한 체인의 모든 규칙을 인쇄합니다. 체인을 선택하지 않으면 모든 체인이 iptables-save와 같이 인쇄됩니다. 다른 모든 iptables 명령과 마찬가지로 지정된 테이블에 적용됩니다 (필터가 기본값 임).


이것은 정말 KWL의 대답, 나 또한 / 서비스 iptables에 / sbin에 상태가 유사한 출력을 제공 것으로 나타났습니다
TheLovelySausage

6
+1. "-S, 선택한 체인의 모든 규칙을 인쇄하십시오. 체인을 선택하지 않으면 모든 체인이 iptables-save와 같이 인쇄됩니다"맨 페이지에서 '보이는 것'이 없습니다. 이것이 내가 보통 필요한 것입니다.
Mike S

3
나는 이것이 사실이라고 생각하지 않았다. iptables -S내가 실행할 때 볼 수있는 모든 nat 규칙을 보여주지는 않습니다iptables -L -t nat
mulllhausen

1
@MikeS 매뉴얼 페이지에서 BOTH 명령은 지정된 테이블에서만 작동하며 기본적으로 필터링됩니다. "다른 모든 iptables 명령과 마찬가지로 지정된 테이블에 적용됩니다 (필터가 기본값 임)." 설명서의 문구는 -S와 -L에 대해 거의 동일하게 복사되며, 인쇄 된 규칙이 아니라 출력 형식 만 다릅니다. 이것은 적어도 내 시스템의 iptables v1.6.0 인 Ubuntu 16.04에서 사실입니다.
Scott

@mulllhausen에 동의하십시오. 내 nat 테이블 규칙을 표시하려면 "sudo iptables --table nat --list"가 필요했습니다. "-S"플래그 자체는 그것들을 보여주지 않았습니다.
Robert Oschler

15

내가하는 일은 iptables-save > iptables_bckp모든 레이어를 백업 한 다음 파일을 편집하고 iptables를 복원하는 것입니다.iptables-restore < iptables_bckp

# iptables-save > iptables_bckp
# vim iptables_bckp
# iptables-restore < iptables_bckp

당신은 당신의 과거 iptables를 잃지 않고 그들 중 하나를 수정할 수 있도록 이중 백업을 만들 수 있습니다.

이것은 개인적인 관행이며, 이것이 최선의 방법이라고 말하지는 않지만 나를 위해 훌륭하게 작동합니다.

한 번 해봐


이것은 지금까지 찾은 유일한 현실적인 답변으로 실제로 모든 테이블을 덤프합니다.
크리스 해링턴

4

iptables명령은 또한 테이블을 지정해야하며, 그렇지 않으면 기본적으로 테이블을 필터링합니다. 그래서 시도하십시오 :

iptables -t nat -L

1

당신이 사용할 수있는:

# lsmod | grep ip_tables
ip_tables              13193  4 iptable_raw,iptable_mangle,iptable_nat,iptable_filter

모든 테이블을 찾고 테이블에 특정 규칙을 표시합니다.


1

정말 도움이된다면 bash 스크립트를 작성하여 경로가 참조하는 폴더에 넣거나 ~ / .bashrc 파일의 별칭을 통해 참조하십시오.

AllRules.sh

#!/bin/bash

 echo "Filter table:"
 iptables -t filter -vL

 echo "Nat table:"
 iptables -t nat -vL

 echo "Mangle table:"
 iptables -t mangle -vL

 echo "Raw table:"
 iptables -t raw -vL

 echo "Security table:"
 iptables -t security -vL

 echo 
 echo "All rules in all tables printed"

새 bash 스크립트에 다음을 사용하여 실행 권한을 부여하십시오. chmod

권한이 문제인 경우 모든 iptables명령 앞에 sudo를 추가해야 할 수도 있습니다 .


0
iptables -vnxL
iptables -vnxL -tnat

아마도 매우 드물게 사용되지만 추가로 가능할 수도 있습니다.

iptables -vnxL -traw
iptables -vnxL -tmangle
iptables -vnxL -tsecuriy
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.