티스토리 뷰
iptables는 개념을 이해해도 실전에서 쓰이는 실례를 제대로 파악하지 못한다면 실무에서 어려움이 있을듯 하다.
서버에서 나가는 패킷을 차단 (네트워크에 영향을 주는 확률은 줄어들지만 서버의 부하는 올라간다)
iptables -A OUTPUT -d xxx.xxx.xxx.xxx -j DROP |
: 서버에서 어떠한 목적지로 향하는 패킷을 드롭
: 해킹당한 서버의 경우 특정 목적지로 엄청난 패킷을 보내는 경우가 발생한다.
한서버에서 특정 포트로 들어오는 패킷을 다른쪽 아이피로 포워딩시킬때 아래와 같이 적용
포워딩 받는 = 첫번째 패킷 받는 서버
포워딩 보내는 = 포워딩된 (주소변환된) 패킷 을 두번째로 받는 서버
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
LVS FULL NAT
or
단일 포워딩
-A POSTROUTING -d 포워딩받는 IP -p tcp -m tcp --dport 443 -j SNAT --to-source 포워딩 보내는 IP
통째로 넘길때
-A POSTROUTING -d 포워딩 보내는 IP -j SNAT --to-source 포워딩 받는IP
해설
라우팅 전에 -d 로 들어오는 패킷을 다시 -to-dest~ 아이피로 보내라
라우팅 후에는 -d 로 가는 패킷을 소스 아이피를 -to-source 아이피로 바꿔서 보내라
리다이렉트 개념 (서버내부에서 포트 변환)
:5135포트로 로 받아서 80번 포트로 넘길때
-A PREROUTING -t nat -p tcp --dport 5135 -j REDIRECT --to-port 80 -A PREROUTING -p tcp --dport 5135 -j DNAT --to-destination :80 |
공유기의 개념 (외부 인터넷으로 나가는)
- 출발지 아이피를 변경한다
POSTROUTING : 라우팅이 끝나고 난 다음 주소를 변경할수 있는 사슬 (SNAT) 이라고 책에는 나오는데
이건 아마 클라이언트가 라우팅배정을 끝내고 패킷이 갈곳은 정해졌다 = 라우팅이 끝났다는 의미인지
이미 목적지가 정해진 패킷에 대해 소스아피를 변경하겠다는 의미인듯 하다
사설아이피 192.168.10.0/24들은 공유기를 통과할때 211.xxx.xx.128 로 주소변환된다
방화벽 마스쿼레이트 (공유기)의 개념 (인터넷 외부에서 공유기 안으로 들어오는)
- 목적지 아이피를 변경한다
PREROUTING : 패킷이 리눅스 서버에 전달되고 난 후 라우팅전에 주소를 변경할수 있는 사슬 (DNAT)
특정패킷을 목적지로 보냈을때 그 목적지에서 받아서 다시 변경해서 보내겠다는 소리같음
들어오는 22번 포트로 들어오는 패킷은 192.168.10.1로 보내겠다는 의미
패킷상태에 따른 제어
- netfilter 의 의한 상태추적테이블을 이용해서 패킷을 제어가능
- modprobe ip_conntrack_ftp
- 상태추적테이블 65500 여개 정도 저장가능할텐데 종종 풀 차서 다운되거나 네트워크 불능의 경우가 되는 경우 발생
- 이 상태추적추적에 따른 룰설정이 리눅스 기본 iptables 룰에 포함되어 있을것이다
- 이미 연결된 패킷과 의존적인 패킷은 허용
iptables -A INPUT -m state --state INVALID -j DROP
- 확인할수 없는 패킷에 대해서는 거부 (의미는 상태추적 테이블에 아이피 정보가 없다는 거 같기도 하고? ㅋ)
핑 막기
iptables -A OUTPUT -p icmp --icmp-type echo-reply -j DROP (나가는거)
아이피 범위 지정해서 제어하기
- 원래 저 네트워크를 계산해서 입력하지만 iprange 를 쓰면 그냥 간단하게 적용가능하다
포트 범위 지정해서 드롭하기
u32모듈
–m u32 –u32 "32&0xFFFF=16384" - window=16384
–m u32 –u32 "5&0xFF=118&&32&0xFFFF=16384" - TTL=118 이고 window=16384
로그남기기 (limit 모듈이랑 조합해서 사용가능)
-j LOG --log-prefix "남길로그의 이름:" --log-level 3
limit
-m limit (디폴트는 1시간에 3번) ex) /second, /minute, /hour, /day 형태로 설정가능 |
ssh brute forec 차단하기 정책
IP확인은 아래와 같이 ㅋㅋ
watch cat /proc/net/ipt_recent/SSH_SYN
-A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --second 60 --hitcount 6 --rttl --name
SSHSCAN -j LOG --log-prefix SSH_SCAN:
-A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --second 60 --hitcount 6 --rttl --name
SSH_SYN -j DROP
STRING 모듈
- 패킷의 특정 문자열을 매칭할 수 있는 방법
- --to 512는 패킷사이즈 옵션임 (최대 65535) 뭔가 매칭이 잘 되지 않을시 올려보자
m string --string "문자열" --algo bm --to 512 m string --string "문자열" --algo kmp --to 512 m string --dex-string "hex" --algo bm --to 512 |
statistic 모듈
-m statistic --mode nth --every 10 |
hashlimit 모듈
-m hashlimit --hashlimit 1/m --hashlimit-mode srcip,dstip --hashlimit-name SRC -j ULOG |
flag 모듈
--tcp-flags ACK ACK |
SYN ACK FIN RST URG PSH ALL NONE
connlimit 모듈
초당 한 아이피에서 같은 종류의 패킷이 10번이상 들어온다면 공격으로 간주하여 DROP
: 이것은 오탐이 상당히 된다. (적은양의 공격시 올려보면 될듯) 어짜피 100% 서비스는 하지 못할때 올려보자.
--syn -m connlimit --connlimit-above 10 -j DROP -m recent --update --seconds 1 --hitcount 10 --name HTTP -j DROP |
ipset&iptables 체인이름 바꾸기
ipset -E 현재셋네임값 바꿀셋네임값 iptables -E 현재체인이름 바꿀체인이름 |
'Security' 카테고리의 다른 글
length 48 을 차단하는 경우? (0) | 2015.06.10 |
---|---|
결재포트로 DDOS 공격 (0) | 2015.06.10 |
nftables 설치 (with Centos7) (2) | 2015.06.10 |
nftables 기본 개념 문법 간단 정리 (0) | 2015.06.10 |
iptables connlimit and hashlimit (0) | 2015.06.10 |
- Total
- Today
- Yesterday
- OpenVPN
- mod_security
- Apache
- centOS7
- L2TP
- mariadb
- NGINX
- ntp
- SSL
- softether
- 리눅스
- GeoIP
- ssh
- php
- HAProxy
- 베이어다이나믹
- galera
- centos8
- MySQL
- IPSEC
- kvm
- 인증서
- virtualbox
- gitlab
- yum
- WAF
- cURL
- pptp
- glusterfs
- iptables
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |