Управління мережевим трафіком це одна з найскладніших робіт, з якою доводиться стикатися системним адміністраторам. Він повинен налаштувати брандмауер таким чином, щоб він відповідав вимогам системи та користувачів як для вхідних, так і для вихідних з'єднань, не залишаючи систему вразливою для атак.
Ось де iptables
стане в нагоді. Iptables - це брандмауер командного рядка Linux, що дозволяє системним адміністраторам керувати вхідним і вихідним трафіком за допомогою набору правил таблиці, які можна налаштувати.
Iptables використовує набір таблиць, які мають ланцюжки, що містять набір вбудованих або визначених користувачем правил. Завдяки їм системний адміністратор може належним чином фільтрувати мережевий трафік своєї системи.
У посібнику з iptables наразі існує 3 типи таблиць:
ФІЛЬТР
- це таблиця за замовчуванням, яка містить вбудовані ланцюжки для: NAT
- таблиця, до якої звертаються, коли пакет намагається створити нове з'єднання. У нього вбудовано наступне: ЧАНГЛ
- ця таблиця використовується для зміни пакетів. До версії ядра 2.4 у цій таблиці було всього два ланцюга, але тепер їх 5: У цій статті ви побачите кілька корисних команд, які допоможуть вам керувати брандмауером Linux box через iptables. Для цілей цієї статті я почну з більш простих команд і перейду до більш складних до кінця.
По -перше, ви повинні знати, як керувати службою iptables у різних дистрибутивах Linux. Це досить легко:
На Cent/RHEL 7 і Fedora 22+ # systemctl запуск iptables. # systemctl зупинити iptables. # systemctl перезавантажте iptables.
На Cent/RHEL 6/5 і Fedora # /etc/init.d/iptables початок # /etc/init.d/iptables зупинка. # /etc/init.d/iptables перезапустити.
Якщо ви хочете перевірити існуючі правила, скористайтеся такою командою:
# iptables -L -n -v.
Це повинно повернути результат, подібний до наведеного нижче:
Ланцюговий ВХІД (пакети політики ACCEPT 1129K, 415M байт) pkts байт цільовий prot ввімкнути вихідне джерело призначення 0 0 ACCEPT tcp - lxcbr0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt: 53 0 0 ACCEPT udp - lxcbr0 * 0.0.0.0/0 0.0.0.0/0 udp dpt: 53 0 0 ACCEPT tcp - lxcbr0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt: 67 0 0 ACCEPT udp - lxcbr0 * 0.0.0.0/0 0.0.0.0/0 udp dpt: 67
Ланцюжок ВПЕРЕД (політика ACCEPT 0 пакетів, 0 байтів) pkts байт цільовий prot увімкнути вихідне джерело призначення 0 0 ACCEPT all - * lxcbr0 0.0.0.0/0 0.0.0.0/0 0 0 ACCEPT all - lxcbr0 * 0.0.0.0/ 0 0,0.0.0/0
Ланцюговий ВИХІД (політика ACCEPT 354K пакетів, 185M байт) pkts байт цільова prot увімкнути вихідний пункт призначення
Якщо ви бажаєте перевірити правила для певної таблиці, ви можете скористатися -t
параметр, а потім таблиця, яку потрібно перевірити. Наприклад, щоб перевірити правила в NAT
таблиці, можна використовувати:
# iptables -t nat -L -v -n.
Якщо ви виявили незвичну або образливу діяльність з IP -адреси, ви можете заблокувати цю IP -адресу за допомогою такого правила:
# iptables -A INPUT -s xxx.xxx.xxx.xxx -j DROP.
Де потрібно змінити "xxx.xxx.xxx.xxx"
з фактичною IP -адресою. Будьте дуже обережні під час виконання цієї команди, оскільки ви можете випадково заблокувати власну IP -адресу. -А
Параметр додає правило в кінці вибраного ланцюжка.
Якщо ви хочете лише заблокувати TCP трафік з цієї IP -адреси, ви можете використовувати -стор
параметр, який визначає протокол. Таким чином команда буде виглядати так:
# iptables -A INPUT -p tcp -s xxx.xxx.xxx.xxx -j DROP.
Якщо ви вирішили, що більше не хочете блокувати запити з певної IP -адреси, ви можете видалити правило блокування за допомогою такої команди:
# iptables -D INPUT -s xxx.xxx.xxx.xxx -j DROP.
-D
Параметр видаляє одне або кілька правил із вибраного ланцюжка. Якщо ви вважаєте за краще використовувати довший варіант, ви можете скористатися -видалити
.
Іноді вам може знадобитися заблокувати вхідні або вихідні з'єднання на певному порту. Це хороший захід безпеки, і вам слід подумати над цим під час налаштування брандмауера.
Щоб заблокувати вихідні з'єднання на певному порту, виконайте наведені нижче дії.
# iptables -A ВИХІД -p tcp --dport xxx -j DROP.
Щоб дозволити вхідні з'єднання, використовуйте:
# iptables -A INPUT -p tcp --dport xxx -j ACCEPT.
В обох прикладах зміни "ххх"
з фактичним портом, який ви хочете дозволити. Якщо ви хочете заблокувати UDP трафік замість TCP, просто змінити "tcp"
з "udp"
у наведеному вище правилі iptables.
Ви можете дозволити кілька портів одночасно, використовуючи багатопортовий, нижче ви можете знайти таке правило як для вхідних, так і для вихідних з'єднань:
# iptables -A INPUT -p tcp -m multiport --dports 22,80,443 -j ACCEPT. # iptables -A ВИХІД -p tcp -m multiport --sports 22,80,443 -j ACCEPT.
Ви можете обмежити певні з'єднання на певному порту певною мережею. Скажімо, ви хочете дозволити вихідні з'єднання на порту 22
до мережі 192.168.100.0/24
.
Ви можете зробити це за допомогою цієї команди:
# iptables -A ВИХІД -p tcp -d 192.168.100.0/24 --dport 22 -j ACCEPT.
Деякі роботодавці люблять блокувати доступ до Facebook своїм працівникам. Нижче наведено приклад, як заблокувати трафік на Facebook.
Примітка: Якщо ви системний адміністратор і вам потрібно застосовувати ці правила, пам’ятайте, що ваші колеги можуть перестати спілкуватися з вами :)
Спочатку знайдіть IP -адреси, які використовує Facebook:
# хост facebook.com facebook.com має адресу 66.220.156.68.
# whois 66.220.156.68 | grep CIDR. CIDR: 66.220.144.0/20.
Потім ви можете заблокувати цю мережу Facebook за допомогою:
# iptables -A ВИХІД -p tcp -d 66.220.144.0/20 -j DROP.
Майте на увазі, що діапазон IP -адрес, який використовується Facebook, може відрізнятися у вашій країні.
Іноді вам може знадобитися перенаправити трафік однієї служби на інший порт. Цього можна досягти за допомогою такої команди:
# iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 25 -j REDIRECT --to -port 2525.
Наведена вище команда пересилає весь вхідний трафік на мережевому інтерфейсі eth0
, з порту 25
до порту 2525
. Ви можете змінити порти на потрібні.
Іноді IP -адреси можуть вимагати занадто багато підключень до веб -портів на вашому веб -сайті. Це може спричинити ряд проблем, і для запобігання таким проблемам можна скористатися таким правилом:
# iptables -A INPUT -p tcp --dport 80 -m limit -limit 100/minute -limit -burst 200 -j ACCEPT.
Наведена вище команда обмежує вхідні з'єднання від хвилини до 100
і встановлює граничний пакет 200
. Ви можете редагувати ліміт і ліміт-сплеск відповідно до власних вимог.
Деякі системні адміністратори люблять блокувати вхідні запити пінгу через проблеми безпеки. Хоча загроза не така велика, добре знати, як заблокувати такий запит:
# iptables -A INPUT -p icmp -i eth0 -j DROP.
Шлюзовий доступ (доступ з 127.0.0.1
) важливо, і ви завжди повинні залишати його активним:
# iptables -A INPUT -i lo -j ACCEPT. # iptables -A ВИХІД -o lo -j ACCEPT.
Якщо ви хочете зареєструвати втрачені пакети на мережевому інтерфейсі eth0
, можна скористатися такою командою:
# iptables -A INPUT -i eth0 -j LOG --log -prefix "IP -таблиці скинули пакети:"
Після можна змінити значення "--log-prefix"
з чимось на ваш вибір. Повідомлення зареєстровані /var/log/messages
і ви можете шукати їх за допомогою:
# grep "IP -таблиці скинули пакети:"/var/log/messages.
Ви можете заблокувати доступ до вашої системи з певної MAC -адреси, використовуючи:
# iptables -A INPUT -m mac --mac -source 00: 00: 00: 00: 00: 00 -j DROP.
Звичайно, вам доведеться змінитися "00:00:00:00:00:00"
з фактичною MAC -адресою, яку потрібно заблокувати.
Якщо ви не хочете, щоб з однієї IP -адреси на даному порту було встановлено занадто багато одночасного з'єднання, ви можете скористатися командою нижче:
# iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit -above 3 -j REJECT.
Наведена вище команда дозволяє не більше ніж 3
з'єднань на одного клієнта. Звичайно, ви можете змінити номер порту відповідно до різних послуг. Також --connlimit-вище
слід змінити відповідно до ваших вимог.
Після того, як ви визначите свої правила iptables, вам час від часу захочеться шукати і, можливо, доведеться їх змінити. Найпростіший спосіб пошуку у межах ваших правил - це:
# iptables -L $ таблиця -v -n | grep $ рядок.
У наведеному вище прикладі вам потрібно буде змінити $ таблиця
з фактичною таблицею, у якій ви хочете шукати, і $ рядок
з фактичним рядком, який ви шукаєте.
Ось приклад:
# iptables -L INPUT -v -n | grep 192.168.0.100.
За допомогою iptables ви можете визначити свій власний ланцюжок і зберігати в ньому власні правила. Щоб визначити ланцюжок, використовуйте:
# iptables -N користувацький фільтр.
Тепер ви можете перевірити, чи є ваш новий фільтр:
# iptables -L.
Ланцюговий ВХІД (політика ACCEPT) цільова опція вихідного призначення.
Ланцюжок ВПЕРЕД (політика ACCEPT) цільова опція вихідного призначення
Ланцюговий вихід (політика ACCEPT) цільова опція вихідного призначення
Ланцюг користувацький фільтр(0 посилань) цільова опція вихідного призначення
Якщо ви хочете очистити ланцюжки брандмауера, ви можете використовувати:
# iptables -F
Ви можете змити ланцюжки з певної таблиці за допомогою:
# iptables -t nat -F.
Ви можете змінити "нат"
з фактичною таблицею, ланцюжки якої ви хочете змити.
Якщо ви хочете зберегти свої правила брандмауера, ви можете скористатися iptables-save
команду. Ви можете використовувати наступне, щоб зберегти та зберегти свої правила у файлі:
# iptables-save> ~/iptables.ru правила.
Де ви будете зберігати файл і як його назвати, вирішувати вам.
Якщо ви хочете відновити список правил iptables, ви можете скористатися iptables-відновлення
. Команда виглядає так:
# iptables-restoreЗвичайно, шлях до вашого файлу правил може бути іншим.
21. Налаштування правил таблиць IP для відповідності PCI
Деяким системним адміністраторам може знадобитися налаштувати свої сервери на сумісність із PCI. Різних постачальників стандартів PCI існує багато вимог, але поширених є небагато.
У багатьох випадках вам потрібно мати більше однієї IP -адреси. Вам потрібно буде застосувати наведені нижче правила щодо IP -адреси сайту. Будьте особливо обережними, використовуючи наведені нижче правила, і використовуйте їх, лише якщо ви впевнені, що робите:
# iptables -I INPUT -d САЙТ -p tcp -m мультипорт --dports 21,25,110,143,465,587,993,995 -j DROP.Якщо ви використовуєте cPanel або подібну панель управління, можливо, вам також доведеться заблокувати її порти. Ось приклад:
# iptables -I in_sg -d DEDI_IP -p tcp -m multiport --dports 2082,2083,2095,2096,2525,2086,2087 -j DROP.Примітка: Щоб переконатися, що ви відповідаєте вимогам постачальника PCI, уважно перевірте їх звіт та застосуйте необхідні правила. У деяких випадках вам також може знадобитися заблокувати UDP -трафік на певних портах.
22. Дозволити встановлені та пов’язані з’єднання
Оскільки мережевий трафік розділений на вхідний та вихідний, вам потрібно дозволити встановлений та пов’язаний вхідний трафік. Для вхідних з'єднань зробіть це за допомогою:
# iptables -A INPUT -m conntrack --ctstate ВСТАНОВЛЕНО, ПОВ'ЯЗАНО -j ACCEPT.Для вихідного використання:
# iptables -A ВИХІД -m conntrack --ctstate ВСТАНОВЛЕНО -j ПРИЙНЯТЬ.23. Вставте недійсні пакети в IP -таблиці
Можливо, деякі мережеві пакети позначені як недійсні. Деякі люди можуть вважати за краще реєструвати ці пакети, але інші вважають за краще скинути їх. Щоб скинути недійсні пакети, можна скористатися:
# iptables -A INPUT -m conntrack --ctstate INVALID -j DROP24. Заблокувати з'єднання на мережевому інтерфейсі
Деякі системи можуть мати кілька мережевих інтерфейсів. Ви можете обмежити доступ до цього мережевого інтерфейсу або заблокувати з'єднання з певної IP -адреси.
Наприклад:
# iptables -A ВХІД -i eth0 -s xxx.xxx.xxx.xxx -j DROP.Змінити “Xxx.xxx.xxx.xxx” з фактичною IP -адресою (або мережею), яку потрібно заблокувати.
25. Вимкніть вихідні листи через IP -таблиці
Якщо ваша система не повинна надсилати електронні листи, ви можете заблокувати вихідні порти на портах SMTP. Наприклад, ви можете використовувати це:
# iptables -A ВИХІД -p tcp --dports 25,465,587 -j ВІДМОВИТИ.Висновок
Iptables це потужний брандмауер, з якого ви можете легко скористатися. Кожному системному адміністратору життєво важливо вивчити принаймні основи iptables. Якщо ви хочете знайти більш детальну інформацію про iptables та його параметри, настійно рекомендуємо прочитати його посібник:
# людина iptables.Якщо ви вважаєте, що нам слід додати ще команди до цього списку, поділіться ними з нами, подавши їх у розділі коментарів нижче.