iptables Firewall on Ubuntu/Debian
일반적인 리눅스 배포본의 기본 방화벽인 iptables
를 쉽게 사용할 수 있는 ufw
를 사용해서 리눅스에 방화벽을 구축하는 방법을 기술하고 있다.
iptables
iptables로 당연히 방화벽을 관리할 수 있다.
iptables -L
플래그
방화벽 룰, 액션에 대해 INPUT, OUTPUT, FORWARD 정보를 볼 수 있다.
1 | $ sudo iptables -L |
-S 플래그
우리 대신 사용 하 여 각 규칙 및 정책을 사용 하는 데 필요한 명령을 반영 하는 형식으로 출력을 볼 수 있는
1 | $ sudo iptables -S |
규칙을 모두 리플레시 할 수 있다
1 | sudo iptables -F |
방화벽
모든 규칙은 DENY -> 일부 허용 순서로 한다. 그래서 TCP 로 1번부터 65526번 포트까지 다 막는 방법이다. 만약 UDP도 막고싶다면,
1 | sudo iptables -A INPUT -p tcp --dport 1:65526 -j DROP |
ssh 22 자리는 포트
1 | sudo iptables -I INPUT -p tcp --dport 22 -j ACCEPT |
혹은 ip address 를 기반으로 설정할 수 있다.
1 | iptables -I INPUT -p tcp --dport 22 -s 222.222.222.222 -j ACCEPT |
8080번으로 들어오는 포트를 80 번으로 바꾸기
1 | sudo iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT |
iptables정보를 저장하고 재부팅 이후에도 동작하도록 설정함. <= vi 로 열어서 맨 마지막에 추가함.
1 | sudo sh -c "iptables-save > /backup/iptables.rules" |
Web
기본 httpd 사용을 위한 80번 포트 개방과, node.js, python 등 실습을 위한 8080번 포트를 열어 주기 위해서 /etc/sysconfig/iptables
에 아래와 같이 입력한다.
1 | -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT |
iptables 규칙을 만들 때는 순서가 매우 중요하다.
이 때 주의해야 할 것은 위의 4개 코드가 빨간 색의 코드보다 반드시 위에 적혀 있어야 한다.
예를 들어 만일 chain에서 로컬 192.168.100.0/24 서브넷에서 들어오는 모든 패킷을 drop하도록 지정한 후 (drop 하도록 지정된 서브넷에 포함되는) 192.168.100.13에서 들어오는 패킷을 모드 허용하는 chain (-A)을 그 후에 추가하면 뒤에 추가된 추가 규칙이 무시된다.
먼저 192.168.100.13를 허용하는 규칙을 설정한 후 서브넷을 drop하는 규칙을 설정해야한다.
이후에
service iptables restart
명령어를 실행해주면 2개의 포트가 열러서 정상적으로 외부접속이 가능해지는 것을 확인할 수 있다.
로그에 있는 IP 목록을 출력
1 | egrep -o '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' | sort -u |
Check blocked ip addresses
iptables
명령으로 막혀있는 ip address를 출력해 보자. [^3]
1 | $ sudo iptables -L -n --line |
1 | $ sudo iptables -L INPUT -v -n |
참조
iptables Firewall on Ubuntu/Debian