Ubuntu 16.04 에서 STUN/TURN 서버 설치

리눅스/Network|2018. 10. 4. 08:29
반응형

STUN 은 두 peer 간 연결만 도와주므로 서버의 부담이 적고,

TURN 은 STUN 으로 연결되지 못하는 경우 데이터 중계역할을 직접 하므로 트래픽 및 부하가 발생합니다.

* 참고

- TURN 서버는 STUN 서버가 처리 못하는것도 직접 중계하여 성공률이 높다 하지만, STUN 서버의 peer 간 연결 성공률도 높습니다. 안되는 경우는 NAT 서비스 상단에 (가정용 공유기 등) 방화벽을 설정해놓은 경우 입니다.

- TURN 서버는 STUN 의 기능도 포함하고 있습니다.




1. Coturn 패키지 설치


# apt-get install coturn

 


2. Coturn 서버 구성 파일 준비


turnserver.conf 파일을 찾습니다. 보통은 /etc/turnserver.conf 에 있습니다.

/etc/turnserver.conf 파일을 사용할 수 없지만 /usr/local/etc/turnserver.conf.default 파일이 있으면 /usr/local/etc 에 복사합니다.


# cp -p usr / local / etc / turnserver.conf.default /usr/local/etc/turnserver.conf


기본적으로 Coturn은 STUN / TURN 서버처럼 작동합니다.

서버를 TURN 전용으로 사용하려면 /usr/local/etc/turnserver.conf 를 열어 아래 옵션을 활성화 합니다. (주석 제거)


no-stun


이 예제에서는 기본 설정을 사용합니다. 즉, Coturn 서버는 STUN / TURN 서버로 작동합니다.



3. Listening IP 설정


Coturn 서버의 IP를 입력합니다.


listening-ip = 10.x.x.x


* relay-ip 옵션이 있다면 마찬가지로 공인IP 를 입력해줍니다.

relay-ip = 10.x.x.x



4. Coturn 접속 계정 설정


Coturn 서버에 액세스하기위한 사용자 이름과 암호를 설정합니다.


기본적으로 Coturn 서버에는 권한 부여 세트가 없으므로 액세스하려면 사용자 이름과 암호를 설정하는 것이 좋습니다.


/usr/local/etc/turnserver.conf 를 열고 아래 옵션을 설정하면 됩니다.


[형식] user = 사용자이름 : 암호


user=testuser:usertest



5. Listening Port 설정


UDP 및 TCP의 기본 리스너 포트는 다음과 같습니다.


listening-port = 3478 

tls-listening-port = 5349


이 포트는 STUN 및 TURN 모두 동일합니다. TURN 은 연결 및 트래픽 릴레이에 기본 포트 범위 49152-65535를 사용합니다.


엄격한 NAT를 사용하기 위해 포트를 80 또는 443으로 변경할 수 있으므로 Coturn 서버의 공식 설명서 ( https://github.com/coturn/coturn/wiki/turnserver) 를 참조하는 것이 좋습니다.


이 예제에서는 기본 포트를 사용합니다.



6. WebRTC를 지원 설정


WebRTC를 지원하도록 구성하려면 Coturn 안내서 및 사용법을 참조하십시오.

 

이 예제에서는 /usr/local/etc/turnserver.conf 파일을 열고 아래 내용 주석해제를 합니다.


verbose

fingerprint

lt-cred-mech

realm=sysdocu.com

 


7. Coturn 서버 실행


# turnserver &


참고로 Coturn 로그 디렉토리는 / var / log, / log /, / var / tmp, / tmp 또는 현재 디렉토리입니다.


Coturn 서버가 이제 가동 될 것입니다.


 

[출처] https://www.nomachine.com/AR07N00894

[번역] 구글번역기

반응형

댓글()

네트워크 속도 체크하기 (iperf)

리눅스/Network|2018. 1. 9. 09:15
반응형

속도 체크 대상 서버와 클라이언트에 iperf 를 설치 합니다.

[root@sysdocu ~]# apt -y install iperf


서버에서

[root@sysdocu ~]# iperf -s


클라이언트에서

[root@sysdocu ~]# iperf -c 192.168.0.10 -i 1 -t 10



[10G 속도 정상일 경우]


[root@sysdocu ~]# iperf -c 192.168.0.10 -i 1 -t 10

------------------------------------------------------------

Client connecting to 192.168.0.10, TCP port 5001

TCP window size: 85.0 KByte (default)

------------------------------------------------------------

[  3] local 192.168.0.12 port 38508 connected with 192.168.0.10 port 5001

[ ID] Interval       Transfer     Bandwidth

[  3]  0.0- 1.0 sec  1.09 GBytes  9.34 Gbits/sec

[  3]  1.0- 2.0 sec  1.08 GBytes  9.31 Gbits/sec

[  3]  2.0- 3.0 sec  1.09 GBytes  9.39 Gbits/sec

[  3]  3.0- 4.0 sec  1.08 GBytes  9.29 Gbits/sec

[  3]  4.0- 5.0 sec  1.09 GBytes  9.38 Gbits/sec

[  3]  5.0- 6.0 sec  1.09 GBytes  9.33 Gbits/sec

[  3]  6.0- 7.0 sec  1.05 GBytes  9.06 Gbits/sec

[  3]  7.0- 8.0 sec  1.08 GBytes  9.31 Gbits/sec

[  3]  8.0- 9.0 sec  1.07 GBytes  9.16 Gbits/sec

[  3]  0.0-10.0 sec  10.8 GBytes  9.29 Gbits/sec


[10G 속도 비정상일 경우]


[root@sysdocu ~]# iperf -c 192.168.0.10 -i 1 -t 10

------------------------------------------------------------

Client connecting to 192.168.0.10, TCP port 5001

TCP window size: 85.0 KByte (default)

------------------------------------------------------------

[  3] local 192.168.0.12 port 49416 connected with 192.168.0.10 port 5001

[ ID] Interval       Transfer     Bandwidth

[  3]  0.0- 1.0 sec   256 KBytes  2.10 Mbits/sec

[  3]  1.0- 2.0 sec   128 KBytes  1.05 Mbits/sec

[  3]  2.0- 3.0 sec  0.00 Bytes  0.00 bits/sec

[  3]  3.0- 4.0 sec  0.00 Bytes  0.00 bits/sec

[  3]  4.0- 5.0 sec  0.00 Bytes  0.00 bits/sec

[  3]  5.0- 6.0 sec   128 KBytes  1.05 Mbits/sec

[  3]  6.0- 7.0 sec  0.00 Bytes  0.00 bits/sec

[  3]  7.0- 8.0 sec  0.00 Bytes  0.00 bits/sec

[  3]  8.0- 9.0 sec  0.00 Bytes  0.00 bits/sec

[  3]  9.0-10.0 sec  0.00 Bytes  0.00 bits/sec

[  3] 10.0-11.0 sec  0.00 Bytes  0.00 bits/sec

[  3] 11.0-12.0 sec  0.00 Bytes  0.00 bits/sec

[  3]  0.0-13.7 sec   640 KBytes   381 Kbits/sec



반응형

댓글()

iptables 룰 추가 운선순위값 입력하여 적용시키기

리눅스/Network|2017. 9. 28. 12:58
반응형

예시) 특정 IP 를 차단하려고 함

 

상황) iptables -nL 로 확인시 INPUT 룰이 15개가 있을때

맨 마지막에 추가되면 특정 포트를 오픈시킨 뒤라서 차단되지 않는다. 이를 해결하고자 한다.

 

방법) INPUT 룰에서 특정 포트 오픈이 12~15번째 줄일때 12라인 이전에 추가하면 적용이 된다.

 

[root@sysdocu ~]# iptables -I INPUT 10 -p tcp -s 192.168.10.2 -j DROP    // 10번째 라인에 등록

[root@sysdocu ~]# iptables -D INPUT -p tcp -s 192.168.10.2 -j DROP        // 제거

 

반응형

'리눅스 > Network' 카테고리의 다른 글

Ubuntu 16.04 에서 STUN/TURN 서버 설치  (0) 2018.10.04
네트워크 속도 체크하기 (iperf)  (0) 2018.01.09
네트워크 장치명 변경 (Ubuntu 16.04)  (0) 2017.08.08
Ubuntu 16.04 IPTABLES 사용법  (0) 2017.02.14
DHCP 설치  (0) 2016.07.22

댓글()

네트워크 장치명 변경 (Ubuntu 16.04)

리눅스/Network|2017. 8. 8. 17:26
반응형

네트웍 장치명이 enp2s0, enp4s0 으로 잡혀있을때 eth0, eth1 변경 방법



1. 파일 수정


[root@sysdocu ~]# vi /etc/default/grub


GRUB_CMDLINE_LINUX="net.ifnames=0"  // 옵션 수정



2. 명령어 실행


[root@sysdocu ~]# update-grub



3. 네트워크 설정 변경


[root@sysdocu ~]# vi /etc/network/interfaces


원하는 장치명으로 변경

- enp2s0 -> eth0

- enp4s0 -> eth1



4. 파일 생성


[root@sysdocu ~]# ip link


ip link 결과값을 확인합니다.

결과값을 토대로 아래 파일을 생성해줍니다. (맥어드레스와 사용할 장치명을 적절히 입력)


[root@sysdocu ~]# vi /etc/udev/rules.d/70-persistent-net.rules


SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="6c:b3:11:3b:68:d1", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="1c:1b:0d:33:fb:79", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"



* 커널에 문제가 있어 리부팅 후 네트웍이 정상적으로 잡히지 않을 경우 KERNEL=="eth*", 옵션을 빼주면 됩니다.

* 부팅후 ip link 명령어로 네트워크 장치명 확인시 rename2 등과 같은 문제가 발생할 경우 네트워크 장치와 70-persistent-net.rules 파일의 룰 설정 개수가 맞지 않기때문일 수 있습니다. 이 경우 사용하지 않는 네트워크 장치일지라도 70-persistent-net.rules 파일에 설정을 해두면 해결이 됩니다.



5. 리부팅 


반응형

댓글()

Ubuntu 16.04 IPTABLES 사용법

리눅스/Network|2017. 2. 14. 08:28
반응형

http://linux-sys-adm.com/ubuntu-16.04-lts-how-to-configure-firewall-iptables-fail2ban/


테스트 환경 : Ubuntu 16.04 LTS

$ sudo apt-get install iptables-persistent
:: ipv4 / ipv6 룰 저장여부


설정파일 저장경로 
$ pwd
/etc/iptables

:: 위에서 저장을 했다면 아래와 같이 현재 Rule 파일로 저장
$ ls -l
합계 8
-rw-r--r-- 1 root root 1353  9월 20 13:27 rules.v4
-rw-r--r-- 1 root root  187  9월 20 13:27 rules.v6


방법1) init 스크립트 작성
$ sudo service iptables-persistent start

:: invoce-rc.d 를 이용해서 서비스 실행
$ sudo  invoke-rc.d netfilter-persistent save
 * Saving netfilter rules...                                                                  
run-parts: executing /usr/share/netfilter-persistent/plugins.d/15-ip4tables save
run-parts: executing /usr/share/netfilter-persistent/plugins.d/25-ip6tables save
                                                                                        [ OK ]

$ sudo service netfilter-persistent stop

:: init 스크립트로 복사 
$ sudo cp /usr/share/netfilter-persistent/plugins.d/15-ip4tables /etc/init.d/iptables
$ sudo /etc/init.d/iptables start
$ sudo /etc/init.d/iptables flush

:: 부팅시 자동으로 서비스 올라오게 등록
$ sudo update-rc.d -f iptables defaults


아래와 같은 에러가 뜨면... 해당스크립트에 LSB tag값이 지정되어있지 않다는 메세지기에 아래 문구삽입
$ sudo  update-rc.d -f iptables defaults
insserv: warning: script 'K01iptables' missing LSB tags and overrides
insserv: warning: script 'iptables' missing LSB tags and overrides


$ sudo vim /etc/init.d/iptables
............................
### BEGIN INIT INFO
# Provides:          skeleton
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Example initscript
# Description:       This file should be used to construct scripts to be
#                    placed in /etc/init.d.
### END INIT INFO

서비스 활성화 체크리스트
$ sudo service --status-all



방법2) 네트워크 설정파일에 저장된 설정 파일 iptables-restore

$ sudo vim /etc/network/interface
auto eth0
iface eth0 inet static
        address 192.168.22.223
        netmask 255.255.255.0
        gateway 192.168.22.1
        dns-nameserver 115.68.62.210
        pre-up iptables-restore < /etc/iptables/rules.v4



[출처] 모지리닷컴 | 이경현 (http://www.mojily.com/bbs/board.php?bo_table=B19&wr_id=2831&page=0)

반응형

댓글()

DHCP 설치

리눅스/Network|2016. 7. 22. 06:40
반응형

DHCP [Dynamic Host Configuration Protocol]
 - IP 할당을 요청하는 클라이언트에게 자동으로 IP를 할당해주는 프로토콜

1. DHCP 설치 (yum install -y dhcp)

 


2. Dhcpd.conf 생성
  가. 기본설치시 /etc/dhcp.conf에 아무 내용이 없으므로 샘플 설정파일을 복사
  나. cp /usr/share/doc/dhcp-3.0.5/dhcpd.conf.sample /etc/dhcpd.conf

3. Dhcpd.conf 파일 수정
  가. vi /etc/dhcpd/conf


   1) subnet x.x.x.x netmask x.x.x.x : 내부 IP 대역 범위 지정
   2) option routers 0.0.0.0; option subnet-mask 0.0.0.0; : DHCP 서버의 IP, 서브넷마스크 설정
   3) option domain-name "도메인"; option~ 네임서버IP, 보조네임서버IP;
       : 클라이언트에게 자동으로 지정할 네임서버 설정
   4) range dynamic-bootp x.x.x.x x.x.x.x;   :  동적으로 할당할 IP 주소 범위
   5) host ns ~     :  고정 IP를 할당 할 때 사용

4. 방화벽 추가
  -A INPUT -m state --state NEW -m udp -p udp --dport 67:68 -j ACCEPT

5. 실행
  service iptables restart
  service dhcpd restart


[출처] http://gntpapa.tistory.com/entry/CentOS-2


반응형

댓글()

wireshark 로 캡쳐한 패킷 ascii 로 변환하기

리눅스/Network|2015. 11. 30. 16:55
반응형

wireshark 로 캡쳐한 패킷 ascii 로 변환하기

 

예) Conversations 의 TCP 부분 확인하기

tshark.exe -r 111.pcapng -q -z conv,tcp > 222.txt

 

반응형

'리눅스 > Network' 카테고리의 다른 글

Ubuntu 16.04 IPTABLES 사용법  (0) 2017.02.14
DHCP 설치  (0) 2016.07.22
업로드, 다운로드 속도 제한  (0) 2015.06.26
rsync 하기 2  (0) 2015.01.27
우분투 방화벽 (ufw) 설정 (확인중)  (0) 2015.01.27

댓글()

업로드, 다운로드 속도 제한

리눅스/Network|2015. 6. 26. 16:50
반응형

출처 : http://serverfault.com/questions/549755/how-can-i-limit-the-upload-download-bandwidth-on-my-centos-server



limit-tc.sh



#!/bin/bash
# Full path to tc binary
 
TC=$(which tc)
 
#
# NETWORK CONFIGURATION
# interface - name of your interface device
# interface_speed - speed in mbit of your $interface
# ip - IP address of your server, change this if you don't want to use
# the default catch all filters.
#
interface=eth0
interface_speed=100mbit
ip=4.1.2.3 # The IP address bound to the interface
 
# Define the upload and download speed limit, follow units can be
# passed as a parameter:
# kbps: Kilobytes per second
# mbps: Megabytes per second
# kbit: kilobits per second
# mbit: megabits per second
# bps: Bytes per second
download_limit=512kbit
upload_limit=10mbit
 
 
# Filter options for limiting the intended interface.
FILTER="$TC filter add dev $interface protocol ip parent 1: prio 1 u32"
 
#
# This function starts the TC rules and limits the upload and download speed
# per already configured earlier.
#
 
function start_tc {
tc qdisc show dev $interface | grep -q "qdisc pfifo_fast 0"
[ "$?" -gt "0" ] && tc qdisc del dev $interface root; sleep 1
 
# start the tc configuration
$TC qdisc add dev $interface root handle 1: htb default 30
$TC class add dev $interface parent 1: classid 1:1 htb rate $interface_speed burst 15k
 
$TC class add dev $interface parent 1:1 classid 1:10 htb rate $download_limit burst 15k
$TC class add dev $interface parent 1:1 classid 1:20 htb rate $upload_limit burst 15k
 
$TC qdisc add dev $interface parent 1:10 handle 10: sfq perturb 10
$TC qdisc add dev $interface parent 1:20 handle 20: sfq perturb 10
 
# Apply the filter rules
# Catch-all IP rules, which will set global limit on the server
# for all IP addresses on the server.
$FILTER match ip dst 0.0.0.0/0 flowid 1:10
$FILTER match ip src 0.0.0.0/0 flowid 1:20
 
# If you want to limit the upload/download limit based on specific IP address
# you can comment the above catch-all filter and uncomment these:
#
# $FILTER match ip dst $ip/32 flowid 1:10
# $FILTER match ip src $ip/32 flowid 1:20
}
 
#
# Removes the network speed limiting and restores the default TC configuration
#
function stop_tc {
tc qdisc show dev $interface | grep -q "qdisc pfifo_fast 0"
[ "$?" -gt "0" ] && tc qdisc del dev $interface root
}
 
function show_status {
$TC -s qdisc ls dev $interface
}
#
# Display help
#
function display_help {
echo "Usage: tc [OPTION]"
echo -e "\tstart - Apply the tc limit"
echo -e "\tstop - Remove the tc limit"
echo -e "\tstatus - Show status"
}
 
# Start
if [ -z "$1" ]; then
display_help
elif [ "$1" == "start" ]; then
start_tc
elif [ "$1" == "stop" ]; then
stop_tc
elif [ "$1" == "status" ]; then
show_status
fi




[사용법]

1. 설정

위 파일에서 업로드 / 다운로드 / 장치명 등의 값을 수정한다.

2. 실행

# sh limit-tc.sh start / stop / status




반응형

'리눅스 > Network' 카테고리의 다른 글

DHCP 설치  (0) 2016.07.22
wireshark 로 캡쳐한 패킷 ascii 로 변환하기  (0) 2015.11.30
rsync 하기 2  (0) 2015.01.27
우분투 방화벽 (ufw) 설정 (확인중)  (0) 2015.01.27
iptables 접속 차단 스크립트  (0) 2015.01.26

댓글()

rsync 하기 2

리눅스/Network|2015. 1. 27. 09:08
반응형

[원본 서버에서 / 192.168.10.2]

 

1) 설치
[root@sysdocu ~]# yum -y install rsync

 


2) 설정
[root@sysdocu ~]vi /etc/rsyncd.conf

 

rsyncd.conf 파일을 생성하여 아래 내용을 입력해줍니다.

log file = /var/log/rsyncd.log        <-- 로그 쌓이게 하려면 적어줍니다.
 
[mirror]
path = /
uid = root
gid = root
use chroot = yes
read only = yes                          <- 2차서버에서 읽어가기만 하려면 yes, 수정까지 가능하게 하려면 no
hosts allow = 192.168.10.3       <- 접속 허용할 IP (보안 효과)
max connections = 2
timeout = 1000

 

아래 파일을 수정하여 rsync 를 허용합니다.

[root@sysdocu ~]vi /etc/xinetd.d/rsync

 

disable = no

 

* CentOS 7 에서는 xinetd 없이 systemctl start rsyncd 하면 됩니다.

   (부팅시 자동 구동 : systemctl enable rsyncd)

* CentOS 8 에서는 데몬 형식으로 실행해주거나 별도로 패키지를 더 설치해야 합니다.

   # dnf install rsync

   # dnf install rsync-daemon

   # systemctl start rsyncd

   or

   # rsync --daemon --config=/etc/rsyncd.conf

 


3) 적용
xinetd 를 재시작하여 rsyncd 를 구동합니다.

[root@sysdocu ~]/etc/init.d/xinetd restart


※ iptables 사용중이라면 873 포트를 오픈시켜줍니다.

 

 

[2차 서버에서 / 192.168.10.3]

 

아래 명령어 처럼 사용하면 됩니다.
아래는 sysdocu 사용자의 public_html 폴더를 가져오는 형태입니다. (변경된, 생성된 파일만)

 

[root@sysdocu ~]rsync -avzPog --bwlimit=1024 --delete 192.168.10.2::mirror/home/sysdocu/public_html /home/sysdocu/

 

※ 옵션 설명
--delete : 원본 서버에 없는 파일은 2차 서버에서도 지울것

--bwlimit : 데이터 전송속도 KBps (1024 = 초당 1MB)

 

반응형

댓글()

우분투 방화벽 (ufw) 설정 (확인중)

리눅스/Network|2015. 1. 27. 08:59
반응형
기본적으로 내부에서 외부로는 모두 나가고, 외부에서 내부로는 정해진 포트만 허용을 하게 됩니다.
아래는 몇몇 포트를 등록하고 사용하기 위한 예입니다.
1~4까지 해보세요. (2번 생략 가능)

>> 아직 확인중.. 시간이 없어서 나중에..

1. 사용 포트 등록

[root@sysdocu ~]# ufw allow 20/tcp
[root@sysdocu ~]# ufw allow 21/tcp
# ufw allow 22/tcp
# ufw allow 25/tcp
# ufw allow 80/tcp
# ufw allow 110/tcp
# ufw allow 143/tcp
# ufw allow 443/tcp
# ufw allow 50001:50005/tcp


2. 룰 파일 수정 (생략 가능, 위 명령어들과 동일함)

[root@sysdocu ~]# vi /etc/ufw/user.rules

*filter

:ufw-user-input - [0:0]
:ufw-user-output - [0:0]
:ufw-user-forward - [0:0]
-A ufw-user-input -p tcp --dport 20 -j ACCEPT
-A ufw-user-input -p tcp --dport 21 -j ACCEPT
-A ufw-user-input -p tcp --dport 22 -j ACCEPT
-A ufw-user-input -p tcp --dport 25 -j ACCEPT
-A ufw-user-input -p tcp --dport 80 -j ACCEPT
-A ufw-user-input -p tcp --dport 110 -j ACCEPT
-A ufw-user-input -p tcp --dport 143 -j ACCEPT
-A ufw-user-input -p tcp --dport 443 -j ACCEPT
-A ufw-user-input -p tcp -m multiport --dports 50001:50005 -j ACCEPT
COMMIT



3. 방화벽 가동


[root@sysdocu ~]# ufw enable



4. 부팅시 자동 적용


[root@sysdocu ~]# update-rc.d -f ufw defaults

* 참고로 위 파일 하나만 수정하고 방화벽 가동했을때 iptables -nL 하면 더 많은 설정이 보입니다.
   하지만 무시해도 됩니다. ^^

----------------------------------------------------------

[방화벽 켜기]
[root@sysdocu ~]# ufw enable

[방화벽 끄기]
[root@sysdocu ~]# ufw disable

[방화벽 특정 포트/프로토콜 개방]
[root@sysdocu ~]# ufw allow (개방할 포트번호) / (프로토콜)
ex> ufw allow 3306/tcp
ex> ufw allow 3306/udp

[방화벽 특정 포트/프로토콜 차단]
[root@sysdocu ~]# ufw deny (차단할 포트) / (프로토콜)
ex> ufw deny 8080/tcp

[방화벽 규칙 제거]
[root@sysdocu ~]# ufw delete (allow/deny) (포트)/(프로토콜)
ex> ufw delete allow 3306/tcp 

[특정 ip 막기]
[root@sysdocu ~]# ufw deny from (아이피 주소)
ex> ufw deny from 192.168.0.100

[utf 상태 보기]
[root@sysdocu ~]# ufw status

----------------------------------------------------------

부팅시 iptables 방화벽 동작 여부를 설정하는 방법


[root@sysdocu ~]# update-rc.d -f ufw remove      // 부팅시 활성화 안함
[root@sysdocu ~]# update-rc.d -f ufw defaults      // 부팅시 활성화


반응형

댓글()

iptables 접속 차단 스크립트

리눅스/Network|2015. 1. 26. 17:59
반응형

#!/bin/sh

# 초기화
iptables -F

# 포트 스캔 방지
iptables -A INPUT -d 0.0.0.0/0 -p icmp -j DROP

# DoS 공격 방지
iptables -N syn-flood
iptables -A syn-flood -m limit --limit 12/second --limit-burst 24 -j RETURN
iptables -A syn-flood -j DROP

# ssh 정책(root, webpage 계정만 접속 가능)
# ssh 포트 : 22, root 번호: 0, webpage 번호:500 
iptables -A INPUT -p tcp --dport 22 -m owner --uid-owner 0 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -m owner --gid-owner 0 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 22 -m owner --uid-owner 0 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 22 -m owner --gid-owner 0 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -m owner --uid-owner 500 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -m owner --gid-owner 500 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 22 -m owner --uid-owner 500 -j DROP
iptables -A OUTPUT -p tcp --dport 22 -m owner --gid-owner 500 -j DROP

# 1초에 15번 이상의 HTTP 접근을 할 경우 차단
iptables -A INPUT -p tcp --dport 80 -m recent --update --seconds 1 --hitcount 15 --name HTTP -j DROP

#--------------------------------------------------------------------
# 커널 컴파일 및 iptables 패치 후, connlimit 사용이 가능한 경우
# 1초에 15번 이상의 HTTP 접근을 할 경우 차단
#iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 15 -connlimit-mask 24 -j DROP

#메일서버의 경우 동시에 5개이상 SMTP 접근일 경우 5분동안 접근 제한
#iptables -A INPUT -m recent --name spammer --rcheck --seconds 300 -j DROP
#iptables -A INPUT -p tcp --syn --dport 25 -m connlimit --connlimit-above 5 -m recent --name spammer --set -j DROP
#---------------------------------------------------------------------

#----------------------------------------------------------------------
# STRING 필터기능
# MSN 문자열이 들어간 패킷 차단
#iptables -A FORWARD -m string --string "messenger.msn.com" -j DROP

# 싸이월드 접속차단
#iptables -A FORWARD -p tcp --dport 80 -m string --string "Host: cyworld.nate.com" -j DROP
#----------------------------------------------------------------------

# 서버가 해킹당했을 때 DoS공격지로 사용될 경우에 적용.
# DNS 쿼리 이외 UDP 패킷 전송 방지
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p udp ! --dport 53 -m state --state NEW -j DROP

 

스크립트 실행 후

# service iptables save

# service iptables restart


당연한 이야기지만, 이 스크립트는 root 권한으로 실행시켜야 한다. 
시스템이 부팅될 때 이를 실행하고자 한다면, /etc/rc.local 에 등록해두자.

이를 해제하기 위해서는 

iptables -F
iptables -F syn-flood
iptables -X syn-flood


를 실행해주면 된다.

 

[출처] [적용] iptables 접속 차단 스크립트|작성자 아람조

반응형

댓글()