Настройка файрвола. iptables

Для того, чтобы ограничить доступ в нашу сеть извне не навредив, нужно иметь представление какие ресурсы используют приложения, работающие на сервере. Для этого убедимся, что все службы сервера запущены (httpd, named и т.д.) и определим открытые порты.

Пусть внешний интерфейс eth1 имеет адрес 81.81.81.81.

Проверим открытые порты командой:
# netcat -v -w 4 -z 81.81.81.81 1-1023 | grep succeed
либо
# nmap -sT -O 81.81.81.81
Посмотрим кто сопоставлен, к примеру, с портом 111:
# cat /etc/services | grep 111

sunrpc 111/tcp portmapper # RPC 4.0 portmapper TCP
sunrpc 111/udp portmapper # RPC 4.0 portmapper UDP

Посмотрим, кто его прослушивает:
# netstat -anp | grep 111

tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 2457/portmap
udp 0 0 0.0.0.0:111 0.0.0.0:* 2457/portmap

Посмотрим используется ли он сейчас:
# lsof -i | grep 111
Прописываем правила, закрывающие все порты за исключением 25 (smtp: принимаем почту) и 80 (http: показываем web страницы)

# iptables -A INPUT -i eth1 -p tcp --dport 25 -j ACCEPT
# iptables -A INPUT -i eth1 -p tcp --dport 80 -j ACCEPT
# iptables -A INPUT -i eth1 -p tcp -m tcp --tcp-flags FIN,SYN,ACK SYN -j REJECT --reject-with icmp-port-unreachable
# iptables -A FORWARD -o eth1 -p tcp -j DROP


Теперь наш сервер прикрыт с внешнего мира. Запуск команд netcat и nmap c самого сервера покажет тоже, что и до внесения правил, но если пробовать с другого компьютера, то заметим результат: доступ везде прикрыт, кроме как на разрешённые нами 25 и 80 порты.
Можно посмотреть действующие правила:


# iptables -L

Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- anywhere anywhere tcp dpt:smtp
ACCEPT tcp -- anywhere anywhere tcp dpt:http
REJECT tcp -- anywhere anywhere tcpflags:FIN,SYN,ACK/SYN reject-with icmp-port-unreachable

Chain FORWARD (policy ACCEPT)
target prot opt source destination
DROP tcp -- anywhere anywhere

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

Или те же правила в виде команд:


# iptables-save

# Generated by iptables-save v1.3.1 on Wed Aug 30 14:30:11 2006
*nat
:PREROUTING ACCEPT [2784:423873]
:POSTROUTING ACCEPT [1822:103126]
:OUTPUT ACCEPT [1805:100270]
COMMIT
# Completed on Wed Aug 30 14:30:11 2006
# Generated by iptables-save v1.3.1 on Wed Aug 30 14:30:11 2006
*filter
:INPUT ACCEPT [28890:12820098]
:FORWARD ACCEPT [22:3088]
:OUTPUT ACCEPT [30305:14410374]
-A INPUT -i eth1 -p tcp -m tcp --dport 25 -j ACCEPT
-A INPUT -i eth1 -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -i eth1 -p tcp -m tcp --tcp-flags FIN,SYN,ACK SYN -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -o eth1 -p tcp -j DROP
COMMIT
# Completed on Wed Aug 30 14:30:11 2006

Чтобы запомнить эти правила смотрим в /etc/init.d/iptables откуда берёт iptables свою конфигурацию при старте. Видим, что хранит он её в /etc/sysconfig/iptables. Сохраняем новую конфигурацию в этот файл:


# iptables-save > /etc/sysconfig/iptables


Теперь при запуске системы прописанные нами правила восстановятся.

Обновлено: 13.03.2015