처음으로 iptable 방화벽 소 기 를 썼 습 니 다.

3338 단어 shell방화벽iptable
하루 종일 고민 하 다가 마침내 이 물건 을 해결 했다. 사실 코드 는 매우 간단 하지만 많은 시행 착 오 를 걸 었 다.하지만 성공 의 한 순간 은 확실히 성취 의 기쁨 이 있 었 다.
토폴로지 간소화 하면 이 렇 습 니 다.    호스트 A ― Liux ― 호스트 B, iptable 의 역할 은 호스트 B 를 adsf server 로 원 격 데스크 톱 으로 연결 할 수 있 고 외부 네트워크 를 연결 할 수 있 으 며 내부 네트워크 자원 에 접근 하 는 것 을 금지 하 는 것 입 니 다.
처음부터 번 거 로 움 이 끊 이지 않 았 습 니 다. 먼저 Liux ping 호스트 A 가 통 하고 호스트 B 가 통 하지 않 았 습 니 다.그리고 두 개의 네트워크 카드 가 어떻게 모두 물리 적 네트워크 카드 에 묶 여 있 는 지 알 수 없 었 다.인터넷 에서 찾 아 보 니 모두 더 블 네트워크 카드 로 연결 되 어 있 습 니 다. 저 와 이 문 제 는 아직 다 릅 니 다.이때 문득 "인터넷 에서 찾 을 수 없 는 문 제 는 모두 SB 문제"라 는 말 이 떠 올 랐 다. ifconfig 를 자세히 살 펴 보 니 두 번 째 네트워크 카드 의 mac 주 소 는 FF 멀미 였 다. 보아하니 네트워크 카드 가 인식 되 지 않 은 것 같다.그리고 설치 판 에서 Liux 의 구동 을 찾 아서 해 결 했 습 니 다. 역시 SB 문제 입 니 다.
마침내 네트워크 문 제 를 해결 하고 Liux 는 두 호스트 를 연결 하여 iptable 을 쓰기 시작 할 수 있 습 니 다.처음에 INPUT OUTPUT 와 FORWARD 를 모두 DROP 에서 떨 어 뜨리 려 고 했 는데 필요 한 포트 를 열 고 많은 문 제 를 발 견 했 습 니 다. 호스트 A 와 호스트 B 가 서로 다른 네트워크 에 있 는 이상 DROP 를 사용 하지 않 아 도 되 고 그 자체 가 서로 방문 할 수 없다 고 생각 했 습 니 다.
납득 한 후에 훨씬 간단 해 졌 다. 먼저 주소 변환 을 해서 호스트 B 가 인터넷 에 접속 할 수 있 도록 한 다음 에 3389, 80, 443 포트 를 비 추어 기본적으로 목적 을 달성 했다.
보안 에 대해 서 는 3389 만 외부 네트워크 에 매 핑 되 기 때문에 여 기 는 제한 이 없습니다. 호스트 B ssh 에서 Liux 로 설정 하 는 것 만 금지 합 니 다.호스트 B 는 외부 사람들 에 게 adsf 를 만들어 주 는 것 이기 때문에 내부 네트워크 자원 에 접근 하 는 것 을 금지 하 는 것 이 주요 목적 입 니 다.
사실은 안전성 에 대한 규칙 에 대해 잘 모 르 겠 습 니 다. 생각 나 는 것 은 바로 포트 를 제한 하 는 것 입 니 다. 큰 신의 지 도 를 바 랍 니 다.
#!/bin/bash
#            

##    
in_if="eth0"
in_ip="10.1.1.249"
out_if="eth1"
out_ip="192.168.0.1"
ipt="/sbin/iptables"
gw="10.1.0.1"
work="192.168.0.2"

#  iptable
for table in filter nat mangle raw; do
        $ipt -t $table -X
        $ipt -t $table -F
        $ipt -t $table -Z
done



#####      
CTL="/sbin/sysctl"
$CTL -w net.ipv4.ip_forward=1
#      
$ipt -t nat -A PREROUTING -d $in_ip -p tcp --dport 3389 -j DNAT --to $work:3389
$ipt -t nat -A POSTROUTING -d $work -p tcp --dport 3389 -j SNAT --to $in_ip
#web  
$ipt -t nat -A PREROUTING -d $in_ip -p tcp --dport 80 -j DNAT --to $work:80
$ipt -t nat -A POSTROUTING -d $work -p tcp --dport 80 -j SNAT --to $in_ip
$ipt -t nat -A PREROUTING -d $in_ip -p tcp --dport 443 -j DNAT --to $work:443
$ipt -t nat -A POSTROUTING -d $work -p tcp --dport 443 -j SNAT --to $in_ip
#      
$ipt -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE
#      ssh#        ,           ?
$ipt -A INPUT -s $work -p tcp --dport 22 -j DROP
$ipt -A OUTPUT -s $work -p tcp --dport 22 -j DROP
$ipt -A OUTPUT -s $work -p tcp --dport 80 -j ACCEPT
$ipt -A OUTPUT -s $work -p tcp --dport 443 -j ACCEPT
#      
$ipt -t nat -A PREROUTING -d 10.1.0.0/22 -j DROP
#drop    
$ipt -A INPUT -m state --state INVALID -j DROP
$ipt -A OUTPUT -m state --state INVALID -j DROP
$ipt -A FORWARD -m state --state INVALID -j DROP
#               
$ipt -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$ipt -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#            #                   
$ipt -t nat -A PREROUTING -s $work -p tcp --dport 3389  -j DROP

아직도 논리 적 으로 혼 란 스 러 운 부분 이 많은 것 같 습 니 다. 특히 호스트 B 가 주소 변환 을 한 후에 아래 의 규칙 은 전환 전의 것 을 써 야 합 니까? 아니면 쓸 필요 가 없 습 니까?
PS: 테스트 를 해 보 았 습 니 다. 마지막 과 앞 에 있 는 DROP 전체 10 개의 네트워크 를 주석 한 후에 원 격 으로 연결 할 수 있 습 니 다. 주석 을 취소 한 두 개의 모든 것 은 원 격 으로 연결 할 수 없습니다. 즉, 주소 가 바 뀐 후에 도 원래 의 주 소 는 유효 합 니 다.

좋은 웹페이지 즐겨찾기