System/OS
2003.04.23 10:32
[linux] ipchains 사용예(패킷 필터링)
조회 수 14505 댓글 0
작성 규칙: 특정한 제한 사항은 전반적인 정책보다 앞에 와야 한다
1. 매스커레이딩 설정의 예
# ip 포워딩 기능 활성화
# $ vi /etc/sysconfig/network
# FORWARD_IPV4=true
echo "1" > /proc/sys/net/ipv4/ip_forward
/sbin/depmod -a
/sbin/modprobe ip_masq_ftp
/sbin/modprobe ip_masq_raudio
/sbin/modprobe ip_masq_irc
/sbin/modprobe ip_masq_quake ports=26000,27000,27910,27960
/sbin/modprobe ip_masq_cuseeme
/sbin/modprobe ip_masq_vdolive
ipchains -P forward DENY
ipchains -A forward -j MASQ -s 0.0.0.0/0 -d 0.0.0.0/0
#ipchains -A forward -j MASQ -s 192.168.1.0/24 -d 0.0.0.0/0
# RFC1812에 따른 IP spoof 방지를 위한 설정
for pfile in /proc/sys/net/ipv4/conf/*/rp_filter
do
echo "1" > $pfile
done
# ip 주소를 스푸핑한다고 예상되는 경우 로그에 기록하기
echo "1" > /proc/sys/net/ipv4/conf/all/log_martians
# 브로드캐스트, 멀티캐스트 주소에 ICMP 메시지 보내는것 막기, "smurf" 공격 방지용
echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
<b>2. 특정 홈페이지에 접속하여 인증후 인터넷을 사용하게 하고, 사용후 차단하는 예
(순서를 맞추지 않으면 나의 원격 접속이 끊어진다.)
# 도메인 이름의 사용을 허용한다.
ipchains -A input -p tcp --destination-port domain -j ACCEPT
# 웹서버로 가는 주소(192.168.1.101 또는 www.senun.com)만 허용한다.
ipchains -A input -d 192.168.1.101 -j ACCEPT
# 내부 랜카드(eth1)로 들어오는 패킷은 모두 죽인다.
ipchains -A input -i eth1 -j DENY
# 특정 IP만 허용한다.
ipchains -I input -s 192.168.1.39 -j ACCEPT
# 또는 특정 IP를 차단한다.
ipchains -D input -s 192.168.1.39 -j ACCEPT
3. 특정 주소로부터 오는 것을 특정 주소의 특정 포트로 강제로 가게 하기
# 들어오는 모든것은 서버의 80 포트로 가게 한다.
ipchains -I input -p tcp -s 0.0.0.0/0 -j REDIRECT 80
# 목적지가 80 포트인 것은 모두 서버의 80포트로 가게 한다.
ipchains -I input -p tcp -d 0.0.0.0/0 80 -j REDIRECT 80
# 내부망 인터페이스 eth1으로 들어오는 모든것 중에 목적지가 80 포트인것은 서버의 80 포트로 가게한다.
ipchains -I input -i eth1 -p tcp -d 0.0.0.0/0 80 -j REDIRECT 80
4. 현재 들어 오는 패킷에 대한 규칙 보기
ipchains -L 규칙 사항 모두 보기
# 현재 규칙 리스트 보기, 위에부터 1,2,3..
$ ipchains -L -n
ipchains -L input 이름으로 보기
ipchains -L input -n IP 숫자로 보기
5. 규칙 지우기
# 규칙의 n번째 지우기
$ ipchains -D input 1
# 또는 규칙을 만들 때 그대로 -D 옵션으로 지우기
$ ipchains -I input -s 192.168.1.39 -j ACCEPT
$ ipchains -D input -s 192.168.1.39 -j ACCEPT
6. 기본 정책 정하기
# 기본 정책을 거부한 경우
ipchains -F input
ipchains -P input REJECT
ipchains -F output
ipchains -P output REJECT
ipchains -F forward
ipchains -P forward REJECT
# 기본 정책을 허용으로한 경우
ipchains -F input
ipchains -P input ACCEPT
ipchains -F output
ipchains -P output ACCEPT
ipchains -F forward
ipchains -P forward ACCEPT
7. input 정책의 예(방화벽)
# 내부에서 외부로의 접근 허용
ipchains -A input -i eth1 -s 192.168.1.0/24 -d 0/0 -j ACCEPT
# 내부 네트웍 통신허용, 위 내용에 포함됨
#ipchains -A input -i eth1 -j ACCEPT
# 외부에서 공인 아이피로 접근 허용
ipchains -A input -i eth0 -s 0/0 -d 211.111.111.68/32 -j ACCEPT
# 내부 인터페이스는 모두 허용
ipchains -A input -i lo -s 0/0 -d 0/0 -j ACCEPT
####### IP spoofing 막기 #######
# 외부에서 사설 ip로 접근하는것
ipchains -A input -i eth0 -s 10.0.0.0/8 -d 0/0 -j DENY
ipchains -A input -i eth0 -s 127.0.0.0/8 -d 0/0 -j DENY
ipchains -A input -i eth0 -s 172.16.0.0/16 -d 0/0 -j DENY
ipchains -A input -i eth0 -s 192.168.0.0/24 -d 0/0 -j DENY
# ip spoofing 방지 외부에서 내부 사설 ip 위장
ipchains -A input -i eth0 -s 192.168.1.0/24 -d 0/0 -j DENY
# ip 어드레스를 속여서 외부에서 들어오는 패킷 거부함, 외부에서 공인 ip 속여 접근하는것 차단
ipchains -A input -i eth0 -s 211.111.111.68/32 -d 0/0 -j DENY
# 블록킹 BLOCKING 1:1023
# 방화벽 서버에서 외부에 제공할 서비스가 없으므로 포트를 막음
ipchains -A input -p tcp -j DENY -s 0.0.0.0/0 -i eth0 -d 0.0.0.0/0 1:1023
ipchains -A input -p udp -j DENY -s 0.0.0.0/0 -i eth0 -d 0.0.0.0/0 1:1023
# broadcast, multicast 막음
ipchains -A input -i eth0 -s 0/0 -d 255.255.255.255/32 -j DENY
ipchains -A input -i eth0 -s 0/0 -d 211.111.111.255/32 -j DENY
ipchains -A input -i eth1 -s 0/0 -d 255.255.255.255/32 -j DENY
ipchains -A input -i eth1 -s 0/0 -d 192.168.1.255/32 -j DENY
#ipchains -A input -i eth1 -s 0/0 -d 211.111.111.255/32 -j DENY
# ICMP에 broadcast, multicast 하는것(Smurf 공격) 막음. DOS 공격에 필요함
ipchains -A input -p icmp -i eth0 -s 0/0 -d 211.111.111.255 -j DENY
# 나머지는 모두 버리고 로그 기록에 남김
ipchains -A input -s 0/0 -d 0/0 -j REJECT
#ipchains -A input -s 0/0 -d 0/0 -l -j REJECT
8. output 정책의 예
#ipchains -F output
#ipchains -P output REJECT
# 로컬 내부 전송 허용
ipchains -A output -i eth1 -s 0.0.0.0/0 -d 192.168.1.0/24 -j ACCEPT
# 내부 네트웍 통신허용. 위 내용에 포함이 됨
#ipchains -A output -i eth1 -j ACCEPT
# 외부로 나가는 것이 사설 ip(목적지)를 향해 나가는 것은 말이 안되지요?
# 사설 ip 전송 차단
ipchains -A output -i eth0 -s 0.0.0.0/0 -d 192.168.1.0/24 -l -j REJECT
# 외부로 나가는것이 사설 ip(출발지)면 말이 안되지요?
ipchains -A output -i eth0 -s 192.168.1.0/24 -d 0.0.0.0/0 -l -j REJECT
# 공인 ip에서 외부로 나가기 허용
ipchains -A output -i eth0 -s 211.111.111.68/32 -d 0.0.0.0/0 -j ACCEPT
# 루프백으로 나가는것 허용
ipchains -A output -i lo -s 0.0.0.0/0 -d 0.0.0.0/0 -j ACCEPT
# 그외의 것은 모두 차단
ipchains -A output -s 0.0.0.0/0 -d 0.0.0.0/0 -l -j REJECT
9. forward 정책의 예
# 192.168.1.0-255 사이 외부 접속 허가. 그 이외의 패킷은 전송하지 않음.
#ipchains -P forward DENY
ipchains -A forward -i eth0 -s 192.168.1.0/24 -d 0.0.0.0/0 -j MASQ
#ipchains -A forward -s 192.168.1.0/24 -d 0.0.0.0/0 -j MASQ
# userlink를 사용하여 LAN 내부로부터 포트번호 137-139의 NetBIOS 패킷 외부로의 전송을 거부
ipchains -A forward -i eth0 -p tcp -s 192.168.1.0/0 137:139 -d 0/0 1024:65535 -j DENY
ipchains -A forward -i eth0 -p udp -s 192.168.1.0/0 137:139 -d 0/0 1024:65535 -j DENY
10. 매스커레이딩 타임아웃 설정의 예
# 2 hrs timeout for TCP session timeouts
# TCP 세션 타임아웃시간
# 10 sec timeout for traffic after the TCP/IP "FIN" packet is received
# FIN 패킷 이후의 TCP 세션
# 60 sec timeout for UDP traffic (MASQ'ed ICQ users must enable a 30sec firewall timeout in ICQ itself)
# UDP 패킷에 대한 값
ipchains -M -S 7200 10 60
번호 | 분류 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|---|
48 | System/OS | [linux] ipfwadm를 이용한 패킷필터링(구버전) | hooni | 2003.04.23 | 13338 |
» | System/OS | [linux] ipchains 사용예(패킷 필터링) | hooni | 2003.04.23 | 14505 |
46 | System/OS | [linux] ipchains 옵션 | hooni | 2003.04.23 | 13967 |
45 | System/OS | [linux] Xwindow/Xmanager 사용 | hooni | 2003.04.23 | 13800 |
44 | System/OS | [linux] 최소한의 커널 설정(커널설치 전체과정) | hooni | 2003.04.23 | 17770 |
43 | System/OS | [linux] 네트워크 커널 설정.. | hooni | 2003.04.23 | 16793 |
42 | System/OS | [linux] 커널 컴파일, 설정 | hooni | 2003.04.23 | 18185 |
41 | System/OS | [linux] 네트웍 트래픽 모니터링(MRTG) | hooni | 2003.04.23 | 43853 |
40 | System/OS | [linux] DHCP(Dynamic Host Configuration Protocol) 서버 | hooni | 2003.04.23 | 13323 |
39 | System/OS | [linux] Masquerade 가상 ip분할기법 | hooni | 2003.04.23 | 48363 |
38 | System/OS | [linux] DNS(Domain Name System) 설치, 설정 | hooni | 2003.04.23 | 12748 |
37 | System/OS | [linux] sendmail 설정/사용 | hooni | 2003.04.23 | 14883 |