본문 바로가기
리눅스

[Linux] 리눅스 방화벽 Iptables 사용 예시

by 공대냥이 2018. 8. 14.
반응형

 

■ NULL 패킷 차단 ---> (Scanning) TCP NULL Scan

NULL 패킷은 정찰(Scanning) 패킷으로 서버설정의 약한 곳(Port scan)을 찾기위한 방법으로 사용된다.

# iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP

 

■ syn-flood attack 차단 ---> (DoS/DDoS) DoS Attack

syn-flood attack은 공격자가 새로운 연결을 만들고 빠지고를 반복해 리소스의 소모를 시킨다.

# iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP

 

■ Anti synflood with iptables

 

 

Edit /etc/sysctl.conf to defend against certain types of attacks and append / update as follows:

 

net.ipv4.tcp_syncookies = 1

  • TCP SYN Flooding attack를 차단할 때 유용한 항목으로 SYN 패킷의 도착빈도가 일정한 횟수보다 많을때 해당 요청을 불허 하도록 설정한다
  • syn flooding attack을 받게 될때 syncookies 기능을 켜게 되면 서버는 더 이상 SYN 패킷들을 SYN Backlog에 저장하지 않고, SYN 패킷에 들어 있는 정보들(클라이언트 IP, timestamp, mss 값등)을 이용해 syncookies라는 것을 만들고그 값을 SYN+ACK의 ISN(Initial Sequence Number)로 만들어서 클라이언트에게 보내게 된다.

net.ipv4.conf.all.rp_filter = 1

  • IPv4는 인증 매커니즘을 가지고 있지 않기 때문에 Source IP address을 조작할 수 있다. rp_filter(Reverse Path Filter)는 패킷이 들어 오는 인터페이스와 나가는 인터페이스가 같은지를 검사하도록 할려면 값을 1로 설정한다
  • rp_filter는 들어오는 패킷의 source IP가 라우팅 테이블에 등록되어 있지 않을때 패킷을 버리는 기능을 한다.

net.ipv4.tcp_max_syn_backlog = 8192

 

  • TCP 프로토콜에서 한 소켓이 동시에 SYN 요청을 처리하기에는 한계가 있는데이 한계가 백로그(backlog)이다.백로그는 연결 요청이 아직 완전히 처리되지 아니한 대기 상태에 있는 큐의 길이이다
  • 이 백로그 큐가 꽉 차게 되면 이후에 들어오는 SYN 요청은 무시된다따라서백로그의 값을 올려 SYN Flooding Attack 공격에 유연하게 대처할 수 있다하지만 무조건 늘리는것이 최적은 아니므로 시스템 상황에 맞게 설정한다.

 

■ XMAS 패킷 차단 ---> (Scanning) TCP Xmas Scan

XMAS 또한 정찰(Scanning) 패킷

# iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP

 

■ MAC 주소로 제어

신뢰할 만한 ip와 MAC주소에 대해 모든 패킷을 허용

# iptables -A INPUT -s 192.168.0.3 -m mac --mac-source 00:50:80:FD:E6:32 -j ACCEPT

 

■ IP 주소로 제어

신뢰할 만한 ip에 대해 모든 패킷을 허용

# iptables -A INPUT -s 192.168.0.3 -j ACCEPT

 

신뢰할 만한 ip 대역에 대해 모든 패킷을 허용

# iptables -A INPUT -s 192.168.0.0/24 -j ACCEPT

 

신뢰할 만한 ip 대역에 대해 모든 패킷을 허용

# iptables -A INPUT -s 192.168.0.0/255.255.255.0 -j ACCEPT

 

■ 포트 주소 범위로 지정

 

# iptables -A INPUT -p tcp --dport 6881:6890 -j ACCEPT

 

 

(주의) 반드시 source ip 부분이나 destination ip 부분의 지정이 필요하다.

 

■ (WEB) HTTP -- TCP 80

iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT

 

■ (WEB) HTTPS -- TCP 443

iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT

iptables -A INPUT -m state --state NEW -m tcp -p tcp -m multiport --dports 80,443 -j ACCEPT

 

■ (DB) MySQL(MariaDB) -- TCP 3306

iptables -A INPUT -p tcp --dport 3306 -j ACCEPT

 

■ (FTP) active mode -- TCP 21,20

iptables -A INPUT -p tcp --dport 21 -j ACCEPT

iptables -A INPUT -p tcp --dport 20 -j ACCEPT

 

■ (FTP) passive mode -- TCP 21, 1024-65535

iptables -A INPUT -p tcp --dport 21 -j ACCEPT

iptables -A INPUT -p tcp --dport 1024:65535 -j ACCEPT

 

■ (MAIL) SMTP -- TCP 25

iptables -A INPUT -p tcp -m tcp --dport 25 -j ACCEPT

 

■ (MAIL) Secure SMTP -- TCP 465

iptables -A INPUT -p tcp -m tcp --dport 465 -j ACCEPT

 

 (MAIL) POP3 -- TCP 110

iptables -A INPUT -p tcp -m tcp --dport 110 -j ACCEPT

 

■ (MAIl) Secure POP3 -- TCP 995

iptables -A INPUT -p tcp -m tcp --dport 995 -j ACCEPT

 

■ (MAIl) IMAP -- TCP 143

iptables -A INPUT -p tcp -m tcp --dport 143 -j ACCEPT

 

■ (MAIl) Secure IMAP -- 993

iptables -A INPUT -p tcp -m tcp --dport 993 -j ACCEPT

 

■ (ICMP) ICMP 허용 (ping)

iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT

iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT

 

 (NTP) -- UDP 123

iptables -A INPUT -p udp --dport 123 -j ACCEPT

 

■ (DHCP) -- UDP 67,68

iptables -A INPUT -p udp --dport 67:68 j ACCEPT

 

■ (SAMBA) -- TCP 445, 137,138,139

iptables -A INPUT -m state --state NEW -p tcp --dport 445 j ACCEPT

iptables -A INPUT -m state --state NEW -p tcp --dport 137:139 j ACCEPT

 

반응형