라우터를 리눅스 서버로 변경하여 iptables 설정
R4 라우터는 잠시 비켜놓고 리눅스 서버로 연결
centos 시작 전 어뎁처 수에 맞게 네트워크 카드 하나 더 추가
[root@localhost ~]# yum install quagga
[root@localhost ~]# yum install telnet
> quagga랑 telnet 설치하려면 인터넷이 되야하므로 잠시 nat 로 변경 후 받기
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# vim ifcfg-eth0
> ip랑 netmask만 설정
[root@localhost network-scripts]# cp ifcfg-eth0 ifcfg-eth1
[root@localhost network-scripts]# vim ifcfg-eth1
> device 변경, ip랑 netmask만 설정
[root@localhost network-scripts]# service network restart
> 각자 인터페이스 설정 후 리스타트
라우팅할 수 있는 상태로 바꾸기
vim /etc/sysctl.conf 에서
# Controls IP packet forwarding
net.ipv4.ip_forward = 1 (0에서 1로 변경)
> 재부팅해도 1로 설정되어 있도록 함
[root@localhost network-scripts]# cd /etc/quagga
[root@localhost quagga]# ls
bgpd.conf.sample ospf6d.conf.sample ripd.conf.sample vtysh.conf zebra.conf
bgpd.conf.sample2 ospfd.conf.sample ripngd.conf.sample vtysh.conf.sample zebra.conf.sample
[root@localhost quagga]# cp zebra.conf.sample zebra.conf
cp: overwrite `zebra.conf'? y
[root@localhost quagga]# cp ospfd.conf.sample ospfd.conf
[root@localhost quagga]# chkconfig --level 5 zebra on
[root@localhost quagga]# chkconfig --level 5 ospfd on
[root@localhost quagga]# netstat -antup | grep "zebra"
tcp 0 0 127.0.0.1:2601 0.0.0.0:* LISTEN 4841/zebra
[root@localhost quagga]# netstat -antup | grep "ospfd"
tcp 0 0 127.0.0.1:2604 0.0.0.0:* LISTEN 4859/ospfd
> telnet 접속하기 위해 port번호 확인
[root@localhost quagga]# telnet 127.0.0.1 2601
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
Hello, this is Quagga (version 0.99.15).
Copyright 1996-2005 Kunihiro Ishiguro, et al.
User Access Verification
Password:
Router> en
Password:
Router#
> 접속 완료
Router# conf t
Router(config)# int eth0
Router(config-if)# ip add
Router(config-if)# ip address
A.B.C.D/M IP address (e.g. 10.0.0.1/8)
Router(config-if)# ip address 34.0.0.2/24
Router(config-if)# exit
Router(config)# int eth1
Router(config-if)# ip add
Router(config-if)# ip address 192.168.0.254/24
Router(config-if)# exit
Router(config)# end
Router# wr me
Configuration saved to /etc/quagga/zebra.conf
> 저장 완료
ospf 설정
[root@localhost quagga]# telnet 127.0.0.1 2604
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
Hello, this is Quagga (version 0.99.15).
Copyright 1996-2005 Kunihiro Ishiguro, et al.
User Access Verification
Password:
ospfd>
ospfd>
ospfd>
ospfd> en
ospfd# show run
ospfd# conf t
ospfd(config)# router ospf
>프로세스아이디 없음
ospfd(config-router)# network
A.B.C.D/M OSPF network prefix
ospfd(config-router)# network 34.0.0.0/24 area 0
ospfd(config-router)# passive-interface eth1
ospfd(config-router)# end
ospfd# wr me
Configuration saved to /etc/quagga/ospfd.conf
ospfd#
> 설정 후 저장 완료
> 설정은 zebra로 가서 show ip route로 확인
ping 8.8.8.8 잘되나 확인
Cisco NAT
Static NAT : 일대일 주소변환(사설 1 : 공인 1)
Dynamic NAT : 다대다(사설 다 : 공인 다)
NAT-PAT : 다대일(사설 다 : 공인 1)
* 내부망 DNS 서버의 Zone 레코드의 값이 사설 IP주소일때 Cisco NAT를 통과하면 DNS 레코드도 NAT 적용
iptables NAT (시스템 보안구축 141p 155p)
SNAT(Source NAT) : 출발지 주소 변환
DNAT(Destination NAT) : 목적지 주소 변환 (Static NAT 역할, 외부에서 내부 서버 접근)
MASQUERADE(인터페이스 주소 변환, Port변환) : NAT-PAT 역할
REDIRECT : 패킷의 Port 값을 다른 Port 값으로 변환
* 내부망 DNS 서버의 Zone 레코드의 값은 주소변환 X
외부에서 DNS 질의를 위한 공인 IP로 구성된 Zone 필요
[root@localhost quagga]# chkconfig --level 5 iptables on
iptables start하고 -F로 전체 지워준다.
외부망인 eth0 에 서브 인터페이스 추가
[root@localhost quagga]# ifconfig eth0:100 34.0.0.100 netmask 255.255.255.0
> 그냥 명령어로 추가하면 리스타트했을때 지워짐
[root@localhost quagga]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp ifcfg-eth0 ifcfg-eth0:100
[root@localhost network-scripts]# cp ifcfg-eth0 ifcfg-eth0:150
[root@localhost network-scripts]# cp ifcfg-eth0 ifcfg-eth0:200
> 복사해주고 각 파일에 들어가서 ip변경해주고 리스타트!
[root@localhost network-scripts]# iptables -t nat -A PREROUTING -d 34.0.0.100 -j DNAT --to 192.168.0.100
[root@localhost network-scripts]# iptables -t nat -A PREROUTING -d 34.0.0.150 -j DNAT --to 192.168.0.150
[root@localhost network-scripts]# iptables -t nat -A PREROUTING -d 34.0.0.200 -j DNAT --to 192.168.0.200
[root@localhost network-scripts]# iptables -t nat -nL
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
DNAT all -- 0.0.0.0/0 34.0.0.100 to:192.168.0.100
DNAT all -- 0.0.0.0/0 34.0.0.150 to:192.168.0.150
DNAT all -- 0.0.0.0/0 34.0.0.200 to:192.168.0.200
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
[root@localhost network-scripts]#
---------------------------------------------------------------------
quagga에서 두 서비스 사용
/usr/sbin/zebra
/usr/sbin/ospfd
주소변환 정책에 의해 통신이 이뤄지면 테이블이 생성되서 그반대로 정책을 안줘도 응답을 보낼 수 있다.
사용자pc에서 dns 질의를 하면 nat 변환 주소가 아닌 사설주소로 질의가 된다.
그래서 dns로 사이트 접속하려해도 할수 없다. (사설아이피를 모르기때문)
DNS 서버
[root@localhost ~]# vim /etc/named.rfc1912.zones
zone "pub-pt.com" IN {
type master;
file "pub-pt.com.zone";
};
> 공용으로 사용 할 pub-pt.com 추가하기
[root@localhost ~]# cd /var/named/
[root@localhost named]# cp pt.com.zone pub-pt.com.zone
파일 복사 후 소유권 바꿔주기
존파일 열어서 내용 수정하기 pub-pt.com 이랑 ip주소
$TTL 1D
@ IN SOA ns1.pub-pt.com. admin.pub-pt.com. (
1 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS ns1.pub-pt.com.
ns1 A 34.0.0.200
www A 34.0.0.100
ftp A 34.0.0.150
내부만에서만 dns 질의 허용하기
[root@localhost ~]# vim /etc/named.rfc1912.zones
zone "pt.com" IN {
type master;
file "pt.com.zone";
allow-query {192.168.0.0/24;}; << 허용하고 싶은 아이피주소 추가(ex. 관리자만 사용가능하도록)
};
> 저장후 외부에서 질의해보면 질의 안됨 내부망에서만 질의가 됨
연습
www.pub-pt.com 서버로 웹서비스 접속만 가능하도록 주소 변환 정책 추가
(기존 정책 삭제, filter table 정책 X)
풀이
[root@localhost ~]# iptables -t nat -A PREROUTING -p tcp -d 34.0.0.100 --dport 80 -j DNAT --to 192.168.0.100
MASQUERADE
> -s : 출발지주소
> -o : 아웃풋 인터페이스
[root@localhost ~]# iptables -t nat -A PREROUTING -p tcp -d 34.0.0.100 --dport 80 -j DNAT --to 192.168.0.100
연습 2
MASQUERADE 정책 삭제 후 정책 다시 추가하여 192.168.0.0/24 대역의 모든 서버들은 외부와 통신 가능하도록 주소 변환 정책을 추가하시오
풀이 :
[root@localhost ~]# iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE
연습 3
FORWARD 체인의 기본정책을 DROP 변경
20.20.20.20에서 WEB서버로 WEB 서비스만 가능
20.20.20.20에서 FTP 서버로 SSH만 가능
20.20.20.20에서 DNS 서버로 DNS 서비스만 가능
(전부 핑은 불가능)
풀이 3
[root@localhost ~]# iptables -P FORWARD DROP
WEB
[root@localhost ~]# iptables -A FORWARD -p tcp -s 20.20.20.20 -d 192.168.0.100 --dport 80 -j ACCEPT
[root@localhost ~]# iptables -A FORWARD -p tcp -d 20.20.20.20 -s 192.168.0.100 --sport 80,443 -j ACCEPT
FTP
[root@localhost ~]# iptables -A FORWARD -p tcp -s 20.20.20.20 -d 192.168.0.150 --dport 22 -j ACCEPT
[root@localhost ~]# iptables -A FORWARD -p tcp -d 20.20.20.20 -s 192.168.0.150 --sport 22 -j ACCEPT
DNS
[root@localhost ~]# iptables -A FORWARD -p udp -s 20.20.20.20 -d 192.168.0.200 --dport 53 -j ACCEPT
[root@localhost ~]# iptables -A FORWARD -p udp -d 20.20.20.20 -s 192.168.0.200 --sport 53 -j ACCEPT
3개의 허용을 위해 6개의 정책이 만들어지는데 정책을 좀더 줄이기위해서는
state를 사용한다.
우선 출발지 포트로 되어 있는 정책을 지우고 아래 명령어를 입력한다.
[root@localhost ~]# iptables -I FORWARD -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
연습4
FTP 서버의 FTP 서비스 허용 정책 추가
- 상태 추적 X, 양방향 정책 추가, 접속시 IP로 접속 (34.0.0.150)
- Active Mode, Passive Mode 둘 다 가능
- Passive Mode Server Port 범위 : 10000 ~ 19999
- 계정은 임의로 확인
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf 파일 안에
pasv_min_port=10000
pasv_max_port=19999
pasv_address=34.0.0.150
[root@localhost ~]# iptables -A FORWARD -p tcp -m multiport -s 20.20.20.20 -d 192.168.0.150 --dport 20,21 -j ACCEPT
[root@localhost ~]# iptables -A FORWARD -p tcp -m multiport -d 20.20.20.20 -s 192.168.0.150 --sport 20,21 -j ACCEPT
[root@localhost ~]# iptables -A FORWARD -p tcp -s 20.20.20.20 -d 192.168.0.150 --dport 10000:19999 -j ACCEPT
[root@localhost ~]# iptables -A FORWARD -p tcp -d 20.20.20.20 -s 192.168.0.150 --sport 10000:19999 -j ACCEPT
[root@localhost ~]#
> FTP 서비스 데이터 전송 및 목록 전송은 데이터 연결
> 데이터 연결은 연결 요청을 어느쪽에서 시도하느냐에 따라 Active, Passive
> Active Mode는 Server에서 Client로 데이터 연결 요청 시도, 기본값으로 서버측 사용
Port 20사용, Client 방화벽 활성화 되어 있으면 차단, 연결 실패
> Passive Mode는 Client 방화벽 활성화 되어 있어도 데이터 연결 요청을 Client 측에서 연 결 시도
CentOS Router 만들기
2023. 1. 1. 19:16