우분투에서 iptables를 시작 / 중지하는 방법은 무엇입니까?


86

우분투에서 iptables 서비스를 시작 / 중지하려면 어떻게해야합니까?

나는 시도했다

 service iptables stop

그러나 "인식되지 않은 서비스"를 제공하고 있습니다.

왜 그렇게합니까? 다른 방법이 있습니까?


나는 혼란 스러운 것들 중 일부는 다음과 같은 기사에서 비롯된 것이라고 생각 /etc/init.d/합니다. 인터넷 검색시 'iptables 우분투 끄기'에 도움이되는 링크는 도움이되지 않습니다.
icc97 2019

답변:


76

나는 "우분투"에 대해 모른다. 그러나 리눅스에서 일반적으로 "iptables"는 서비스가 아니다-넷 필터 커널 방화벽을 조작하는 명령이다. 모든 표준 체인의 기본 정책을 "ACCEPT"로 설정하고 규칙을 삭제하여 방화벽을 "비활성화"(또는 중지) 할 수 있습니다.

iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -F

(사용한 경우 "nat"과 같은 다른 테이블도 플러시해야합니다.)

Ubuntu 웹 사이트의 다음 기사에서는 NetworkManager와 함께 사용할 iptables 설정에 대해 설명합니다. https://help.ubuntu.com/community/IptablesHowTo


5
이것이 현재의 모든 규칙을 영원히 버리지 않습니까? 최저 곳 첫번째 sudo는> / tmp를 / 규칙을 iptables에가-저장 그들을 저장
옌스 Timmerman

8
이것은 서비스를 멈추지 않고 모든 것을 통과시킬 수 있습니다.
Frederik Nielsen

1
아 고마워 iptables -F내가 빠진 것은 :-)
Cameron

@JensTimmerman이 iptables-save > /tmp/rules내 하루를 구했습니다. 감사합니다
blagus

46

당신은 모두 잘못되었습니다 :-)

찾고있는 명령은 다음과 같습니다.

$ sudo ufw disable

29
우리가 ufw에 대해 이야기하고 있는지 확실하지만,이 게시물은 iptables에 관한 것입니다
webjay

1
글쎄, 나는 그것이 Ubuntu의 기본 설치이고 IPtables는 없지만 ufw를 가지고 있다고 가정했습니다.
Frederik Nielsen

22
ufw는 iptables의 프론트 엔드 일뿐입니다. "Iptables는 모든 공식 Ubuntu 배포판 (Ubuntu, Kubuntu, Xubuntu)에 기본적으로 설치되는 방화벽입니다. Ubuntu를 설치하면 iptables가 있지만 기본적으로 모든 트래픽을 허용합니다. Ubuntu 8.04 Comes "iptables 방화벽을 쉽게 관리 할 수있는 프로그램 인 ufw로" help.ubuntu.com/community/IptablesHowTo
benjaoming

2
우분투에서 ufw == iptables (더 많거나 적은)와 같이 ufw를 비활성화하는 것은 iptables를 비활성화하는 것과 같습니다.
Frederik Nielsen

2
방화벽 관리를위한 iptables 서비스의 복잡성을 이해하는 대신 OP가 실제로 방화벽을 비활성화하는 데 관심이 있었을 가능성이 높습니다.
BobDoolittle

30

먼저 설치되어 있는지 확인합니다 (아마도) :

dpkg -l | grep iptables

우분투에서 iptables는 서비스가 아닙니다. 중지하려면 다음을 수행해야합니다.

sudo iptables-save > /root/firewall.rules
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

이전 규칙을 복원하려면 다음을 수행하십시오.

iptables-restore < /root/firewall.rules

이것은 http://www.cyberciti.biz/faq/turn-on-turn-off-firewall-in-linux/ 에서 가져 왔으며 많은 우분투 8.X 및 9.10 설치에서 테스트되었습니다.


나는 이것이 왜 많은 투표를했는지 모르겠다. iptables는 커널 모듈이다. "중지"될 수있는 "서비스"는 아닙니다. 커널에게 연결 처리 방법을 알려주는 데 사용됩니다. 또한 프로덕션 환경에서는 방화벽을 비활성화해서는 안됩니다. 무언가가 효과가 없다면 쉬운 해결책이 아닌 올바른 해결책을 찾으십시오.
Broco

17

iptables는 서비스가 아닌 명령이므로 일반적으로 다음과 같은 명령을 사용할 수 없습니다

service iptables start

또는

service iptables stop

방화벽을 시작하고 중지하기 위해 centos와 같은 일부 배포판에서는 방화벽을 시작 및 중지하기 위해 iptables라는 서비스와 방화벽을 구성하기위한 구성 파일을 설치했습니다. 어쨌든이 범위에 대한 스크립트를 편집하거나 설치하여 ipotables를 관리하는 서비스를 만들 수 있습니다. 리눅스의 모든 서비스, 우분투는 예외가 아니며 표준 인터페이스를 구현하는 /etc/init.d 폴더 내의 실행 가능한 스크립트입니다 (시작, 중지, 다시 시작) 가능한 스크립트는 다음과 같습니다.

 #!/bin/sh -e
 ### BEGIN INIT INFO
 # Provides:          iptables
 # Required-Start:    mountvirtfs ifupdown $local_fs
 # Default-Start:     S
 # Default-Stop:      0 6
 ### END INIT INFO

 # July 9, 2007
 # James B. Crocker <ubuntu@james.crocker.name>
 # Creative Commons Attribution - Share Alike 3.0 License (BY,SA)
 # Script to load/unload/save iptables firewall settings.

 PATH="/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin"

 IPTABLES=/sbin/iptables
 IPTABLES_SAVE=/sbin/iptables-save
 IPTABLES_RESTORE=/sbin/iptables-restore

 IPTABLES_CONFIG=/etc/iptables.conf

 [ -x $IPTABLES ] || exit 0

 . /lib/lsb/init-functions


 case "$1" in
 start)
    log_action_begin_msg "Starting firewall"
         type usplash_write >/dev/null 2>/dev/null && usplash_write "TIMEOUT 120" || true
    if $IPTABLES_RESTORE < $IPTABLES_CONFIG ; then
        log_action_end_msg $?
    else
        log_action_end_msg $?
    fi
         type usplash_write >/dev/null 2>/dev/null && usplash_write "TIMEOUT 15" || true
    ;;

 stop)
    log_action_begin_msg "Saving current firewall configuration"
    if $IPTABLES_SAVE > $IPTABLES_CONFIG ; then
        log_action_end_msg $?
    else
        log_action_end_msg $?
    fi
    log_action_begin_msg "Flushing ALL firewall rules from chains!"
    if $IPTABLES -F ; then
        log_action_end_msg $?
    else
        log_action_end_msg $?
    fi
    log_action_begin_msg "Deleting ALL firewall chains [Warning: ACCEPTING ALL PORT SERVICES!]"
    if $IPTABLES -X ; then
        $IPTABLES -P INPUT ACCEPT
        $IPTABLES -P FORWARD ACCEPT
        $IPTABLES -P OUTPUT ACCEPT
        log_action_end_msg $?
    else
        log_action_end_msg $?
    fi
    ;;

 save)
    log_action_begin_msg "Saving current firewall configuration"
    if $IPTABLES_SAVE > $IPTABLES_CONFIG ; then
        log_action_end_msg $?
    else
        log_action_end_msg $?
    fi
    ;;

 force-reload|restart)
    log_action_begin_msg "Reloading firewall configuration [Warning: POTENTIAL NETWORK INSECURITY DURING RELOAD]"
    $IPTABLES -F
    $IPTABLES -X
    if $IPTABLES_RESTORE < $IPTABLES_CONFIG ; then
        log_action_end_msg $?
    else
        log_action_end_msg $?
    fi
    ;;

 *)
    echo "Usage: /etc/init.d/iptables {start|stop|save|restart|force-reload}"
    exit 1
    ;;
 esac

 exit 0 

이 스크립트는이 튜토리얼의 일부이며 , 방화벽을 구성하기위한 모든 명령은 위 스크립트에 따라 /etc/iptables.conf 파일에 삽입해야합니다. 이 스크립트는 /etc/init.d의 iptables 파일에 삽입되어 다음을 사용하여 실행 가능해야합니다.

chmod+x *iptables* 

다음을 사용하여 서비스를 런레벨에 추가하십시오.

update-rc.d iptables defaults

쉘에서 새 규칙을 추가 할 수 있습니다.이 규칙은 즉시 활성화되며 서비스가 중지되면 /etc/iptables.conf에 추가됩니다 (시스템 종료시 확실히 저장됨을 의미합니다).

이것이 모두에게 도움이되기를 바랍니다.


6

iptables와 ufw는 Linux 에서 넷 필터 방화벽 을 관리하는 방법 이며, 둘 다 기본적으로 Ubuntu에서 사용 가능하므로 방화벽 규칙을 시작 및 중지 (및 관리) 할 수 있습니다.

iptables는 더 유연하지만 ufw는 간단하고 일반적인 기능을위한 매우 간단한 인터페이스 언어를 제공하므로 다음을 사용할 수 있습니다.

sudo ufw disable # 방화벽을 비활성화하려면

sudo ufw enable # 방화벽을 활성화하려면

현재 방화벽 설정을 보려면 sudo ufw status verbose또는을 사용하십시오 iptables -L.

iptablesUFW 의 Ubuntu Community docs 페이지 에는 많은 정보가 있습니다.


3

우분투에서 방화벽을 관리하는 몇 가지 방법이 있으므로 https://help.ubuntu.com/community/IptablesHowTo#Configuration%20on%20startup 을 읽어보십시오.

모든 현재 규칙을 삭제하려면 다음 명령을 사용할 수 있습니다 (일부 스크립트에 추가).

iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -P OUTPUT ACCEPT
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -P PREROUTING ACCEPT
iptables -t mangle -P INPUT ACCEPT
iptables -t mangle -P FORWARD ACCEPT
iptables -t mangle -P OUTPUT ACCEPT
iptables -t mangle -P POSTROUTING ACCEPT
iptables -t mangle -F
iptables -t mangle -X
iptables -t filter -P INPUT ACCEPT
iptables -t filter -P FORWARD ACCEPT
iptables -t filter -P OUTPUT ACCEPT
iptables -t filter -F
iptables -t filter -X

일반적인 경우 기본 방화벽 규칙은 일부 파일 (예 : /etc/iptables.rules)에 저장됩니다. 부팅하는 동안 iptables-restore </etc/iptables.rules방화벽 규칙을로드하기 위해 시스템 명령이 실행되었습니다. 따라서 위의 명령을 사용하여 모든 규칙을 삭제 한 후 동일한 명령을 실행하면 요청한 "방화벽 다시로드"가 발생합니다.


2

우분투 안내서에서 iptables를 설정하는 제안 된 방법을 올바르게 기억한다면 네트워킹 스크립트의 일부로 iptables를 설정하는 것입니다. 이것은 BSD 스타일 OS와 같이 /etc/init.d/iptables 스크립트가 없음을 의미합니다.


데비안 우디 (Ubuntu가 존재 했습니까?)가 있었지만 어쨌든 오늘날 sysadmins에 의해 구현되었습니다. 그들은 왜 그 아이디어를 바 꾸었습니까?

나는 단서가 아니지만 ... 우분투 서버 9.10을 설정할 때 알아 낸 성가신 것 중 하나 인 것을 기억합니다. 최근 postgres가있는 릴리스 배포판을 원했기 때문에 서버 용이었습니다 ... 그렇지 않으면 아치 리눅스를 실행합니다.
xenoterracide

2

/etc/init.d/에 파일을 만듭니다

touch fw.rc

파일을 chmod + x로 실행 가능하게하십시오

/etc/rc2.d/에서 해당 파일로 심볼릭 링크를 만드십시오.

ln -s /etc/init.d/fw.rc S80firewall

S80firewall을 편집하고 다음을 추가하십시오

iptables --flush
iptables --table nat --flush
iptables --delete-chain
iptables --table nat --delete-chain

echo "1" > /proc/sys/net/ipv4/ip_forward
iptables -F

이 파일에 모든 커스텀 iptables 규칙을 추가 할 수 있습니다

이제 /etc/rc2.d/S80firewall을 실행하여 방화벽 (iptables)을 다시 시작할 수 있습니다 (루트 여야 함)


2

나는 같은 문제가 있었다. 실제로, iptables-persistent는 없었습니다./etc/init.d

그래서 iptables-persistent 파일을 /etc/init.d

nano /etc/init.d/iptables-persistent

안에 다음과 같이 썼습니다.

#!/bin/sh
#       Written by Simon Richter <sjr@debian.org>
#       modified by Jonathan Wiltshire <jmw@debian.org>
#       with help from Christoph Anton Mitterer
#

### BEGIN INIT INFO
# Provides:          iptables-persistent
# Required-Start:    mountkernfs $local_fs
# Required-Stop:     $local_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# X-Start-Before:    $network
# X-Stop-After:      $network
# Short-Description: Set up iptables rules
# Description:       Loads/saves current iptables rules from/to /etc/iptables
#  to provide a persistent rule set during boot time
### END INIT INFO

. /lib/lsb/init-functions

rc=0

load_rules()
{
    log_action_begin_msg "Loading iptables rules"

    #load IPv4 rules
    if [ ! -f /etc/iptables/rules.v4 ]; then
        log_action_cont_msg " skipping IPv4 (no rules to load)"
    else
        log_action_cont_msg " IPv4"
        iptables-restore < /etc/iptables/rules.v4 2> /dev/null
        if [ $? -ne 0 ]; then
            rc=1
        fi
    fi

    #load IPv6 rules    
    if [ ! -f /etc/iptables/rules.v6 ]; then
        log_action_cont_msg " skipping IPv6 (no rules to load)"
    else
        log_action_cont_msg " IPv6"
        ip6tables-restore < /etc/iptables/rules.v6 2> /dev/null
        if [ $? -ne 0 ]; then
            rc=1
        fi
    fi

    log_action_end_msg $rc
}

save_rules()
{
    log_action_begin_msg "Saving rules"

    #save IPv4 rules
    #need at least iptable_filter loaded:
    /sbin/modprobe -q iptable_filter
    if [ ! -f /proc/net/ip_tables_names ]; then
        log_action_cont_msg " skipping IPv4 (no modules loaded)"
    elif [ -x /sbin/iptables-save ]; then
        log_action_cont_msg " IPv4"
        iptables-save > /etc/iptables/rules.v4
        if [ $? -ne 0 ]; then
            rc=1
        fi
    fi

    #save IPv6 rules
    #need at least ip6table_filter loaded:
    /sbin/modprobe -q ip6table_filter
    if [ ! -f /proc/net/ip6_tables_names ]; then
        log_action_cont_msg " skipping IPv6 (no modules loaded)"
    elif [ -x /sbin/ip6tables-save ]; then
        log_action_cont_msg " IPv6"
        ip6tables-save > /etc/iptables/rules.v6
        if [ $? -ne 0 ]; then
            rc=1
        fi
    fi

    log_action_end_msg $rc
}

flush_rules()
{
    log_action_begin_msg "Flushing rules"

    if [ ! -f /proc/net/ip_tables_names ]; then
        log_action_cont_msg " skipping IPv4 (no module loaded)"
    elif [ -x /sbin/iptables ]; then
        log_action_cont_msg " IPv4"
        for param in F Z X; do /sbin/iptables -$param; done
        for table in $(cat /proc/net/ip_tables_names)
        do
            /sbin/iptables -t $table -F
            /sbin/iptables -t $table -Z
            /sbin/iptables -t $table -X
        done
        for chain in INPUT FORWARD OUTPUT
        do
            /sbin/iptables -P $chain ACCEPT
        done
    fi

    if [ ! -f /proc/net/ip6_tables_names ]; then
        log_action_cont_msg " skipping IPv6 (no module loaded)"
    elif [ -x /sbin/ip6tables ]; then
        log_action_cont_msg " IPv6"
        for param in F Z X; do /sbin/ip6tables -$param; done
        for table in $(cat /proc/net/ip6_tables_names)
        do
            /sbin/ip6tables -t $table -F
            /sbin/ip6tables -t $table -Z
            /sbin/ip6tables -t $table -X
        done
        for chain in INPUT FORWARD OUTPUT
        do
            /sbin/ip6tables -P $chain ACCEPT
        done
    fi

    log_action_end_msg 0
}

case "$1" in
start|restart|reload|force-reload)
    load_rules
    ;;
save)
    save_rules
    ;;
stop)
    # Why? because if stop is used, the firewall gets flushed for a variable
    # amount of time during package upgrades, leaving the machine vulnerable
    # It's also not always desirable to flush during purge
    echo "Automatic flushing disabled, use \"flush\" instead of \"stop\""
    ;;
flush)
    flush_rules
    ;;
*)
    echo "Usage: $0 {start|restart|reload|force-reload|save|flush}" >&2
    exit 1
    ;;
esac

exit $rc

그런 다음 chmod 755 권한을 부여했습니다.

chmod 755 /etc/init.d/iptables-persistent

이제 완벽하게 작동합니다! 그것이 누군가를 도울 수 있기를 바랍니다.


2

VM 게스트 (예 : VirtualBox)로 Ubuntu 서버를 실행중인 경우 libvirt 가 활성화 될 수 있습니다. 그렇다면 libvirt에는 iptables를 사용하는 내장 네트워크 필터가 포함되어 있습니다. 이러한 필터는 nwfilters 의 방화벽 섹션에 설명 된대로 구성 할 수 있습니다 .

iptables 규칙을 비활성화하려면 libvirt에서 모든 위반 규칙을 제거하거나 사용하지 않는 경우 libvirt를 비활성화해야합니다 (예 : 수동 무시 구성 설치 (다시 부팅)).

sudo bash -c 'echo "manual" > /etc/init/libvirt-bin.override'


1

기본적으로는 없지만 최근 데비안 파생물 (우분투 포함)에서는 iptables 관리 서비스를 설치할 수 있습니다 .

sudo apt install iptables-persistent

그런 다음 이전에 저장된 규칙을로드 할 수 있습니다.

systemctl start netfilter-persistent

무슨 일이 있었는지 검토 :

systemctl status netfilter-persistent

netfilter-persistent.service - netfilter persistent configuration

       Loaded: loaded (/lib/systemd/system/netfilter-persistent.service; enabled; vendor preset: enabled)
       Active: active (exited) since Sun 2019-03-24 10:49:50 IST; 16min ago
     Main PID: 1674 (code=exited, status=0/SUCCESS)
        Tasks: 0
       Memory: 0B
          CPU: 0
       CGroup: /system.slice/netfilter-persistent.service

Mar 24 10:49:50 ubuntu systemd[1]: Starting netfilter persistent configuration...
Mar 24 10:49:50 ubuntu netfilter-persistent[1674]: run-parts: executing /usr/share/netfilter-persistent/plugins.d/15-ip4tables start
Mar 24 10:49:50 ubuntu netfilter-persistent[1674]: Warning: skipping IPv4 (no rules to load)
Mar 24 10:49:50 ubuntu netfilter-persistent[1674]: run-parts: executing /usr/share/netfilter-persistent/plugins.d/25-ip6tables start
Mar 24 10:49:50 ubuntu netfilter-persistent[1674]: Warning: skipping IPv6 (no rules to load)
Mar 24 10:49:50 ubuntu systemd[1]: Started netfilter persistent configuration.
Mar 24 11:02:49 ubuntu systemd[1]: Started netfilter persistent configuration.

또는 서비스를 중지하십시오.

systemctl stop netfilter-persistent

서비스를 중지하면 기본적으로 iptables가 플러시 되지 않습니다 (즉, 방화벽을 비활성화하지 않습니다 (참조 man netfilter-persistent)).

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