Допустим на сервере по умолчанию INPUT DROP, теперь приведу пример простого правила разрешающего DHCP запросы к серверу, этого будет достаточно чтобы клиенты получили IP от сервера (где em1 — сетевой интерфейс на котором запущен DHCP сервер):
Читать далее «IPTables правила для DHCP»Архивы меток:IPTables
Решение ошибки «Another app is currently holding the xtables lock»
Недавно заметил на одном сервере с биллинговой системой ABillS, что при массовом выполнении скрипта /etc/ppp/ip-up возникает ошибка:
Another app is currently holding the xtables lock. Perhaps you want to use the -w option?
Посмотрев код скрипта обнаружил, что среди iptables правил есть два, которые могут тормозить работу, а именно выполнялся поиск ipoe интерфейсов двумя командами:
IPTABLES="/sbin/iptables" EXIST=`${IPTABLES} -t nat -L PREROUTING -v | grep "${IFNAME} "; ${IPTABLES} -L -v | grep DROP | grep "${IFNAME} "`
Для поднятия 3000 сессий, уходило более 30 минут и часть правил могла вовсе не добавится или не удалится скриптом.
По умолчанию если используется ключ -L то iptables резолвит IP адреса и пытается отобразить вместо них DNS имена, что занимает много времени, и чтобы это не происходило, нужно добавить еще ключ -n, а также на всякий случай я добавил ключ -w 20, который заставит отложить выполнение новых правил до 20 секунд если iptables уже занят выполнение другой команды:
IPTABLES="/sbin/iptables" IPTABLES_WAIT="-w 20" EXIST=`${IPTABLES} $IPTABLES_WAIT -t nat -n -L PREROUTING -v | grep "${IFNAME} "; ${IPTABLES} $IPTABLES_WAIT -n -L -v | grep DROP | grep "${IFNAME} "`
После этого скрипт с iptables правилами начал отрабатывать мгновенно.
Так как старые правила не все выполнились, я проверил это посчитав некоторые командой:
iptables -n -L -t nat -v | grep DNAT | wc -l
И сверил с количеством сессий, правил явно было меньше, поэтому пришлось очистить все правила и перезапустить сессии чтобы скрипт /etc/ppp/ip-up отработал правильно, на этот раз при 3000 сессиях он сделал свою работу менее чем за минуту.
Замечу что в скриптах /etc/ppp/ лучше не использовать правила iptables.
IPTables правила для веб-сервера
Чтобы открыть порт веб-сервера в IPTables выполним команду:
iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
Если используется HTTPS, то выполним также:
iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
Чтобы открыть доступ только конкретной сети, например 192.168.0.0/24:
sudo iptables -A INPUT -s 192.168.0.0/24 -p tcp -m tcp --dport 80 -j ACCEPT
Можно также ограничить доступ по IP конфигурацией самого веб сервера, например как я описывал для Apache2 в этой статье — Контроль доступа Apache2.
Чтобы установить лимит подключений на порт 80:
iptables -A INPUT -p tcp --dport 80 -m limit --limit 50/second -j ACCEPT
Чтобы удалить правило укажем ту же команду, заменив -A на -D, например:
sudo iptables -D INPUT -p tcp -m tcp --dport 80 -j ACCEPT
Посмотреть список правил можно командой:
sudo iptables -nvL
Смотрите также:
Настройка IPTables
IPTables правила для SSH
Чтобы открыть доступ к SSH серверу в IPTables необходимо добавить правило:
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
Чтобы открыть доступ только конкретной сети, например 192.168.0.0/24:
sudo iptables -A INPUT -s 192.168.0.0/24 -p tcp --dport 22 -j ACCEPT
Можно также ограничить доступ по IP конфигурацией самого SSH.
Чтобы удалить правило укажем ту же команду, заменив -A на -D, например:
sudo iptables -D INPUT -p tcp --dport 22 -j ACCEPT
Посмотреть список правил можно командой:
sudo iptables -nvL
Смотри также:
Установка и настройка SSH
Настройка IPTables
IPTables правила для Iperf
Посмотрим текущие правила IPTables:
iptables -nvL
Чтобы открыть порт серверу Iperf добавим правило:
sudo iptables -A INPUT -p tcp --dport 5001 -j ACCEPT
Чтобы открыть порт конкретному IP или сети:
sudo iptables -A INPUT -s 192.168.5.11/32 -p tcp --dport 5001 -j ACCEPT
Смотри также мои статьи:
Настройка IPTables
Тестируем пропускную способности сети с помошью Iperf
IPTables правила для ntopng
Первым делом посмотрим текущие правила IPTables:
iptables -nvL
Чтобы открыть порт ntopng добавим правило:
sudo iptables -A INPUT -m tcp -p tcp --dport 3000 -j ACCEPT
Чтобы открыть порт ntopng только для конкретной сети или IP:
sudo iptables -A INPUT -m tcp -p tcp --dport 3000 -s 10.0.0.0/24 -j ACCEPT
Смотри также мои статьи:
Настройка IPTables
Установка и настройка ntopng
IPTables правила для nprobe
Первым делом посмотрим текущие правила IPTables:
iptables -nvL
Чтобы nprobe мог принимать NetFlow данные, откроем ему порт:
sudo iptables -A INPUT -p udp --dport 2055 -j ACCEPT
Чтобы nprobe мог принимать NetFlow данные только от конкретной сети или IP:
sudo iptables -A INPUT -s 10.0.0.0/24 -p udp --dport 2055 -j ACCEPT
Смотри также мои статьи:
Настройка IPTables
Установка и настройка nprobe
IPTables правила для MySQL
Если в iptables блокируются все входящие соединения (INPUT DROP) и чтобы открыть внешний доступ к MySQL необходимо добавить правила:
iptables -A INPUT -p tcp -m tcp --dport 3306 -j ACCEPT
Чтобы открыть доступ только конкретной сети, например 10.0.0.0/24:
iptables -A INPUT -s 10.0.0.0/24 -p tcp -m tcp --dport 3306 -j ACCEPT
Чтобы удалить правило укажем ту же команду, заменив -A на -D, например:
iptables -D INPUT -p tcp -m tcp --dport 3306 -j ACCEPT
Посмотреть список правил можно командой:
sudo iptables -nvL
Замечу, для того чтобы открыть внешний доступ, также нужно в конфигурационном файле my.cnf закомментировать строку «bind-address = 127.0.0.1».
Если по умолчанию INPUT ACCEPT, то сначала укажем с каких IP разрешен доступ, а только последним правилом заблокируем всем остальным:
/sbin/iptables -A INPUT -s 127.0.0.1 -p tcp --destination-port 3306 -j ACCEPT /sbin/iptables -A INPUT -s 192.168.1.5 -p tcp --destination-port 3306 -j ACCEPT /sbin/iptables -A INPUT -p tcp --dport 3306 -j DROP
Например используя nmap можно проверить локально и внешне фильтруется ли доступ:
nmap -p 3306 localhost nmap -p 3306 192.168.1.5
Смотри также:
Настройка IPTables
Другие мои статьи о MySQL
IPTables правила для NTP и SNTP
Чтобы открыть доступ NTP клиенту и серверу в IPTables необходимо добавить правила:
Читать далее «IPTables правила для NTP и SNTP»IPTables правила для FTP сервера
Чтобы открыть доступ к FTP серверу в IPTables необходимо добавить правила:
sudo iptables -A INPUT -p tcp --dport 21 -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 20 -j ACCEPT sudo iptables -A INPUT -p tcp --dport 1024:1030 -j ACCEPT
Чтобы открыть доступ только конкретной сети, например 192.168.1.0/24:
sudo iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 21 -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 20 -j ACCEPT sudo iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 1024:1030 -j ACCEPT
Чтобы удалить правило укажем ту же команду, заменив -A на -D, например:
sudo iptables -D INPUT -p tcp --dport 21 -j ACCEPT sudo iptables -D OUTPUT -p tcp --sport 20 -j ACCEPT sudo iptables -D INPUT -p tcp --dport 1024:1030 -j ACCEPT
Посмотреть список правил можно командой:
sudo iptables -nvL
1024-1030 — пример портов для пассивного режима, указываются в конфигурации FTP сервера, например для ProFTPd указываются в файле /etc/proftpd/proftpd.conf так:
PassivePorts 1024 1030
Смотри также мои статьи:
Настройка IPTables
Активный и пассивный режим работы FTP
Установка и настройка Pure-FTPd в Ubuntu
Установка и настройка ProFTPd в Ubuntu