Я деякий час думав про дві речі щодо 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 $ ДІЯ виконана
Як завжди, я чекаю ваших коментарів, слідкуйте за цим блогом, дякую
Це допомагає мені продовжувати вчитися ще трохи подяки скопійовано.
ласкаво просимо, раді допомогти
Мені дуже шкода, але у мене є два запитання (і одне в подарунок 😉):
Ви прибули б із такою конфігурацією, щоб 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?
І третє і останнє: в якому файлі слід зберігати цю конфігурацію?
Щиро дякую за підручник, ганьба, що ви такий новачок і не можете цим скористатися добре.
це правило потрібно для 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), щоб він запускався автоматично, це залежить від операційної системи, у якій є файли, де ти може поставити правила безпосередньо.
Eii, дуже добре, брате ваш сценарій, проаналізувавши його ... Чи знаєте ви, як я міг відмовити усім запитам своїх користувачів на певний веб-сайт? ... але на цьому веб-сайті багато серверів….
Я рекомендую інші варіанти:
1) Ви можете створити фальшиву зону у своєму dns ...
2) Ви можете розмістити проксі-сервер з acl
гріх ембарго
Для iptables це може сподобатися ... це не завжди найкращий варіант (є більше способів)
iptables -A INPUT -s blog.desdelinux.ne -j DROP
iptables -A OUTPUT -d blog.desdelinux.net -j DROP
Скажіть, чи спрацювало
Дякую за відповідь, все прояснилося. Я запитував про порт, бо був здивований використанням 7659, оскільки приватні порти починаються з 49152, і це може заважати якійсь службі чи чомусь.
Знову дякую за все, це приємно!
Привіт.
BrodyDalle, як я можу зв’язатися з тобою? Дуже цікавий ваш сценарій.
soulofmarionet_1@hotmail.com
Чи є попередній рядок "iptables -A OUTPUT -o $ extranet -s $ ip -j $ ACTION", щоб запобігти підробці вашої машини? Або можливо, що якийсь отруєний пакет надходить і може вийти з цим отруєним джерелом, і саме тому правило також включено в OUTPUT?
Щиро дякую за роз'яснення !!!
це мій власний сценарій 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
Як би я встановив правило, якщо брандмауер використовував його для мого шлюзу і мав кальмар всередині локальної мережі ???