Створіть власний брандмауер за допомогою iptables, використовуючи цей простий сценарій

Я деякий час думав про дві речі щодо iptables: більшість тих, хто шукає ці навчальні посібники, є початківцями, а по-друге, багато хто вже шукає щось досить просте і вже розроблене.

Цей приклад для веб-сервера, але ви можете легко додати більше правил і пристосувати його до своїх потреб.

Коли ви бачите "x", змініть свої ip-адреси


#!/bin/bash

# Ми очищаємо таблиці iptables -F iptables -X # Ми очищаємо NAT iptables -t nat -F iptables -t nat -X # таблиця mangle для таких речей, як PPPoE, PPP та ATM iptables -t mangle -F iptables -t mangle -X # Політика Я вважаю, що це найкращий спосіб для початківців, і # все-таки непогано, я пояснить вихід (вихід) все тому, що це вихідні з'єднання #, вхід ми відкидаємо все, і жоден сервер не повинен пересилати. iptables -P INPUT DROP iptables -P VUTPUT ACCEPT iptables -P FORWARD DROP #Intranet LAN intranet = eth0 #Extranet wan extranet = eth1 # Зберігати стан. Все, що вже підключено (встановлено), залишається так: iptables -A INPUT -m state --state ВСТАНОВЛЕНО, ПОВ'ЯЗАНО -j ACCEPT # Пристрій циклу. iptables -A INPUT -i lo -j ACCEPT # http, https, ми не вказуємо інтерфейс, оскільки # ми хочемо, щоб це були всі iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp - dport 443 -j ACCEPT # ssh лише внутрішньо і з цього діапазону iptables ip -A INPUT -p tcp -s 192.168.xx / 24 -i $ intranet --dport 7659 -j ACCEPT # моніторинг, наприклад, якщо вони мають zabbix або деякі інші послуги snmp iptables -A INPUT -p tcp -s 192.168.xx / 24 -i $ intranet --dport 10050 -j ACCEPT # icmp, пінг добре це залежить від вас iptables -A INPUT -p icmp -s 192.168.xx / 24 - i $ intranet -j ACCEPT #mysql з postgres - це порт 5432 iptables -A INPUT -p tcp -s 192.168.xx --sport 3306 -i $ intranet -j ACCEPT #sendmail bueeeh, якщо ви хочете надіслати деяку пошту # iptables -A OUTPUT -p tcp --dport 25 -j ACCEPT # Anti-SPOOFING 09 # SERVER_IP = "07.xxx" # IP сервера - справжній wan ip вашого сервера LAN_RANGE = "2014.xx / 190 "# Діапазон локальної мережі вашої мережі або вашого vlan # Ip-адреси, які ніколи не повинні входити в екстранет,полягає у використанні трохи логіки, якщо ми маємо суто WAN-інтерфейс, він ніколи не повинен вводити через цей інтерфейс трафік # LAN типу SPOOF_IPS = "192.168/21 0.0.0.0/8 127.0.0.0/8 10.0.0.0/8 172.16.0.0 .12 / 192.168.0.0 "# Дія за замовчуванням - виконується, коли якесь правило відповідає ACTION =" DROP "# Пакети з однаковим ip мого сервера через wan iptables -A INPUT -i $ extranet -s $ SERVER_IP -j $ ACTION # iptables -A OUTPUT -o $ extranet -s $ SERVER_IP -j $ ACTION # Пакети з діапазоном локальної мережі для wan, я ставлю це так, якщо у вас є # будь-яка конкретна мережа, але це зайве з наступним # правилом всередині цикл "for" iptables -A INPUT -i $ extranet -s $ LAN_RANGE -j $ ACTION iptables -A OUTPUT -o $ extranet -s $ LAN_RANGE -j $ ACTION ## Усі мережі SPOOF не дозволяються wan для ip в $ SPOOF_IPS робить iptables -A ВХІД -i $ екстранет -s $ ip -j $ ДІЯ iptables -А ВИХІД -o $ екстранет -s $ ip -j $ ДІЯ виконана

Як завжди, я чекаю ваших коментарів, слідкуйте за цим блогом, дякую


Зміст статті відповідає нашим принципам редакційна етика. Щоб повідомити про помилку, натисніть тут.

12 коментарі, залиште свій

Залиште свій коментар

Ваша електронна адреса не буде опублікований. Обов'язкові для заповнення поля позначені *

*

*

  1. Відповідальний за дані: Мігель Анхель Гатон
  2. Призначення даних: Контроль спаму, управління коментарями.
  3. Легітимація: Ваша згода
  4. Передача даних: Дані не передаватимуться третім особам, за винятком юридичних зобов’язань.
  5. Зберігання даних: База даних, розміщена в мережі Occentus Networks (ЄС)
  6. Права: Ви можете будь-коли обмежити, відновити та видалити свою інформацію.

  1.   HO2Gi - сказав він

    Це допомагає мені продовжувати вчитися ще трохи подяки скопійовано.

    1.    Броди -Далле - сказав він

      ласкаво просимо, раді допомогти

  2.   Ксавьє - сказав він

    Мені дуже шкода, але у мене є два запитання (і одне в подарунок 😉):

    Ви прибули б із такою конфігурацією, щоб Apache працював і закривав решту, крім SSH?

    # Ми прибираємо столи
    Iptables-F
    Iptables-X

    Ми очищаємо NAT

    iptables -t nat -F
    iptables -t nat -X

    iptables -A INPUT -p tcp –dport 80 -j ПРИЙНЯТИ

    ssh лише внутрішньо і з цього діапазону ip

    iptables -A INPUT -p tcp -s 192.168.xx / 24 -i $ Інтранет –port 7659 -j ПРИЙМІТЬ

    Друге питання: чи використовується в цьому прикладі порт 7659 у SSH?

    І третє і останнє: в якому файлі слід зберігати цю конфігурацію?

    Щиро дякую за підручник, ганьба, що ви такий новачок і не можете цим скористатися добре.

    1.    Броди -Далле - сказав він

      це правило потрібно для http з apache
      iptables -A INPUT -p tcp –dport 80 -j ПРИЙНЯТИ

      але вам також потрібно оголосити про скидання політики за замовчуванням (це в сценарії)
      iptables -P INPUT DROP
      iptables -P ВИХІД ACCEPT
      iptables -P ВПЕРЕД ВПАДАННЯ

      і це тому, що якщо ви віддалені, це викине вас.
      iptables -A INPUT -m стан – держава Встановлено, ЗВ'ЯЗАНО -j ACCEPT

      якщо 7659 є портом цього ssh у прикладі, за замовчуванням це 22, хоча я рекомендую вам змінити порт на "невідомий"
      чоловіче, я не знаю, як ти хочеш ... firewall.sh, і ти поміщаєш його в rc.local (sh firewall.sh), щоб він запускався автоматично, це залежить від операційної системи, у якій є файли, де ти може поставити правила безпосередньо.

  3.   jge - сказав він

    Eii, дуже добре, брате ваш сценарій, проаналізувавши його ... Чи знаєте ви, як я міг відмовити усім запитам своїх користувачів на певний веб-сайт? ... але на цьому веб-сайті багато серверів….

    1.    Броди -Далле - сказав він

      Я рекомендую інші варіанти:
      1) Ви можете створити фальшиву зону у своєму dns ...
      2) Ви можете розмістити проксі-сервер з acl
      гріх ембарго
      Для iptables це може сподобатися ... це не завжди найкращий варіант (є більше способів)
      iptables -ВХІД -s blog.desdelinux.ne -j DROP
      iptables -ВИХІД -d blog.fromlinux.net -j КРАПЛЕННЯ

      Скажіть, чи спрацювало

  4.   Ксавьє - сказав він

    Дякую за відповідь, все прояснилося. Я запитував про порт, бо був здивований використанням 7659, оскільки приватні порти починаються з 49152, і це може заважати якійсь службі чи чомусь.
    Знову дякую за все, це приємно!

    Привіт.

  5.   НДЦ - сказав він

    BrodyDalle, як я можу зв’язатися з тобою? Дуже цікавий ваш сценарій.

    1.    Броди -Далле - сказав він
  6.   Карлос - сказав він

    Чи є попередній рядок "iptables -A OUTPUT -o $ extranet -s $ ip -j $ ACTION", щоб запобігти підробці вашої машини? Або можливо, що якийсь отруєний пакет надходить і може вийти з цим отруєним джерелом, і саме тому правило також включено в OUTPUT?
    Щиро дякую за роз'яснення !!!

  7.   Фран - сказав він

    це мій власний сценарій iptables, він дуже повний:

    # franes.iptables.airy
    # doc.iptables.airoso: iptables для застарілих версій та для nft
    #
    # порти брандмауера
    #############################
    #! / бін / баш
    #
    # очистити екран
    ################################ старт /etc/f-iptables/default.cfg |||||
    ясно
    # залиште порожній рядок
    нудьгувати
    експорт так = »» ні = »відлуння»
    # змінні, які ви можете змінити, щоб дозволити доступ
    ####################### змінні для модифікації за допомогою $ yes або $ no
    експортувати hayexcepciones = »$ ні»
    # є винятки: $ yes, щоб дозволити виняткові хости, і $ no, щоб вимкнути
    експорт сінокосів = »$ ні»
    # hayping: $ yes, щоб дозволити сторонній пінг, а $ no - відмовити
    експорт haylogserver = »$ ні»
    # haylogeosserver: $ yes, щоб мати можливість реєструвати tcp $ no, щоб не мати можливості реєструвати tcp
    ######
    ####################### змінні, щоб змінити додавання "," або з діапазонами ":"
    експортні винятки = »baldras.wesnoth.org»
    # винятки дозволяють одиночний або кілька хостів з брандмауера або не мають значення
    експортувати логсервер = відхилити, ipp, dict, ssh
    # порти сервера tcp, які реєструються, коли надходять пакети
    експорт redserver = 0/0
    # redserver: мережа для серверних портів переважно локальна мережа або кілька ips
    експорт клієнта червоний = 0/0
    #clientnet: мережа для клієнтських портів краща за всі мережі
    експорт servidortcp = відкинути, ipp, dict, 6771
    # servidortcp: вказані порти сервера tcp
    експорт serverudp = відкинути
    #udpserver: вказані порти сервера udp
    експортувати clientudp = домен, bootpc, bootps, ntp, 20000: 45000
    #udp client: вказані порти клієнта udp
    експортувати clienttcp = домен, http, https, ipp, git, dict, 14999: 15002
    # клієнт tcp: вказані порти клієнта tcp
    ############################### кінець /etc/f-iptables/default.cfg |||||
    ################################# кінець змінних для модифікації
    експортувати брандмауер = $ 1 змінних = $ 2
    if ["$ variables" = "$ NULL"]; потім джерело /etc/f-iptables/default.cfg;
    else джерело / etc / f-iptables / $ 2; fi
    ################################ або ви перезапишете змінні файлом .cfg
    #################################################### ############################################
    експорт брандмауера = $ 1 змінні експорту = $ 2
    ############################################ автоматичні змінні системи
    if ["$ firewall" = "відключено"]; потім відлуння БІЗОНОВИЙ СТІЛ ВІДКЛЮЧЕНО;
    експортувати activateserver = »$ no» activateclient = »$ no» wet = »$ no»;
    elif ["$ firewall" = "client"]; потім echo КЛІЄНТ БРІОННОЇ СТЕНИ;
    експортувати activateserver = »$ no» activateclient = »» wet = »$ no»;
    elif ["$ firewall" = "сервер"]; потім echo СЕРВЕР БРОЙОВОК;
    експортувати activateserver = »» activateclient = »$ no» wet = »$ no»;
    elif ["$ firewall" = "клієнт і сервер"]; потім луна КЛІЄНТ І СЕРВЕР БРОЙНОГО СТЕНУ;
    експорт активувати сервер = »»; експорт activateclient = »»; експорт мокрий = »$ ні»;
    elif ["$ firewall" = "дозвільний"]; потім луна ДОЗВІЛЬНИЙ БІЗНЕСОВИЙ БІЗНЕС;
    експортувати activateserver = »$ no» activateclient = »$ no» wet = »»;
    ще
    $ check sudo echo iptables-legacy:
    $ check sudo iptables-legacy -v -L INPUT
    $ check sudo iptables-legacy -v -L ВИХІД
    $ check sudo echo iptables-nft:
    $ check sudo iptables-nft -v -L INPUT
    $ check sudo iptables-nft -v -L ВИХІД
    ехо _____параметри ____ 0 $ 1 $ 2
    echo "привід без параметрів - це перелік iptables."
    echo "Перший параметр (увімкнути iptables): відключений або клієнт, або сервер, або клієнт, і сервер, або дозвіл."
    echo "Другий параметр: (необов'язково): файл default.cfg вибирає /etc/f-iptables/default.cfg"
    echo "Налаштування змінних:" $ (ls / etc / f-iptables /)
    вихід 0; fi
    ##################
    нудьгувати
    echo Кидає $ 0 відключеним або клієнтом, або сервером, або клієнтом, і сервером, або дозволом, або змінними, або без використання параметра для переліку iptables.
    echo Файл $ 0 містить деякі змінні змінні всередині.
    ################################# вищевказані змінні активовані
    ###################################
    echo встановлення змінних iptables
    ехо-активовані змінні
    нудьгувати
    ############################# правила iptables
    echo Встановлення iptables-legacy
    sudo / usr / sbin / iptables-legacy -t filter -F
    sudo / usr / sbin / iptables-legacy -t nat -F
    sudo / usr / sbin / iptables-legacy -t mangle -F
    sudo / usr / sbin / ip6tables-legacy -t filter -F
    sudo / usr / sbin / ip6tables-legacy -t nat -F
    sudo / usr / sbin / ip6tables-legacy -t mangle -F
    sudo / usr / sbin / ip6tables-legacy -A INPUT -j DROP
    sudo / usr / sbin / ip6tables-legacy -A OUTPUT -j DROP
    sudo / usr / sbin / ip6tables-legacy -A FORWARD -j DROP
    sudo / usr / sbin / iptables-legacy -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT> / dev / null
    $ haylogserver sudo / usr / sbin / iptables-legacy -A INPUT -p tcp -m multiport –dports $ logserver -j LOG> / dev / null
    $ hayeexceptions sudo / usr / sbin / iptables-legacy -A INPUT -s $ exceptions -j ACCEPT> / dev / null
    $ activate sudo server / usr / sbin / iptables-legacy -A INPUT -p udp -m multiport –dports $ serverudp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ активуйте сервер sudo / usr / sbin / iptables-legacy -A INPUT -p tcp -m multiport –dports $ serverrtcp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ activateclient sudo / usr / sbin / iptables-legacy -A INPUT -p udp -m multiport –sports $ clientudp -m state –state state -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
    $ activateclient sudo / usr / sbin / iptables-legacy -A INPUT -p tcp -m multiport –sports $ clienttcp -m state -state -state -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
    $ hayping sudo / usr / sbin / iptables-legacy -A INPUT -p icmp –icmp-type echo-reply -j ACCEPT> / dev / null
    sudo / usr / sbin / iptables-legacy -A INPUT -j DROP> / dev / null
    sudo / usr / sbin / iptables-legacy -A OUTPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT> / dev / null
    $ hayexceptions sudo / usr / sbin / iptables-legacy -A ВИХІД -d $ винятки -j ACCEPT> / dev / null
    $ activate sudo server / usr / sbin / iptables-legacy -A OUTPUT -p udp -m multiport –sports $ serverudp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ активуйте сервер sudo / usr / sbin / iptables-legacy -А ВИХІД -p tcp -m мультипорт –sports $ serverrtcp -s $ redserver -d $ redserver -j ПРИЙМИТИ> / dev / null
    $ activateclient sudo / usr / sbin / iptables-legacy -A ВИХІД -p udp -m мультипорт –dports $ clientudp -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
    $ activateclient sudo / usr / sbin / iptables-legacy -А ВИХІД -p tcp -m мультипорт –dports $ clienttcp -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
    $ hayping sudo / usr / sbin / iptables-legacy -A OUTPUT -p icmp –icmp-type echo-request -j ACCEPT> / dev / null
    sudo / usr / sbin / iptables-legacy -A OUTPUT -j DROP
    sudo / usr / sbin / iptables-legacy -A FORWARD -j DROP
    echo iptables-legacy увімкнено
    нудьгувати
    echo Налаштування iptables-nft
    sudo / usr / sbin / iptables-nft -t filter -F
    sudo / usr / sbin / iptables-nft -t nat -F
    sudo / usr / sbin / iptables-nft -t mangle -F
    sudo / usr / sbin / ip6tables-nft -t filter -F
    sudo / usr / sbin / ip6tables-nft -t nat -F
    sudo / usr / sbin / ip6tables-nft -t mangle -F
    sudo / usr / sbin / ip6tables-nft -A INPUT -j DROP
    sudo / usr / sbin / ip6tables-nft -A ВИХІД -j КРАПЛЕННЯ
    sudo / usr / sbin / ip6tables-nft -A FORWARD -j DROP
    sudo / usr / sbin / iptables-nft -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT> / dev / null
    $ haylogserver sudo / usr / sbin / iptables-nft -A INPUT -p tcp -m multiport –dports $ logserver -j LOG> / dev / null
    $ hayeexceptions sudo / usr / sbin / iptables-nft -A INPUT -s $ exceptions -j ACCEPT> / dev / null
    $ активуйте сервер sudo / usr / sbin / iptables-nft -A INPUT -p udp -m multiport –dports $ serverudp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ activate server sudo / usr / sbin / iptables-nft -A INPUT -p tcp -m multiport –dports $ serverrtcp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ activateclient sudo / usr / sbin / iptables-nft -A INPUT -p udp -m multiport –sports $ clientudp -m state –state state -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
    $ activateclient sudo / usr / sbin / iptables-nft -A INPUT -p tcp -m multiport –sports $ clienttcp -m state -state -state -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
    $ hayping sudo / usr / sbin / iptables-nft -A INPUT -p icmp –icmp-type echo-reply -j ACCEPT> / dev / null
    sudo / usr / sbin / iptables-nft -A INPUT -j DROP> / dev / null
    sudo / usr / sbin / iptables-nft -A OUTPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT> / dev / null
    $ є винятки sudo / usr / sbin / iptables-nft -A ВИХІД -d $ винятки -j ACCEPT> / dev / null
    $ активуйте сервер sudo / usr / sbin / iptables-nft -A ВИХІД -p udp -m мультипорт –спорт $ serverudp -s $ redserver -d $ redserver -j ПРИЙМЯТЬ> / dev / null
    $ активуйте сервер sudo / usr / sbin / iptables-nft -A ВИХІД -p tcp -m мультипорт –sports $ serverrtcp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ activateclient sudo / usr / sbin / iptables-nft -A ВИХІД -p udp -m мультипорт –dports $ clientudp -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
    $ activateclient sudo / usr / sbin / iptables-nft -A OUTPUT -p tcp -m multiport –dports $ clienttcp -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
    $ hayping sudo / usr / sbin / iptables-nft -A OUTPUT -p icmp –icmp-type echo-request -j ACCEPT> / dev / null
    sudo / usr / sbin / iptables-nft -A ВИХІД -j КРАПЛЕННЯ
    sudo / usr / sbin / iptables-nft -A FORWARD -j DROP
    echo iptables-nft увімкнено
    нудьгувати
    $ wet sudo / usr / sbin / iptables-legacy -F> / dev / null
    $ wet sudo / usr / sbin / iptables-legacy -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT> / dev / null
    $ wet sudo / usr / sbin / iptables-legacy -A INPUT -m state –state state -j ACCEPT> / dev / null
    $ wet sudo / usr / sbin / iptables-legacy -A INPUT -j DROP> / dev / null
    $ wet sudo / usr / sbin / iptables-legacy -A OUTPUT -j ACCEPT> / dev / null
    $ wet sudo / usr / sbin / iptables-legacy -A FORWARD -j DROP> / dev / null
    $ wet sudo / usr / sbin / iptables-nft -F> / dev / null
    $ wet sudo / usr / sbin / iptables-nft -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT> / dev / null
    $ wet sudo / usr / sbin / iptables-nft -A INPUT -m state –state state -j ACCEPT> / dev / null
    $ wet sudo / usr / sbin / iptables-nft -A INPUT -j DROP> / dev / null
    $ wet sudo / usr / sbin / iptables-nft -A OUTPUT -j ACCEPT> / dev / null
    $ wet sudo / usr / sbin / iptables-nft -A FORWARD -j DROP> / dev / null
    ###########################
    ехо ви кинули $ 0 $ 1 $ 2
    # виходить із сценарію
    вихід 0

  8.   Луїс Дюран - сказав він

    Як би я встановив правило, якщо брандмауер використовував його для мого шлюзу і мав кальмар всередині локальної мережі ???