2014-06-11 3 views
-1

저는 iptables를 처음 사용하고 있으며,이 문제에 대한 좋은 해결책을 찾지 못한 채 며칠 동안 Google 검색을 해왔습니다.기본 iptables 구현

인터넷에 무제한으로 액세스 할 수있는 공용 IP 주소 5.6.7.8의 컴퓨터 A가 있습니다. 나는 컴퓨터 A에만 접근 할 수있는 사설 IP 주소 1.2.3.4를 가진 또 다른 컴퓨터 B를 가지고있다. i에서 B까지의 네트워크 트래픽을 인터넷으로 전달하는 iptables는 어떻게 사용합니까? sudo와 함께 apt-get을 사용하려면 http, ftp 및 https를 사용해야합니다.

두 컴퓨터 모두 우분투 리눅스를 실행합니다. 나는 오징어를 사용하려고했지만 너무 복잡해서 내가해야 할 일을 생각하지 않는다.

(이 분명 실제 IP 주소가 아닌하지만 일반 인터넷 설명은 문제의 설정을 이해하지 않고 읽을 수있는 것으로 나타났습니다.)

답변

1

내가 말하는 기계 A는 두 개의 네트워크 인터페이스를 가지고 있으리라 믿고있어 eth0 및 eth1. 이제

echo 1 > /proc/sys/net/ipv4/ip_forward 

: 당신은 시스템 A에서 패킷 포워딩을 활성화해야합니다 기계 B.

첫째로 인터페이스가 eth1 (외부) 모뎀에 conected입니다되며, eth0를 (내부)는 스위치에 conected입니다 또는 직접 당신은 /etc/init.d/fwscript.sh으로 다음 저장할 수 있습니다

#!/bin/sh 
    ipt=/sbin/iptables 
    extip=5.6.7.8 # replace with your EXTERNAL IP 
    lan=192.168.0.0/24 # your LAN 

    # start firewall 
    start_firwall { 
    echo "Enabling iptables firewall." 
    # default policies 
    $ipt -P INPUT DROP 
    $ipt -P FORWARD DROP 

    # NAT 
    $ipt -t nat -A POSTROUTING -o eth0 -j SNAT --to-source $extip 

    # INPUT chain 
    $ipt -A INPUT -i lo -j ACCEPT 
    $ipt -A INPUT -i eth1 -s $lan -j ACCEPT 
    $ipt -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT 
    $ipt -A INPUT -p tcp --destination-port 22 -j ACCEPT 

    # FORWARD chain 
    $ipt -A FORWARD -i eth1 -s $lan -j ACCEPT 
    $ipt -A FORWARD -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT 
    } 

    # stop firewall 
    stop_firwall { 
    $ipt -P INPUT DROP 
    $ipt -P OUTPUT DROP 
    $ipt -P FORWARD DROP 
    # allow internal traffic 
    $ipt -A INPUT -i eth1 -j ACCEPT 
    $ipt -A OUTPUT -o eth1 -j ACCEPT 
    } 

    # flushing, removing and zeroing tables 

    reset_firewall { 
    chains=`cat /proc/net/ip_tables_names` 
    for i in $chains; do 
     $debug $ipt -t $i -F 
     $debug $ipt -t $i -X 
     $debug $ipt -t $i -Z 
    done 
    } 

    case "$1" in 
    start|restart|reload) 
     reset_firewall 
     start_firewall 
     ;; 
    stop) 
     reset_firewall 
     stop_firewall 
     ;; 
    *) 
     echo "Usage: $0 {start|stop|restart|reload}" 
     exit 1 
     ;; 
    esac 
    exit 0 

스크립트가 실행되어야합니다 (chmod를 + X fwscript.sh). 이제 다음을 입력하여 간단히 실행할 수 있습니다. ./fwscript.sh [start | stop]. 지금 시작시에 실행 방화벽을 얻을 : 트래픽 또는 캐시를 모니터링 할 경우

update-rc.d fwscript.sh defaults 99 

당신은 오징어가 필요합니다. 그러나 오징어 구성은 fwscript.sh에서 약간의 변경이 필요하며 투명하거나 투명하지 않은 프록시를 원할 경우 결정해야합니다. 나는 지금 오징어없이 시험해보고 싶다.

+0

정말 고마워요! 비록 당신의 대답에 대한 설명이 필요합니다. 스크립트가 머신 B 또는 머신 A로 이동합니까? 그것이 기계 A에 있다면 B에게 무엇을해야합니까? 머신 A는 1 개의 네트워크 인터페이스 만 가지고 있습니다. 이게 문제 야? – ProbablePattern

+0

스크립트는 게이트웨이가 될 머신 A로 이동합니다. 예, 시스템 A는 포워딩을 수행하기 위해 두 개의 네트워크 인터페이스가 필요합니다. – wind39

+0

정적 IP 또는 DHCP를 통해 이미 A와 B 사이의 통신이 있다고 가정합니다. 컴퓨터 A도 DHCP 서버가되도록 구성 할 수 있으며 B는 A에서 동적 IP를 가져옵니다 (dhcpclient 사용). – wind39