Створіть власний брандмауер за допомогою 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 -A INPUT -s blog.desdelinux.ne -j DROP
      iptables -A OUTPUT -d blog.desdelinux.net -j DROP

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

  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.   Луїс Дюран - сказав він

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