일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
29 | 30 | 31 |
- React
- reactnative
- Til
- Sequence
- 우선순위
- Andrew Ng
- 끈기
- coursera
- 스파르타코딩클럽
- HTTP
- docker
- nodejs
- scope
- 1일1문장
- javascript
- 자바스크립트
- Linux
- 개발공부
- Machine Learning
- CSS
- 러닝자바스크립트
- 데이터전송
- 회고
- ES6
- 자료구조
- 클로저
- multer
- 객체
- NextJS
- 리눅스
- Today
- Total
해나아부지 개발일지
iptables 설치(install)부터 포트포워딩(port forwarding)까지 [2] 본문
iptables 설치(install)부터 포트포워딩(port forwarding)까지 [2]
__APPA 2021. 2. 22. 14:33Basic iptables options
- -A - Append this rule to a rule chain. Valid chains for what we're doing are INPUT, FORWARD and OUTPUT, but we mostly deal with INPUT in this tutorial, which affects only incoming traffic.
- -L - List the current filter rules.
- -m conntrack - Allow filter rules to match based on connection state. Permits the use of the --ctstate option.
- --ctstate - Define the list of states for the rule to match on. Valid states are:
NEW - The connection has not yet been seen.
RELATED - The connection is new, but is related to another connection already permitted.
ESTABLISHED - The connection is already established.
INVALID - The traffic couldn't be identified for some reason. - -m limit - Require the rule to match only a limited number of times. Allows the use of the --limit option. Useful for limiting logging rules.
--limit - The maximum matching rate, given as a number followed by "/second", "/minute", "/hour", or "/day" depending on how often you want the rule to match. If this option is not used and -m limit is used, the default is "3/hour". - -p - The connection protocol used.
- --dport - The destination port(s) required for this rule. A single port may be given, or a range may be given as start:end, which will match all ports from start to end, inclusive.
- -j - Jump to the specified target. By default, iptables allows four targets:
ACCEPT - Accept the packet and stop processing rules in this chain.
REJECT - Reject the packet and notify the sender that we did so, and stop processing rules in this chain.
DROP - Silently ignore the packet, and stop processing rules in this chain.
LOG - Log the packet, and continue processing more rules in this chain. Allows the use of the --log-prefix and --log-level options. - --log-prefix - When logging, put this text before the log message. Use double quotes around the text to use.
- --log-level - Log using the specified syslog level. 7 is a good choice unless you specifically need something else.
- -i - Only match if the packet is coming in on the specified interface.
- -I - Inserts a rule. Takes two options, the chain to insert the rule into, and the rule number it should be.
-I INPUT 5 would insert the rule into the INPUT chain and make it the 5th rule in the list. - -v - Display more information in the output. Useful for if you have rules that look similar without using -v.
- -s --source - address[/mask] source specification
- -d --destination - address[/mask] destination specification
- -o --out-interface - output name[+] network interface name ([+] for wildcard)
현재 port 상황 확인하는 법
netstat -ntl
※ iptables와 network manager는 충돌 가능성이 있다
네트워크 매니저의 설정 우선순위가 높기 때문에 가끔씩 자동으로 네트워크 설정을 뒤바꿔버려서 문제가 생기기도 합니다. 우분투를 이용해서 안정적인 서버 서비스를 제공하려면 네트워크 설정을 자주 변경할 필요가 없으므로 네트워크 매니저에게 맡기기보다 관리자가 직접 네트워크 설정 파일에 주소 정보를 입력하는 편이 바람직합니다.
sudo apt-get remove -y --purge network-manager
port forwading을 위한 iptables 기본 설정
iptables 규칙 확인
iptalbes -L
트래픽을 수신하기 위한 세션 허용
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
명령이 실행되지 않는다면
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
특정 포트로 수신되는 트래픽 허용
ssh 기본 포트(22)로 들어오는 tcp 트래픽 허용해줘야 한다
sudo iptables -A INPUT -p tcp --dport ssh -j ACCEPT
규칙을 확인해보면, 첫 번째 줄에 아래와 같은 line을 볼 수가 있다.
sudo iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT tcp -- anywhere anywhere tcp dpt:ssh
이제 웹 트래픽을 허용(Http method)
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
다시 규칙을 확인해보면,
sudo iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT tcp -- anywhere anywhere tcp dpt:ssh
ACCEPT tcp -- anywhere anywhere tcp dpt:www
패킷을 수락하기로 결정하면 더 이상 규칙에 영향을 주지 않습니다. ssh 및 웹 트래픽을 허용하는 규칙이 먼저 나오므로 모든 트래픽을 차단하는 규칙이 그 뒤에 오는 한 원하는 트래픽을 계속 수락 할 수 있습니다. 마지막에 모든 트래픽을 차단하는 규칙을 설정하기 만하면 됩니다.
sudo iptables -A INPUT -j DROP
sudo iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT tcp -- anywhere anywhere tcp dpt:ssh
ACCEPT tcp -- anywhere anywhere tcp dpt:www
DROP all -- anywhere anywhere
규칙 수정하기
지금까지 설정에 한가지 문제는 loopback port(localhost)가 막힌다는 것.
첫번째 규칙에 허용 규칙을 추가해 준다.
sudo iptables -I INPUT 1 -i lo -j ACCEPT
sudo iptables -L -v
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT all -- lo any anywhere anywhere
0 0 ACCEPT all -- any any anywhere anywhere state RELATED,ESTABLISHED
0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:ssh
0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:www
0 0 DROP all -- any any anywhere anywhere
system log 남기기
sudo iptables -I INPUT 5 -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
설정 저장하기
지금 컴퓨터를 재부팅하면 iptables 구성이 사라집니다. 그러나 재부팅 할 때마다 입력하는 대신 구성을 저장하고 자동으로 시작되도록 할 수 있습니다. 구성을 저장하려면 iptables-save 및 iptables-restore를 사용하기
Save your firewall rules to a file
sudo sh -c "iptables-save > /etc/iptables.rules"
edit (using sudo) your /etc/network/interfaces
sudo nano /etc/network/interfaces
write end of file
pre-up iptables-restore < /etc/iptables.rules
You may also want to keep information from byte and packet counters.
sudo sh -c "iptables-save -c > /etc/iptables.rules"
※iptables-persistent 패키지를 사용하면 더 쉽다
Install and use the iptables-persistent package
'Developers > ComputerScience' 카테고리의 다른 글
iptables 설치(install)부터 포트포워딩(port forwarding)까지 [1] (0) | 2021.02.19 |
---|---|
폐쇄망 centos | linux에 nodejs 설치 (0) | 2021.02.18 |
리눅스 파티션 디렉토리 (0) | 2021.02.17 |
리눅스 기본 명령어 정리 (0) | 2021.01.18 |
시스템 프로그래밍 Intro (0) | 2021.01.15 |