★iptables 란?
- 커널의 ip 패킷 필터링(Packet Filtering)기능을 하는 Netfilter에 규칙을 설정하고 관리하는 도구
- 체인이라고 불리는 방향성을 가진 규칙을 연결한 테이블이다.
★패킷 필터링
- 네트워크를 통과하는 모든 패킷들은 패킷 헤더에 출발지와 목적지 그리고 어떤 프로토콜을 이용하는지에
관한 정보를 담고 있다. 이러한 패킷의 헤더 정보를 보고 호스트로 들어오는 (INPUT)패킷과 나가는 패킷(OUTPUT)
통과하는 패킷 (FORWARD) 패킷 등을 검사하여 (TABLE과 비교 ) 불필요한 패킷이나 잘못된 패킷을 폐기
(DROP)하고 규칙과 일치하는 패킷만 허용(ACCPECT)시키는 기능을 한다.
★규칙 확인 및 제거
service iptables start
chkconfig iptables on
chkconfig --list iptables
iptables -L //리스트 형태로 출력
iptables -nL //숫자로 출력
iptables -L --line-numbers //라인번호 + 리스트 형태로 출력, 규칙제거시 유용!
iptables -S //체인에 설정된 규칙을 명령어 형태로 출력
/etc/sysconfig/iptables와 동일
iptables -D [chain] [num]
iptables -F //모든 규칙제거 방화벽 초기화 ssh설정 날라가고 xsehll 접속x
netstat -nltp 22 //22번 포트 열려 있음을 확인
★기본 정책 설정 및 데몬 관리
iptables-save > /etc/iptables.tmp
- 기본 설정 파일 외 다른 파일에 저장시 사용
iptables-restore < /etc/iptables.tmp
- 해당 파일의 내용으로 설정을 되돌릴시 사용
iptables-save > /root/default_policy
iptables -A [chain] -p [protocol] --[S/DPORT] [PortNum] -j [Target]
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
- 어떤 IP든 22번 포트로의 접근이 가능하도록 설정
service iptables save
- 시스템 재기동 시 자동 실행되도록 저장
★실습 SSH통신하기
Client-Linux로부터 SSH접속은 허용하고, Server-B와 그외 다른 호스트 및 네트워크로부터의
SSH접속은 차단한다.
iptables -A [chain] -p [protocol] --[S/DPORT] [PortNum] -j [Target]
★Server-B, Client-Linux
yum -y install openssh-client
service iptables stop
★Server-A
iptables -A INPUT -p tcp -s 100.100.100.120 --dport 22 -j DROP
iptables -A INPUT -p tcp -s 100.100.100.130 --dport 22 -j ACCEPT
Server-B, Client-Linux
첫번째 규칙이 먼저 적용되 다 접속이 가능
Client-Linux
Server-B
다시 순서대로 시도
iptables -F 로 규칙 모두 삭제후 다시 순서대로 입력
iptables -A INPUT -p tcp -s 100.100.100.120 --dport 22 -j DROP
iptables -A INPUT -p tcp -s 100.100.100.130 --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
Server-B, Client-Linux
Client-Linux 접속 성공
Server-B 접속 실패
★실습1
Server-A 에서 nslookup 명령어로 Google.com IP확인하기 (DNS 53:UDP)
nslookup google.com
nslookup에서 ip확인이 안되 firefox에서 주소를 쳐봤더니 역시 서버 찾을수 없음 확인
service iptables restart
vi /etc/resolve.conf
iptables -A INPUT -p udp --sport 53 -j ACCEPT
nslookup google.com
★실습2
Server-A firefox를 이용해 네이버 접속하기
iptables -A INPUT -p tcp --sport 80 -j ACCEPT
★실습3
Client-Linux가 Server-A의 WEB 접속을 허용하도록 설정
Server-A
yum -y install httpd
service httpd restart
Client-Linux
yum -y install elinks
Server-A
iptables -A INPUT -p tcp -s 100.100.100.130 --dport 80 -j ACCEPT
Client-Linux
elinks 100.100.100.110
★iptables 응용-로그기록
-규칙에 맞는 패킷을 로그에 기록
-기본적으로 생성되는 커널 로그 파일은 /var/log/messages이며 이곳에 로그가 저장
★LOG타겟 사용 - 실습
Server-A
iptables -I INPUT 1 -s 100.100.100.120 -j LOG
Server-B
ssh 100.100.100.110
Server-A
tail -f /var/log/messages //실시간으로 로그 변경 확인
Server-A 접속
접속을 시도하면 로그가 저장되고 있다.
LOG타겟 사용-실습2
Server-B 접근 시 차단하며, 차단한 기록을 로그 파일에 저장한다.
Server-A
iptables -I INPUT 2 -s 100.100.100.120 -j DROP
Server-B
ssh 100.100.100.110
Server-A
tail -f /var/log/messages //실시간으로 로그 변경 확인
접속을 시도하면 접속이 불가능하다
★LOG타겟 사용-실습3
다른 로그 기록과 차단한 로그 기록을 구별하기 위해 차단 로그 앞에 prefix(접두사)를 붙여 관리한다.
Server-A
iptables -D INPUT 1 //기존 로그 규칙 삭제
iptables -I INPUT 1 -s 100.100.100.120 -j LOG --log-prefix "Dropped IP:"
- 로그에 접두사 "Dropped IP:"를 붙여서 저장이 되도록 --log-prefix 옵션 사용
Server-B
ssh 100.100.100.110
Server-A
tail -f /var/log/messages
접두사 와 출발지 MAC주소 확인 차단된IP 확인할수 있다
★iptables와 연결 추적 (Connection Tracking)
-서비스 연결 상태에 따라서 그연결을 감시하고 제한할수 있다.
-연결 추적 방식은 연결 상태를 저장하기 때문에, 시스템 관리자가 연결을 허용하거나 거부할수 있다.
☆tcp 프로토콜 동작이해(시험)
SYN -> ACK+SYN-> ACK
iptables -A INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT
- syn만 실행중 Xshell접속 안됨
VM에서 테스트
Server-A 접속 실패
iptables -D INPUT 6
Server-A xshell 접속 됨
★핑 테스트
ping 127.0.0.1 //자기 자신을 뜻하는 가상 인터 페이스 루프백으로 핑 테스트 -> 불가능
iptables -A INPUT -i lo -j ACCEPT
ping 127.0.0.1 //가능
<Server-A, Server-B>
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
<Server-A> <------> <Server-B>
'Server > Linux' 카테고리의 다른 글
xshell/ 쉘 스크립트 (0) | 2017.05.25 |
---|---|
xshell/ WEB,APM,XE (0) | 2017.05.21 |
xshell/ PXE & KICKSTART (0) | 2017.05.15 |
xshell/ NFS (0) | 2017.05.14 |
xshell/ SAMBA (0) | 2017.05.14 |